Переписано 2017-05
После более чем десяти лет написания кода на Python и управления различными пакетами я пришел к выводу, что DIY, возможно, не лучший подход.
Я начал использовать пакет pbr
для работы с версиями в моих пакетах. Если вы используете git в качестве SCM, это впишется в ваш рабочий процесс, как по волшебству, сохраняя ваши недели работы (вы будете удивлены, насколько сложной может быть проблема).
На сегодняшний день pbr занимает 11-е место по популярности среди пакетов python , и достижение этого уровня не включало каких-либо подвохов: было только одно: исправить распространенную проблему с упаковкой очень простым способом.
pbr
может нести больше бремени обслуживания пакета, не ограничивается версионированием, но не заставляет вас использовать все его преимущества.
Итак, чтобы дать вам представление о том, как выглядит использование pbr в одном коммите, взгляните сворачивая упаковку в pbr
Вероятно, вы заметили, что версия вообще не хранится в хранилище. PBR обнаруживает его по веткам и тегам Git.
Не нужно беспокоиться о том, что происходит, когда у вас нет git-репозитория, потому что pbr «компилирует» и кэширует версию, когда вы упаковываете или устанавливаете приложения, поэтому нет зависимости во время выполнения от git.
Старое решение
Вот лучшее решение, которое я когда-либо видел, и оно также объясняет, почему:
Внутри 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'
Внутри yourpackage/__init__.py
:
from .version import __version__
Внутри setup.py
:
exec(open('yourpackage/version.py').read())
setup(
...
version=__version__,
...
Если вы знаете другой подход, который кажется лучше, дайте мне знать.