Как назначить номер версии для пакета Python, используя SVN и distutils? - PullRequest
4 голосов
/ 10 марта 2009

Я пишу пакет Python. Пакет должен знать свой номер версии внутри, а также включать эту версию в сценарий setup.py для distutils.

Как лучше всего это сделать, чтобы номер версии не нужно было хранить в двух разных местах? Я не хочу импортировать скрипт setup.py из остальной части моей библиотеки (что выглядит довольно глупо), и я не хочу импортировать свою библиотеку из скрипта setup.py (аналогично) В идеале, я бы просто установил ключевое слово в svn и автоматически подставил его в файлы, но в svn это не представляется возможным. Я мог бы прочитать общий текстовый файл, содержащий номер версии в обоих местах - это лучшее решение?

Чтобы уточнить : я хочу сохранить номер версии в одном месте. Да, я мог бы поместить переменную в пакет и снова в файл setup.py. Но тогда они неизбежно вышли бы из синхронизации.

Ответы [ 4 ]

5 голосов
/ 10 марта 2009

Внутри вашего основного пакета у вас, вероятно, есть __init__.py, верно?

Структура каталогов:

> ./packageTest
>   ./packageTest/__init__.py
>   ./packageTest/setup.py

Внутри файла __init__.py добавьте следующую строку:

# package directory __init__.py
__version__ = 1.0

файл setup.py:

# setup.py
from packageTest import __version__
...

Теперь в любом модуле, который импортирует из каталога пакетов (я назову packageTest), вы можете сделать это:

from packageTest import setup
print 'Setup.py version:', setup.__version__  
# prints Setup.py version: 1.0
0 голосов
/ 16 января 2012

См. Также Стандартный способ встраивания версии в пакет Python? о том, как распространять информацию о версии из одного места (файл с именем _version.py) в места, где его ищет другой код (например, атрибут с именем __version__ и PEP 0345 метаданные).

Затем посмотрите новый инструмент "versioneer" Брайана Уорнера , который создает файл _version.py из истории контроля версий.

Кроме того, пожалуйста, ознакомьтесь с моим ответом на Стандартный способ встраивания версии в пакет python? , чем больше людей осознают, что существует способ сделать это, чтобы избежать проблем импорта вашего модуля из вашей установки сценарий, тем лучше.

0 голосов
/ 10 марта 2009

У меня была похожая проблема с моим проектом. Я написал скрипт верхнего уровня, test / build / package / deploy, который называется build.py (обратите внимание, не на основе distutils). Он читает файл свойств , который содержит централизованный номер версии. Вместо того, чтобы поддерживать файл setup.py напрямую, я сохраняю файл шаблона , и мой скрипт build.py считывает его, заменяет переменную версии значением из файла props, а затем записывает скрипт setup.py Затем мой файл скрипта выполнит его, чтобы сгенерировать пакет или загрузить в pypi.

0 голосов
/ 10 марта 2009

Глупо импортировать скрипт установки внутри вашего пакета (тем более, что он может больше не присутствовать после установки вашей библиотеки), но импорт вашей библиотеки внутри setup.py должен быть в порядке. Также будет работать отдельный текстовый файл, но есть проблема, что вы должны установить текстовый файл вместе с вашим пакетом, если вы хотите получить доступ к номеру версии во время выполнения.

...