Seite 1 von 1
Package
Verfasst: Samstag 4. Februar 2017, 23:00
von pixewakb
Ich habe etwa folgende Ordner-Struktur:
[codebox=text file=Unbenannt.txt]
toolname (Ordner)
setup.py
> toolname (package)
>> toolname.py (= main)
>> modul1.py
>> modul2.py
[/code]
Das steht in meiner setup.py-Datei:
Code: Alles auswählen
from distutils.core import setup
setup(
name = "toolname",
version = "1.0",
packages=['toolname',],
py_modules = ["toolname"]
)
Irgendwie werden die Module erkannt, nicht aber das Hauptmodul, wo die Programmlogik drinliegt, d. h. eine Klasse kann ich von dort nicht importieren. Kann mir jemand helfen? Kann ich dem Hauptordner, dem package und der Hauptdatei (.py) den identischen Namen geben?
Re: Package
Verfasst: Samstag 4. Februar 2017, 23:14
von BlackJack
@pixewakb: Wenn das Package `toolname` heisst, dann und darin ein Modul `toolname` liegt, dann ist das doch eigentlich `toolname.toolname`. Ist diese Doppelung wirklich so gewollt? Was steht denn in der `__init__.py` von dem Package? Denn das ist ja das Modul was man beim Import des Packages `toolname` bekommt.
Oder sollte `toolname.py` eigentlich das Programm sein das die Bibliothek `toolname` benutzt? Dann gehört es nicht *in* das Package, beziehungsweise brauchst Du noch ein Programm (welches auch gerne noch mal `toolname.py` heissen kann) welches das Modul `toolname.toolname` importiert und daraus etwas aufruft.
Ansonsten bin ich etwas verwirrt was `py_modules` letztendlich soll. Wenn das Modul Teil des Packages ist, dann reicht es ja das Package anzugeben.
Re: Package
Verfasst: Sonntag 5. Februar 2017, 13:16
von pixewakb
BlackJack hat geschrieben:Was steht denn in der `__init__.py` von dem Package?
Ich dachte, dass diese Datei immer leer bleiben muss?
Ich habe die Ordnerstruktur jetzt noch mal geändert und zwar dahingehend:
[codebox=text file=Unbenannt.txt]
* package (Ordner)
** __init__.py
** modul1.py
** modul2.py
** usw. usf.
tool.py
setup.py
[/code]
Mein setup.py-Skript hat jetzt folgenden Inhalt:
Code: Alles auswählen
from distutils.core import setup
setup(
name = "tool",
version = "3.0",
py_modules = ["package"]
)
Damit konnte ich es jetzt gerade installieren und es läuft. Im Moment blicke ich nicht ganz durch, bin aber dankbar, dass es läuft. An diesem Paket habe ich seit dem 17. Januar gearbeitet und bin momentan einfach nur dankbar, dass es läuft.
Es ist das erste Mal, dass ich mit einem package und einer setup.py-Datei gearbeitet habe. Bislang waren alle meine Skripte kleiner und d. h. ein Skript und eine setup.py ohne package. Das zuerst gezeigte setup.py-Tool war an ein Beispiel im Netz angelehnt.
Re: Package
Verfasst: Sonntag 5. Februar 2017, 18:14
von BlackJack
@pixewakb: Die `__init__.py` enthält das was man bekommt wenn man ``import package`` oder ``from package import something_from_package_except_submodules`` ausführt. Leer bleiben muss die bei Namespace-Packages weil es dann ja mehr als eine `__init__.py` gibt die sich diese Position in der Packagehierarchie ”teilt”.
Ich hätte `package` in `packages` gelassen und `py_modules` weg gelassen. Und wenn mit der `tool.py` noch etwas passieren sollte, also wenn die als Programm installiert werden soll müsste man noch `scripts` verwenden.
Re: Package
Verfasst: Dienstag 7. Februar 2017, 22:11
von pixewakb
Ich habe das mit packages geändert, was ist mit scripts gemeint!? Das tool.py ist das Programm, was ich eigentlich nutze, da ist der Programmkern enthalten. Aktuell läuft es fehlerfrei, d. h. ich kann von dort importieren und die Klassen funktionieren.
Aus dem Abschnitt
https://docs.python.org/3.4/distutils/s ... ng-scripts
werde ich ehrlich gesagt nicht ganz schlau. Was leistet scripts und wozu genau brauche ich das? (Mich wundert, dass es jetzt scheinbar schon läuft!?) Danke!
Re: Package
Verfasst: Dienstag 7. Februar 2017, 23:21
von BlackJack
@pixewakb: Das ist dazu da um die Skripte *zu installieren*. Oder wandert Dein `tools.py` auf magische Weise an die richtige Stelle?
