Согласованное управление версиями в проекте Python - PullRequest
8 голосов
/ 16 февраля 2012

У меня есть проект Python, в котором есть документация Sphinx и distutils для публикации в Pip.

Обе эти функции требуют версии (например, 0.4b3)

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

В качестве бонуса, есть ли что-нибудь, что интегрируется с git (например, с помощью тегов)?

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Это любимый вопрос в списках рассылки Python distutils. Вы можете импортировать свой модуль из setup.py, а также из conf.py и получить модуль. version . Это может не работать в зависимости от вашего импорта, вашего использования 2to3 или других факторов, и в этом случае вы можете переместить свою версию в текстовый файл и открыть ее из вашего модуля, setup.py и conf.py.

Мое личное мнение заключается в том, что обновление номера версии в трех местах не является большой нагрузкой. Это незначительный шаг в процессе выпуска.

0 голосов
/ 16 февраля 2012

Это непроверенный ответ, но я думаю, это было бы довольно легко сделать с помощью sphinx в скрипте conf.py. Поскольку этот скрипт просто Python, вы можете сделать что-то вроде этого:

import subprocess

...

path_to_source = "../src"
release = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=path_to_source)
version = subprocess.check_output(["git", "describe", "--tags", "HEAD"], cwd=path_to_source)

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

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

...