Этот вопрос пытается дополнить этот . У меня есть приложение Python, которое использует сторонние модули из PyPI. Я хочу упаковать свое приложение в пакет Debian, но не знаю, как обрабатывать зависимости Python, которых нет в репозиториях Debian / Ubuntu (также упакованы в пакеты Debian)
Решение № 1:
собрать модули из PyPI прямо в мой пакет Debian.
Решение №2:
создайте пакеты debian для всех необходимых мне модулей PyPI, используя stdeb, и добавьте их в репозитории debian / ubuntu.
На самом деле мне нужно решение № 3, потому что я хочу устанавливать зависимости PyPI при установке пакета debian, предпочтительно в virtualenv!
Каким было бы Решение № 3 ? Нужно ли настраивать скрипт DEBIAN / preinst сопровождающий?
package-management
python
debian
andri_ch
источник
источник
.deb
файл или настроить частный репозиторий или PPA в Launchpad.Ответы:
Я говорил с некоторыми сопровождающими на IRC-канале Debian irc: //irc.debian.org#debian-mentors , спрашивая о том же, и общий консенсус был:
Решение № 1:
Интеграция зависимостей в ваш пакет путем копирования их исходных файлов как единой кодовой базы очень не одобряется. Это побеждало бы назначение системы упаковки, которая обрабатывает зависимости, обновления, управление версиями и т. Д.
Решение № 3:
Загрузка не-debian пакетов на лету при установке бинарного (
.deb
) представляет серьезную угрозу безопасности, определенно нет. Вы даже не сможете проверить зависимости путем извлеченияdeb
, потому что они загружаются и устанавливаются во время установки. Это подход, который полностью обходит систему хранилищ. Ни один заинтересованный пользователь не будет доволен пакетом, который за кулисами (и какroot
, помните!) Загружает дополнительное ненадежное программное обеспечение из ненадежных источников. Да, это потребовало бы возиться сDEBIAN/postinst
(илиpreinst
) и выдатьwget
(или, в вашем случае,pip install
), и именно такой подход используют Flash, Oracle Java, Steam и другие. Но это проприетарное программное обеспечение с закрытыми исходными кодами, так что их безопасность в любом случае отсутствует.Решение № 1.5:
Вы не упомянули, но вы могли бы интегрировать зависимости только на время сборки , то есть в исходном пакетом (
.orig.tar.gz
,.debian.tar.gz
,.dsc
триады), скачав из PyPi при создании «двоичный» пакет (в.deb
). Инструкции для ( в отличие от бинарного пакета)pip install
будут записаныdebian/rules
(обратите внимание на строчные буквыdebian
) и будут выполняться при запускеdebuild
илиdpkg-buildpackage
.Это золотая середина между # 1 и # 3. Это смягчает (но не решает!) Некоторые проблемы # 3: по крайней мере, вы можете проверить конечный продукт, и для
.deb
этого не потребуется доступ в Интернет во время установки. Все риски и нагрузки переносятся от конечного пользователя к сопровождающему пакета. Но имеет те же проблемы, что и № 1, поскольку он обходит большую часть инфраструктуры упаковочной системы. В конце концов, обработка зависимостей (версий, обновлений, требований, конфликтов) - вот почемуdpkg
/apt
была создана в первую очередь! :)Решение № 2:
Единый Истинный Правильный путь ™ . Вы создаете пакеты Debian для своих зависимостей, перечисляете их как требования в вашем пакете и отправляете все
.debs
пакеты или исходные коды.Оттуда у вас есть несколько вариантов:
Отправьте исходные пакеты, как ваше программное обеспечение, так и его зависимости, для включения в Debian. Если они будут приняты, они будут автоматически доступны всем пользователям Debian, включая все производные, такие как Ubuntu.
Загрузите исходные пакеты на Launchpad , создавая таким образом PPA, который любой пользователь Ubuntu (и его производные, такие как Linux Mint) может легко добавить и установить
Разместите на своем веб-сайте свой собственный репозиторий Debian, чтобы пользователи из любой системы на основе Debian могли добавить к ним
/etc/apt/sources.list.d
и использоватьapt
инфраструктуру для загрузки, установки и обновления (как описано выше!)Разместите
.deb
файлы для прямой загрузки и установки. Нетapt
или автоматические обновления, связанные мысли.Что касается того, как упаковать ваши зависимости PyPi (и ваше программное обеспечение python!), Есть ряд инструментов и ссылок, которые облегчают процесс:
stdeb , как вы упомянули. Олди и гуди.
Pybuild , новый удивительный инструмент от Debian, который заменяет собой
stdeb
.И много полезных ссылок:
Руководство по стилю для упаковки библиотек Python
Политика Debian Python
Нужна помощь? Проверьте это:
Часто задаваемые вопросы о Debian Mentors
Python Packaging Team
источник
Я думаю, вам просто нужно добавить соответствующий код командной строки в скрипт postinst в пакете .deb. Найдено в этом ответе , более подробно на официальном руководстве DEBiAN .
источник
Есть
pypi2deb
взять пакет из pypi и превратить его в пакет deb.источник
Это не так, как cpan в perl, если у вас есть в репозиториях, вы можете установить с помощью apt-get, если не можете установить с помощью pip, разница должна быть в том, что pip устанавливается в / usr / local.
Для установки с помощью pip вы можете сделать:
например:
источник