Как сохранить номер версии в одном месте в проекте Python с помощью setup.py и debian / control

Для проекта Python, над которым я работаю, я бы хотел:

  • Хранить строку версии в одном месте.
  • Уметь получать строку версии во время выполнения для целей ведения журнала.
    • Получить значение по умолчанию при запуске кода из исходной ветви.
    • Получите значение, которое зависит от номера ревизии bzr ветви, которая использовалась для сборки исходного пакета.
  • Сделать пакеты проектов доступными в PPA панели запуска, используя рецепт .

То, как код работает прямо сейчас:

  • номер версии указан в debian/changelog
  • рецепт в панели запуска добавляет номер редакции ветви разработки когда пакет с исходным кодом собран.
  • функция в setup.py анализирует первую строку debian/changelog, чтобы получить номер версии и передать его в setup, чтобы setup --version работала нормально (без номера ревизии, но это можно исправить).

Однако номер версии недоступен во время выполнения. Что может быть хорошим способом сделать это и удовлетворить требования выше?

Некоторые решения, которые я использовал / видел в прошлом, основаны на создании модуля version.py во время сборки из шаблона:

]
  • Использование внешнего инструмента

    Инструмент / команда используется для генерации модуля version.py с номером версии. Однако это не очень хорошо работает с рецептами панели запуска, потому что возможность запуска произвольных команд в рецепте отключена в панели запуска .

  • В setup.py

    я видел проект, который подклассов distutils.command.install_data.install_data выполняет некоторые подстановки строк на лету. Однако код не очень читабелен, поэтому я бы предпочел использовать другую стратегию.

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

Я уже читал другие вопросы в SO, такие как:

, но на самом деле они не решают проблему работы с упаковкой и контролем версий в то же время.

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

1
задан 23 May 2017 в 15:39

1 ответ

инструмент/команда А используется для генерации version.py модуля с номером версии. Однако это не работает хорошо с рецептами панели запуска, потому что способность выполнить произвольные команды в рецепте отключена в панели запуска.

можно, конечно, сделать это во время изготовления, скорее это во время исходного создания пакета.

version.py:

# Overwritten during Debian packaging build
package_version="unknown"

debian/rules:

override_dh_auto_build:
        dpkg-parsechangelog | sed -rne 's,^Version: (.*),package_version="\1", p' > version.py
        dh_auto_build

debian/clean:

version.py
4
ответ дан 23 May 2017 в 15:39

Другие вопросы по тегам:

Похожие вопросы: