Для проекта Python, над которым я работаю, я бы хотел:
То, как код работает прямо сейчас:
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, такие как:
, но на самом деле они не решают проблему работы с упаковкой и контролем версий в то же время.
Пожалуйста, дайте мне знать, что может быть разумным подходом для этого, и предоставьте ссылку на пример проекта, который использует этот подход, если это возможно.
инструмент/команда А используется для генерации 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