Как пакет Debian может установить модули Python из PyPI?

Этот вопрос пытается дополнить этот . У меня есть приложение Python, которое использует сторонние модули из PyPI. Я хочу упаковать свое приложение в пакет debian, но не знаю, как обрабатывать зависимости python, которых нет в репозиториях debian / ubuntu (также упакованных в пакеты debian)

Решение № 1: [ 1110]
собирать модули из PyPI прямо в мой пакет debian.

Решение № 2:
создайте пакеты debian для всех необходимых мне модулей PyPI, используя stdeb , и добавьте их в репозитории debian / ubuntu.

Мне действительно нужно решение №3 , потому что я хочу установить зависимости PyPI при установке пакета debian, предпочтительно в virtualenv!

Каким будет решение № 3 ? Нужно ли настраивать скрипт DEBIAN / preinst сопровождающего?

19
задан 13 April 2017 в 15:24

4 ответа

Существует pypi2deb, чтобы получить пакет из pypi и превратить его в пакет deb.

0
ответ дан 13 April 2017 в 15:24

Я думаю, вам просто нужно добавить соответствующий код командной строки в скрипт postinst в пакете .deb. Нашел в этот ответ , более подробную информацию можно найти в официальном руководстве по Debian .

0
ответ дан 13 April 2017 в 15:24

Это не так, это как cpan в perl, если у вас есть репозитории, вы можете установить с помощью apt-get, если не можете установить с помощью pip, разница должна быть в том, что pip устанавливается в / usr / local.

Для установки с помощью pip вы можете сделать:

apt-get install python-pip 
pip install foopackage 

, например:

pip install MultipartPostHandler2
0
ответ дан 13 April 2017 в 15:24

Я разговаривал с некоторыми сопровождающими на канале 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.

И много полезных ссылок:

Нужна помощь? Проверьте их:

0
ответ дан 13 April 2017 в 15:24

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

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