Sono nuovo di zecca nella gestione dei pacchetti Python e sicuramente ho fatto qualcosa di sbagliato. Sono stato incoraggiato a creare una struttura di directory come segue:Come strutturare i pacchetti Python senza ripetere il nome di livello superiore per l'importazione
bagoftricks
├── bagoftricks
│ ├── bagoftricks
│ │ ├── __init__.py
│ │ └── bagoftricks.py
│ └── __init__.py
├── README.md
└── setup.py
bagoftricks.py contiene due funzioni, levenshtein()
e geofind()
.
vorrei chiamare questi come:
import bagoftricks
x = bagoftricks.levenshtein(arg1,arg2)
Invece, trovo che devo fare questo:
import bagoftricks
x = bagoftricks.bagoftricks.levenshtein(arg1,arg2)
C'è un modo migliore per organizzare i miei pacchetti, in primo luogo, senza la ridondanza di denominazione?
UPDATE
Così, ho seguito le istruzioni del Avichal Badaya qui sotto, e rimosso un livello di nidificazione. Cioè, ora ho ...
bagoftricks
├── bagoftricks
│ ├── __init__.py
│ └── bagoftricks.py
├── README.md
└── setup.py
Tuttavia, per chiamare questo pacchetto, ho ancora ...
from bagoftricks.bagoftricks import geofind()
o
import bagoftricks
poi
>>> bagoftricks.bagoftricks.geofind()
Piuttosto che il desiderato ....
from bagoftricks import geofind()
o
import bagoftricks
>>> bagoftricks.geofind()
non posso rimuovere questo ulteriore livello di nidificazione. Quando provo, per analogia, di rimuovere più di un livello di nidificazione, in modo che il mio modulo è piatta, come:
bagoftricks
├── __init__.py
├── bagoftricks.py
├── README.md
└── setup.py
non riesco a compilare il pacchetto a tutti ...
$ python setup.py build
running build
running build_py
error: package directory 'bagoftricks' does not exist
Qual è la segreto per le importazioni naturali come i pacchetti standard utilizzati, senza importazioni di nomi di livello superiore ridondanti?
Grazie, questo è chiaro e utile, specialmente il consiglio su come far crescere in modo efficace e corretto. Il problema era quindi la mia dichiarazione __init__.py. Non ho capito bene dove si trovava nella gerarchia e dove metterlo per abbreviare la chiamata. Funziona perfettamente. Grazie! – Mittenchops