Работа с версиями, сгенерированными из тегов git repo с помощью pbr
У меня проблемы с получением информации о версии из моего пакета, который настроен как обычный пакет Python с использованием setuptools
с pbr
расширение. pbr
будет извлекать информацию о версии из тегов в репозитории git, так что есть единый источник правды.
Я получил основы работы - см. Эти вопросы и ответы для получения дополнительной информации .
Это работает в целом, если я сделаю полный дистрибутив пакета. Например: py setup.py sdist
создаст полный дистрибутив и обновит тег версии и другие метаданные из git.
Но мне не нужны полные дистрибутивы этого пакета, моя команда просто работает над ним локальноиз мерзавца репо. Я также использую pyinstaller
для создания исполняемого файла основного скрипта для распространения пользователем (без использования Python). Поэтому мне нужна простая быстрая команда, которая будет просто обновлять метаданные на основе последних обновлений git-репо, не тратя дополнительного времени на SetupTools для создания и создания полного дистрибутива, который в любом случае не будет использоваться.
pbr
будет извлекать версию (из тегов), авторов и информацию об изменениях из репозитория, так что это значительно экономит время, позволяя нам хранить большую часть метаданных непосредственно в git.
Вопросы
Есть ли что-то, что мы можем сделать, чтобы метаданные пакета обновлялись до pbr
, без полного распространения?
В частности, в версии:
- Когда илис какими командами будет
setup.py
с использованием расширения pbr
фактически обновлять версию из git repo, чтобы любая команда, запрашивающая версию, получала обновленную версию? - Где версия на самом деле хранится в этой настройке? (Я не могу его найти ...)
Дополнительная информация и код
У меня очень короткий setup.py
для использования с pbr
extension:
#!/usr/bin/env python
from setuptools import setup
setup(
setup_requires=['pbr', 'setuptools'],
pbr=True,
)
Теперь, если я обновлю последний коммит в git-репо с помощью тега, команда py setup.py --version
вернет новую обновленную версию на основе этого тега, но любой другой прямой метод Iможет найти все еще вернет старую версию строки. Так что эта команда нигде не хранит строку новой версии.
Вот несколько методов, которые я пробовал из моего пакета __init__.py
:
import pkg_resources # part of setuptools
v1 = pkg_resources.require("md2mat")[0].version
print('v1 {}'.format(v1))
v2 = pkg_resources.get_distribution('md2mat').version
print('v2 {}'.format(v2))
from pbr.version import VersionInfo
v3 = VersionInfo('md2mat').release_string()
print('v3 {}'.format(v3))
# Update per sinoroc's comment:
# As of Python 3.8, you can use this from the stdlib,
# which removes run-time dependencies on `pbr` or `setuptools`
import importlib.metadata
__version__ = importlib.metadata.version('Example')
Все вышеперечисленное возвращает старая строка версии (в последний раз был сделан полный дистрибутив).
Итак, есть ли что-нибудь, что я могу сделать, кроме py setup.py sdist
или аналогичной команды построения полного дистрибутива (bdist, bdist_egg,и т.д.), чтобы просто обновить информацию о моем пакете на месте, чтобы приведенные выше методы предоставили мне строку последней версии и другие метаданные git при запуске сценария основного пакета?
Это позволило бы нам обновить пакет локально, какразработчики после проверки нового коммита и запуска pyinstaller
, чтобы создать наш exe-файл и выпустить версию скрипта для конечного пользователя.