Стандартный способ встраивания версии в пакет Python? - PullRequest
222 голосов
/ 19 января 2009

Есть ли стандартный способ связать строку версии с пакетом python таким образом, чтобы я мог сделать следующее?

import foo
print foo.version

Я бы предположил, что есть какой-то способ получить эти данные без какого-либо дополнительного жесткого кодирования, поскольку второстепенные / старшие строки уже указаны в setup.py. Альтернативное решение, которое я нашел, состояло в том, чтобы иметь import __version__ в моем foo/__init__.py, а затем иметь __version__.py, сгенерированное setup.py.

Ответы [ 14 ]

3 голосов
/ 26 октября 2016

стрелка обрабатывает это интересным образом.

В arrow/__init__.py:

__version__ = '0.8.0'
VERSION = __version__

В setup.py:

def grep(attrname):
    pattern = r"{0}\W*=\W*'([^']+)'".format(attrname)
    strval, = re.findall(pattern, file_text)
    return strval

setup(
    name='arrow',
    version=grep('__version__'),
    # [...]
)
0 голосов
/ 07 февраля 2018
  1. Используйте файл version.py только с параметром __version__ = <VERSION> в файле. В файле setup.py импортируйте параметр __version__ и поместите его значение в файл setup.py следующим образом: version=__version__
  2. Другой способ - использовать setup.py файл с version=<CURRENT_VERSION> - CURRENT_VERSION жестко закодирован.

Поскольку мы не хотим вручную изменять версию в файле каждый раз, когда создаем новый тег (готовый к выпуску новой версии пакета), мы можем использовать следующее ..

Я настоятельно рекомендую bumpversion пакет. Я использовал его в течение многих лет, чтобы поднять версию.

начните с добавления version=<VERSION> в файл setup.py, если у вас его еще нет.

Вы должны использовать такой короткий сценарий каждый раз, когда вы поднимаете версию:

bumpversion (patch|minor|major) - choose only one option
git push
git push --tags

Затем добавьте один файл в репо с именем: .bumpversion.cfg:

[bumpversion]
current_version = <CURRENT_TAG>
commit = True
tag = True
tag_name = {new_version}
[bumpversion:file:<RELATIVE_PATH_TO_SETUP_FILE>]

Примечание:

  • Вы можете использовать параметр __version__ в файле version.py, как это было предложено в других публикациях, и обновить файл bumpversion следующим образом: [bumpversion:file:<RELATIVE_PATH_TO_VERSION_FILE>]
  • Вы должны git commit или git reset все в своем репо, в противном случае вы получите ошибку грязного репо.
  • Убедитесь, что ваша виртуальная среда включает в себя пакет bumpversion, без него он не будет работать.
0 голосов
/ 02 июня 2017

Если вы используете CVS (или RCS) и хотите быстрое решение, вы можете использовать:

__version__ = "$Revision: 1.1 $"[11:-2]
__version_info__ = tuple([int(s) for s in __version__.split(".")])

(Конечно, номер редакции будет заменен на CVS.)

Это дает вам версию для печати и информацию о версии, которую вы можете использовать, чтобы проверить, что импортируемый вами модуль имеет по крайней мере ожидаемую версию:

import my_module
assert my_module.__version_info__ >= (1, 1)
0 голосов
/ 19 января 2009

Для чего стоит, если вы используете NumPy distutils, numpy.distutils.misc_util.Configuration имеет метод make_svn_version_py(), который встраивает номер ревизии в package.__svn_version__ в переменную version.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...