2014-10-01 2 views
12

Если у меня sphinx-quickstart Меня спрашивают о версии проекта.Пусть sphinx использует версию от setup.py

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

Как это сделать в мире упаковки питона?

+0

Итак, для вас какой-либо из ответов работает? Если да, примите соответствующий ответ. Если нет, в чем проблема? –

+0

Благодарим за вопрос. Я не спешу с этой темой. Я хочу канонический ответ. Я спрошу на dist-sig: https://www.python.org/community/sigs/current/distutils-sig – guettli

+0

Связанный: https://packaging.python.org/en/latest/single_source_version.html – guettli

ответ

11

Самый простой (и, вероятно, надёжным) способом является определение __version__ для __init__.py вашего пакета верхнего уровня, а затем импортировать этот пакет и прочитал версию в обоих setup.py и ваш проект Сфинкса conf.py.

Так что скажем, что ваш проект называется myproject.

Переместить текущую версию из setup.py, и сделать его переменное в myproject/__init__.py вместо:

myproject/__init__.py:

# import foo 
# ... 

__version__ = '1.5' 

Импорт myproject в вашем проекте setup.py, и заменить жёстко прописанную версию с myproject.__version__ :

setup.py:

from setuptools import setup 
from myproject import __version__ 


project = "myproject" 

setup(
    name=project, 
    version=__version__, 
    # ... 
) 

В вашем проекте Сфинкса conf.py, сделать то же самое. Так редактировать сгенерированный conf.py вдоль этих линий:

docs/conf.py:

from myproject import __version__ 

# ... 

# The short X.Y version. 
version = __version__ 
# The full version, including alpha/beta/rc tags. 
release = version 

Для примера библиотеки, которая делает это в значительной степени так же, как это, взгляните на модуль requests (__init__.py | setup.py | conf.py).

Это позаботится об автогенерированных текстах, где используется версия проекта (например, ссылки на первую страницу документации). Если вы хотите использовать свою версию в определенных настраиваемых местах, вы можете использовать директиву rst_epilog для динамического вставки значений конфигурации, определенных в conf.py.

+3

В другом Вопрос о том, было ли указано, что если вы импортируете некоторые зависимости в myproject/__ init__.py, а затем выполните 'from myproject import __version__' в setup.py, пользователь не сможет установить пакет без установки зависимостей сначала: http://stackoverflow.com/questions/2058802/how-can-i -get-the-version-defined-in-setup-py-setuptools-in-my-package –

2

Вы могли бы посмотреть на bumpversion модуль:

«Маленький инструмент командной строки для упрощения отпуская программное обеспечение, обновление всех версий строк в исходном коде с помощью правильного приращения»

Вы можете использовать конфигурацию файл .bumpversion.cfg для сложных многофайловых операций.

+0

Это может привести только к удалению одной из строк в docs/conf.py – kaleissin

Смежные вопросы