Если у меня sphinx-quickstart
Меня спрашивают о версии проекта.Пусть sphinx использует версию от setup.py
Я хочу, чтобы у меня не было двух мест для версии моего проекта.
Как это сделать в мире упаковки питона?
Если у меня sphinx-quickstart
Меня спрашивают о версии проекта.Пусть sphinx использует версию от setup.py
Я хочу, чтобы у меня не было двух мест для версии моего проекта.
Как это сделать в мире упаковки питона?
Самый простой (и, вероятно, надёжным) способом является определение __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
.
В другом Вопрос о том, было ли указано, что если вы импортируете некоторые зависимости в 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 –
Вы могли бы посмотреть на bumpversion
модуль:
«Маленький инструмент командной строки для упрощения отпуская программное обеспечение, обновление всех версий строк в исходном коде с помощью правильного приращения»
Вы можете использовать конфигурацию файл .bumpversion.cfg
для сложных многофайловых операций.
Это может привести только к удалению одной из строк в docs/conf.py – kaleissin
Итак, для вас какой-либо из ответов работает? Если да, примите соответствующий ответ. Если нет, в чем проблема? –
Благодарим за вопрос. Я не спешу с этой темой. Я хочу канонический ответ. Я спрошу на dist-sig: https://www.python.org/community/sigs/current/distutils-sig – guettli
Связанный: https://packaging.python.org/en/latest/single_source_version.html – guettli