Версионные зависимости dh_python2 из setup.py

Я собираю пакет.deb модуля python с помощью dpkg-buildpackage. в setup.py я указал install_requires=['othermodule>=2.0']но сгенерированный контрольный файл не указывает версию. Depends: python (>= 2.7), othermodule,dh_python угадывает требования на основе файла setup.py. Однако на странице dh_python2 говорится, что

(требования к версии по умолчанию игнорируются)

но мне не удается включить версию в контрольный файл. Проблема в том, что без включенной версии устанавливается пакет.deb, но затем запускается программа, которую я получаю:

pkg_resources.DistributionNotFound: The 'othermodule>=2.0' distribution was not found and is required by ...

потому что установленная версия меньше 2.0

Я хотел бы иметь возможность указывать версию зависимости только один раз (например, в файле setup.py)

[РЕДАКТИРОВАТЬ:]

Я вижу, что в pydist.py функция load() ищет абсолютные пути:

def load(dname='/usr/share/python/dist/', fname='debian/pydist-overrides',
         fbname='/usr/share/python/dist_fallback'):

а не в./debian, где лежит моя структура пакета. И поскольку пакет еще не установлен (я нахожусь в процессе его сборки), файл pydist не найден. Я что-то пропустил???

1 ответ

Решение

Как сказано в вики Pybuild:

dh_python2 и dh_python3 правильно заполнят зависимости установки (через ${python:Depends} и ${python3:Depends} соответственно)

Итак, если вы будете использовать ${python:Depends} в вашем debian/control, dh_python попытается отобразить ваш install_requires от setup.py к фактическим зависимостям deb. Используйте это так:

Depends: python (>= 2.7), ${misc:Depends}, ${python:Depends}

Вы также можете указать желаемую версию для вашего othermodule в Debian / Control, как вы сделали для Python:

Depends: python (>= 2.7), othermodule (>=2.0)

[РЕДАКТИРОВАТЬ]

Вы можете разместить pydist-overrides файл в папке Debian, который использует PEP386 заставить dh_python включать информацию о версии при разрешении зависимостей установки. Он использует тот же синтаксис, что и файл.pydist:

OthermoduleName python-othermodule; PEP386

Надеюсь это поможет.

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