Umgeschrieben 2017-05
Nach mehr als 13 Jahren, in denen ich Python-Code geschrieben und verschiedene Pakete verwaltet habe, bin ich zu dem Schluss gekommen, dass DIY vielleicht nicht der beste Ansatz ist.
Ich habe mit der pbr
Paket für den Umgang mit der Versionierung in meinen Paketen. Wenn Sie Git als SCM verwenden, wird sich dies wie von Zauberhand in Ihren Arbeitsablauf einfügen und Ihnen wochenlange Arbeit ersparen (Sie werden überrascht sein, wie komplex das Thema sein kann).
Von heute an, pbr hat 12 Mio. monatliche Downloads Und um diese Stufe zu erreichen, bedurfte es keiner schmutzigen Tricks. Es ging nur um eine Sache - die Lösung eines allgemeinen Verpackungsproblems auf sehr einfache Weise.
pbr
kann einen größeren Teil der Paketpflege übernehmen und ist nicht auf die Versionierung beschränkt, aber es zwingt Sie nicht dazu, alle Vorteile zu übernehmen.
Damit Sie sich ein Bild davon machen können, wie es aussieht, wenn Sie pbr in einem Commit übernehmen, sehen Sie sich das an Umstellung der Verpackung auf pbr
Wahrscheinlich würden Sie feststellen, dass die Version überhaupt nicht im Repository gespeichert ist. Das Züchterrecht erkennt sie anhand von Git-Zweigen und Tags.
Sie brauchen sich keine Gedanken darüber zu machen, was passiert, wenn Sie kein Git-Repository haben, da pbr die Version "kompiliert" und zwischenspeichert, wenn Sie die Anwendungen verpacken oder installieren, so dass es keine Laufzeitabhängigkeit von Git gibt.
Alte Lösung
Hier ist die beste Lösung, die ich bis jetzt gesehen habe, und sie erklärt auch, warum:
Innerhalb yourpackage/version.py
:
# Store the version here so:
# 1) we don't load dependencies by storing it in __init__.py
# 2) we can import it in setup.py for the same reason
# 3) we can import it into your module module
__version__ = '0.12'
Innerhalb yourpackage/__init__.py
:
from .version import __version__
Innerhalb setup.py
:
exec(open('yourpackage/version.py').read())
setup(
...
version=__version__,
...
Wenn Sie einen anderen Ansatz kennen, der besser zu sein scheint, lassen Sie es mich wissen.