Пишу на python3 под Ubuntu, хочу создать deb пакет, подскажите как, или где есть доступная информация?
question@mail.ru
·
01.01.1970 03:00
Как создать deb пакет?
answer@mail.ru
·
01.01.1970 03:00
"
Для того, кто не понимает как устроены .deb пакеты эта задача может оказаться неподъемной, как бы просто не было написано в гайдах.
Первое, что у вас должно быть в наличии - это работающий setup.py, чтобы ваше приложение могло корректно собрать все необходимые файлы и зависимости, где надо скомпилироваться и т.д. Нет setup - нет пакета.
Второе - ваш самый лучший друг отныне - это . dh - значит DebHelper. helper'ы - это специальные утилиты, помогающие собрать вам пакет. Эта штука прочитает ваш , скачает нужную версию Python, скачает все зависимости, скомпилирует опять-таки все, что нужно и ваше приложение окажется мало того, что в пакете, так еще и автоматически в . То есть ваше приложение развернется из пакета уже в изолированной обертке и вы можете быть уверены, что оно никому ничего не сломает, не переставит системный Python, не понаставит лишних библиотек и независимо. Это так круто, что даже сложно описать не задыхаясь. Подключить dh-virtualenv легко.
Третье - создайте в корне проекта каталог с именем debian - это служебный каталог со служебными файлами. Об их назначении и подробностях вы сможете прочитать в соответствующих руководствах, здесь я приведу примеры таких файлов:
rules:
#!/usr/bin/make -f%: dh $@ --with python-virtualenvoverride_dh_virtualenv: dh_virtualenv --python /usr/bin/python3Подключает dh-virtualenv и указывает, что собираемся с Py3. По умолчанию dh-virtualenv последней версии поместит ваши файлы при установке в /opt/venvs/<packagename>, но это зависит от версии, читайте readme. Этот путь можно .
control:
Source: MY_COOL_PACKAGESection: pythonX-Python3-Version: >= 3.3Priority: extraMaintainer: Choo Choo <choochoo@train.swag>Build-Depends: debhelper-compat (= 13), python, dh-virtualenv (>= 0.8), python3-setuptoolsStandards-Version: 4.5.0Package: MY_COOL_PACKAGEArchitecture: allDepends: ${python:Depends}, ${misc:Depends}, postgresql-client, libpq-dev, postgresql-contrib, python3-all, python3-dev, python3-setuptools, python3-pip, libxml2-dev, libxslt1-dev, zlib1g-devDescription: Таки посмотрите на зависимости, подставьте те, которые нужны вамВ этом, да и Makefile обратите внимание на наличие и количество пробелов - вся сборка это ОЧЕНЬ бюрократизированный процесс, не там поставите пробел (или поставите 5 вместо четырех) и долго не будете понимать, в чем дело. С пробелами нужно быть крайне внимательным, читайте в руководствах как конкретно разделяются секции и команды. Обратите внимание, в Makefile команды в рецептах начинаются с табуляции, а не с четырёх пробелов, как их заменяет Stack Overflow. Исправьте это вручную после копирования. Также включите в вашем редакторе подсветку пробельных символов, чтобы распознать смесь пробелов и табуляции.
changelog: тут вам поможет утилита dch. Пускайте man dch и вам там пояснят за смену версий, утилита простая. Можно жахнуть dch -i, чтобы увеличить версию на 1, заполнить список изменений и информацию о контрибьютере. Получится как-то так:
MY_COOL_PACKAGE (0.5.1) experimental; urgency=medium * Пофиксил бажную страницу -- Choo Choo <choochoo@train.swag> Mon, 10 Apr 2017 17:24:45 +0300conffiles: /etc/MY_COOL_PACKAGE/my_config.ini - необходимость в этом файле возникает, если у приложения есть конфиги, в понимании этого слова с позиции dpkg (). Больше про конфиги:
После этого ваше приложение выглядит как-то примерно так:
my_app:-- .git-- sources---- debian/------ changelog------ compat------ control------ files-------- rules---- source_files/---- requirements.txt---- setup.py-- .gitignore-- readme.txtКогда все сделано, все файлы созданы - выполняете команду . Кто-то предпочитает не пользоваться низкоуровневым dpkg, а вместо него использует дебилд - debuild.
Либо dpkg, либо дебилд, если все сделано верно, соберут вам пакет и несколько других файлов, они нас пока не касаются - вас интересует только .deb файл. Это обычный архив, и вы можете посмотреть его, чтобы убедиться, что все на месте.
Если все на месте, то не спешите радоваться, потому что перед тем, как посылать этот пакет в архив, вам нужно его проверить - за это отвечает утилита lintian - она проверит ваш пакет и выдаст вердикт. Если пакет некачественный, то перед установкой dpkg будет ругаться (и всем будет говорить, что пакет некачественный - стыдно), однако, после подтверждения даже некачественный пакет можно установить.
Также нужно отметить, что приведенное ""руководство"" - довольно простой пример для маленького приложения. Наверняка вам потребуется изучить, как вставить pre-install, post-install скрипты (например, для миграций), не раз прочитать руководство на предмет остальных служебных файлов и параметров сборки, коих тьма.
"