Я говорил с некоторыми сопровождающими на 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
.
И много полезных ссылок:
Нужна помощь? Проверьте это: