Этот вопрос пытается дополнить этот . У меня есть приложение Python, которое использует сторонние модули из PyPI. Я хочу упаковать свое приложение в пакет debian, но не знаю, как обрабатывать зависимости python, которых нет в репозиториях debian / ubuntu (также упакованных в пакеты debian)
Решение № 1: [ 1110]
собирать модули из PyPI прямо в мой пакет debian.
Решение № 2:
создайте пакеты debian для всех необходимых мне модулей PyPI, используя stdeb , и добавьте их в репозитории debian / ubuntu.
Мне действительно нужно решение №3 , потому что я хочу установить зависимости PyPI при установке пакета debian, предпочтительно в virtualenv!
Каким будет решение № 3 ? Нужно ли настраивать скрипт DEBIAN / preinst сопровождающего?
Существует pypi2deb
, чтобы получить пакет из pypi и превратить его в пакет deb.
Я думаю, вам просто нужно добавить соответствующий код командной строки в скрипт postinst в пакете .deb. Нашел в этот ответ , более подробную информацию можно найти в официальном руководстве по Debian .
Это не так, это как cpan в perl, если у вас есть репозитории, вы можете установить с помощью apt-get, если не можете установить с помощью pip, разница должна быть в том, что pip устанавливается в / usr / local.
Для установки с помощью pip вы можете сделать:
apt-get install python-pip
pip install foopackage
, например:
pip install MultipartPostHandler2
Я разговаривал с некоторыми сопровождающими на канале Debian IRC irc: //irc.debian.org#debian-mentors , прося точно такую же вещь, и общий консенсус был:
Решение № 1:
Интеграция зависимостей в ваш пакет путем копирования их исходных файлов в виде единой кодовой базы очень вызывает недовольство. Это нарушило бы назначение системы упаковки, которая обрабатывает зависимости, обновления, управление версиями и т. Д.
Решение № 3:
Загрузка пакетов не-debian на лету при установке бинарного файла (.deb
) представляет собой серьезную угрозу безопасности, определенно нет-нет. Вы даже не сможете проверить зависимости, извлекая deb
, потому что они загружаются и устанавливаются во время установки. Это подход, который полностью обходит систему хранилищ. Ни один заинтересованный пользователь не будет доволен пакетом, который за кулисами (и помните, как root
) загружает дополнительное ненадежное программное обеспечение из ненадежных источников. Да, это потребовало бы возиться с DEBIAN/postinst
(или preinst
) и выпустить wget
(или, в вашем случае, pip install
), и это подход, используемый Flash, Oracle Java, Steam и другими. Но это проприетарное программное обеспечение с закрытым исходным кодом, поэтому их безопасность в любом случае отсутствует.
Решение № 1.5:
Вы не упомянули об этом, но вы можете интегрировать зависимости только во время сборки , т. Е. В пакет source (триада .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:
One True Right Way ™ . Вы создаете пакеты 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
.
И много полезных ссылок:
Нужна помощь? Проверьте их: