Ich bin brandneu bei Python-Paket-Management, und sicherlich etwas falsch gemacht haben. Ich wurde aufgefordert, eine Verzeichnisstruktur zu erstellen, wie folgt:Wie Python-Pakete zu strukturieren, ohne Top-Level-Namen für den Import zu wiederholen
bagoftricks
├── bagoftricks
│ ├── bagoftricks
│ │ ├── __init__.py
│ │ └── bagoftricks.py
│ └── __init__.py
├── README.md
└── setup.py
bagoftricks.py enthält zwei Funktionen, levenshtein()
und geofind()
.
würde ich diese als nennen mag:
import bagoftricks
x = bagoftricks.levenshtein(arg1,arg2)
Stattdessen finde ich, ich habe dies zu tun:
import bagoftricks
x = bagoftricks.bagoftricks.levenshtein(arg1,arg2)
Gibt es eine bessere Art und Weise meine Pakete in erster Linie zu organisieren, ohne die Namensredundanz?
UPDATE
So folgte ich Avichal Badaya die nachstehenden Anweisungen, und entfernt eine Ebene der Verschachtelung. Das heißt, die ich jetzt habe ...
bagoftricks
├── bagoftricks
│ ├── __init__.py
│ └── bagoftricks.py
├── README.md
└── setup.py
jedoch, dieses Paket zu nennen, habe ich noch ...
from bagoftricks.bagoftricks import geofind()
oder
import bagoftricks
dann
>>> bagoftricks.bagoftricks.geofind()
Statt der gewünschten ....
from bagoftricks import geofind()
oder
import bagoftricks
>>> bagoftricks.geofind()
kann ich nicht, dass zusätzliche Schicht der Verschachtelung entfernen. Wenn ich versuche, durch Analogie, eine weitere Ebene der Verschachtelung zu entfernen, so dass mein Modul flach ist, wie:
bagoftricks
├── __init__.py
├── bagoftricks.py
├── README.md
└── setup.py
ich überhaupt das Paket nicht bauen kann ...
$ python setup.py build
running build
running build_py
error: package directory 'bagoftricks' does not exist
Was das ist Geheimnis für natürliche Importe wie Standard-Pakete verwenden, ohne redundante Top-Level-Namen importiert?
Danke, das ist klar und hilfreich, vor allem der Tipp, wie man es effektiv und richtig anbaut. Das Problem war definitiv meine __init__.py Aussage. Ich habe nicht ganz verstanden, wo es in der Hierarchie stand und wo man es hinstellte, um den Anruf zu verkürzen. Funktioniert perfekt. Vielen Dank! – Mittenchops