Как обновить метаданные git в пакетах Python с помощью Setuptools и PBR - PullRequest
0 голосов
/ 25 октября 2019

Работа с версиями, сгенерированными из тегов git repo с помощью pbr

У меня проблемы с получением информации о версии из моего пакета, который настроен как обычный пакет Python с использованием setuptools с pbr расширение. pbr будет извлекать информацию о версии из тегов в репозитории git, так что есть единый источник правды.

Я получил основы работы - см. Эти вопросы и ответы для получения дополнительной информации .

Это работает в целом, если я сделаю полный дистрибутив пакета. Например: py setup.py sdist создаст полный дистрибутив и обновит тег версии и другие метаданные из git.

Но мне не нужны полные дистрибутивы этого пакета, моя команда просто работает над ним локальноиз мерзавца репо. Я также использую pyinstaller для создания исполняемого файла основного скрипта для распространения пользователем (без использования Python). Поэтому мне нужна простая быстрая команда, которая будет просто обновлять метаданные на основе последних обновлений git-репо, не тратя дополнительного времени на SetupTools для создания и создания полного дистрибутива, который в любом случае не будет использоваться.

pbr будет извлекать версию (из тегов), авторов и информацию об изменениях из репозитория, так что это значительно экономит время, позволяя нам хранить большую часть метаданных непосредственно в git.

Вопросы

Есть ли что-то, что мы можем сделать, чтобы метаданные пакета обновлялись до pbr, без полного распространения?

В частности, в версии:

  1. Когда илис какими командами будет setup.py с использованием расширения pbr фактически обновлять версию из git repo, чтобы любая команда, запрашивающая версию, получала обновленную версию?
  2. Где версия на самом деле хранится в этой настройке? (Я не могу его найти ...)

Дополнительная информация и код

У меня очень короткий 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-файл и выпустить версию скрипта для конечного пользователя.

1 Ответ

1 голос
/ 25 октября 2019

Похоже, что информация о версии хранится в файле package.egg-info/PKG-INFO. Поэтому любая команда setuptools, которая обновляет информацию о яйцах, будет извлекать информацию git.

В файле PKG-INFO Версия отображается для меня в настоящее время в 3-й строке:

Version: 2.0.4.0b2

Обновление строки версии непосредственно в файле PKG-INFO приводит к тому, что сценарии отображают обновленную строку при доступе через pkg_resources или pbr.version.

Самая быстрая команда для автоматического обновления PBR. метаданные в папке .egg-info выглядят так:

py setup.py egg_info

более длинные / более сложные команды, которые также обновляют информацию, включают build, sdist, bdist и т. д. См. py setup.py --help-commands для более доступных setup.py команд.


Авторы и журнал изменений

Несмотря на то, что приведенное выше верно для версий, файлы AUTHORS и ChangeLog НЕ обновляютсяpbr для команд egg_info или build.

Однако эти файлы генерируются во время команд sdist и bdist (включая все версии bdist, я думаю). Таким образом, похоже, что для обновления всех метаданных из Git требуется одна из полных команд сборки дистрибутива.

Команды, которые не генерируют файлы AUTHORS и ChangeLog:

py setup.py egg_info
py setup.py build
py setup.py develop

(Примечание: я использую довольно свежую команду py для запуска python, которая позволяет вам настроить среду по умолчанию для запуска python, но вам может потребоваться использовать python или python3 вместо)

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