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