Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Hallo!
Ich habe schön einige Zeit gesucht, bin aber nicht fündig geworden. Vielleich weiß hier jemand die Antwort.
Problem:
Ein eigenes Modul in Python 2.7, dass von Version zu Version an Umfang zulegt, und dessen Doku mittels Sphinx dargestellt (bzw. verwaltet) wird.
@Metex: Im Code sollte es per Konvention eher `__version__` anstelle von `VERSION` heissen. Dann lässt Du es aus dem Docstring einfach weg, denn es steht ja schon in `__version__`. Und in der ``setup.py`` importierst Du das Modul mit dem `__version__`-Attribut und verwendest es zum festlegen der Versionsnummer.
Danke für die rasche Antwort. Daran habe ich nicht gedacht.
BlackJack hat geschrieben:@Metex: Im Code sollte es per Konvention eher `__version__` anstelle von `VERSION` heissen. Dann lässt Du es aus dem Docstring einfach weg, denn es steht ja schon in `__version__`. Und in der ``setup.py`` importierst Du das Modul mit dem `__version__`-Attribut und verwendest es zum festlegen der Versionsnummer.
von "VERSION" zu "__version__" wechseln ist trivial machbar
Im Doc-String auf die Versionsnummer zu verzichten schmerzt ein bisschen, aber mit Sphinx lassen sich per 'restructerd text' Variablen so bearbeiten, dass sie in der Doku auftauchen. "__version__" ist dann ohnehin ganz oben. Ist also machbar.
Problematischer für den Workflow ist der Import des neuen Moduls in die setup.py. Per "import blabla" wird die derzeit installierte Version ins setup.py importiert, nicht die neueste gerade bearbeitete Version. Diese einzeln für sich in den python-Pfad aufzunehmen ist unzweckmäßig. Auf die Schnelle fällt mir dazu keine Lösung ein.
3. In setup.py Modul importieren. Aber um zu garantieren, dass das NEUE Modul und nicht das im System installierte verwendet wird, das Modul 'imp' verwenden:
...
import imp
name_des_moduls = 'mymodule'
pfad_des_moduls = './source/mymodule.py'
mymodule = imp.load_source(name_des_moduls,pfad_des_moduls)
# enspricht dem 'import mymodule', nur, dass das richtige Modul importiert wird.
version = mymodule.__version__
print version
...
Das wird wohl scheitern wenn man ``setup.py`` aufruft während man nicht in dem Ordner ist in dem ``setup.py`` liegt.
So etwas wie ``python /tmp/module/setup.py install`` ist IMHO ein durchaus gültiger Use-Case. Also sollte man schauen dass man aus dem relativen Pfad einen absoluten macht.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice