Существует ли стандартный способ создания пакетов Debian для распространения программ на Python? - PullRequest
68 голосов
/ 18 августа 2011

Существует масса информации о том, как это сделать, но, поскольку "существует более одного способа избавиться от кошки" , и все учебные пособия / руководства, которые охватывают часть процесса, кажутсяЧтобы сделать определенные предположения, которые отличаются от других уроков, мне все же не удалось понять это.

Пока это то, что, как мне кажется, я понял.

  1. Моя конечная цель должнабудь то создание "двоичного" пакета .deb.Такой пакет будет независимым от платформы (32/64 бит), так как все программы Python таковы.
  2. Чтобы создать «бинарный» пакет, мне нужно сначала создать пакет с исходным кодом.
  3. Для созданияИсходный пакет я могу использовать либо CDBS, либо debhelper.Debhelper - рекомендуемый способ для начинающих.
  4. Ядром создания пакета с исходным кодом является заполнение каталога DEBIAN в каталоге с исходным кодом несколькими файлами, поясняющими, куда нужно копировать файлы, какие схемы авторского права и лицензированияони зависят от того, какие у них зависимости и т. д. ...
  5. Шаг № 4 может быть в значительной степени автоматизирован командой dh_make , если исходный код Python также поставляется с distutils setup.py script.

Теперь мои вопросы:

  1. Правильно ли мое понимание процесса? Есть ли что-то, что я пропускаю, или что-то, что яошибся?
  2. Шаг # 5 действительно меня больше смущает: конкретно два вопроса, которые остаются для меня наиболее неясными:
    • Как мне написать setup.py скрипткоторые устанавливают автономную программу? РЕДАКТИРОВАТЬ: Под автономная программа Я имею в виду программу, предназначенную для использования настольным пользователем (в отличие от модуля *)1043 * который я иerstand как набор функциональных возможностей, которые будут использоваться другим программным обеспечением после импорта).В моем конкретном случае мне действительно потребовалось бы две таких «программ»: основное программное обеспечение и отдельная утилита (в сущности, вторая «программа», которая должна быть в одном пакете с другой).
    • Каковы особенности такого сценария для пакетов DEB? Официальная документация касается только RPM и Windows ...

Кстати: это лучшие источники информации, которые я мог найти на данный момент.Если у вас есть что-то лучше, чем это, пожалуйста, поделитесь!:)

Ответы [ 4 ]

23 голосов
/ 18 августа 2011

Похоже, stdeb будет делать то, что вы хотите.

Кроме того, для установки сценариев я настоятельно рекомендую распространять поддержку console_scripts точки входа.

9 голосов
/ 16 июля 2013

Эта статья Барри Варшавы помогла мне пройти довольно далеко через этот процесс. Тем не менее мне все еще приходилось много искать на стороне, и я читал большую часть Руководства по сборке Ubuntu некоторое время назад.

Хороший setup.py - это действительно хороший совет. Я нашел эти два руководства довольно хорошими:

5 голосов
/ 27 сентября 2014

Правильный способ создания пакета deb - это использование dpkg-buildpackage, но иногда это немного сложно.Вместо этого вы можете использовать dpkg -b <folder>, и он создаст ваш пакет Debian.

Это основные принципы создания пакета Debian с dpkg -b <folder> с любым двоичным файлом или с любым видом сценария, который запускается автоматически без необходимости ручной компиляции.(Python, Bash, Pearl, Ruby):

  1. Создайте файлы и папки, чтобы воссоздать следующую структуру:
    ProgramName-Version/
    ProgramName-Version/DEBIAN
    ProgramName-Version/DEBIAN/control
    ProgramName-Version/usr/
    ProgramName-Version/usr/bin/
    ProgramName-Version/usr/bin/your_script

Сценарии, размещенные на /usr/bin/ вызываются напрямую из терминала, обратите внимание, что я не добавил расширение в скрипт.Также вы можете заметить, что структура пакета deb будет структурой программы после ее установки.Таким образом, если вы следуете этой логике, если ваша программа имеет один файл, вы можете непосредственно поместить его в ProgramName-Version/usr/bin/your_script, но если у вас есть несколько файлов, вы должны поместить их в ProgramName-Version/usr/share/ProgramName/all your files и поместить только один файл в /usr/bin/, который будетвызывайте свои скрипты от /usr/share/ProgramName/

Изменить все права доступа к папке на root:

chown root:root -R /path/to/ProgramName-Version

Изменить разрешения скрипта:

chmod 0755 /path/to/the/script

Наконец, вы можете запустить: dpkg -b /path/to/the/ProgramName-Version и ваш пакет deb будет создан!(Вы также можете добавить сценарии post / pre inst и все, что вам нужно, он работает как обычный пакет Debian)


Вот пример файла control.Вам нужно только скопировать и вставить его в пустой файл с именем «control» и поместить в папку DEBIAN

Package: ProgramName
Version: VERSION
Architecture: all
Maintainer: YOUR NAME <EMAIL>
Depends: python2.7, etc , etc,
Installed-Size: in_kb
Homepage: http://foo.com
Description: Here you can put a one line description. This is the short Description.
 Here you put the long description, indented by 1 space.
3 голосов
/ 16 января 2018

Существует несколько библиотек, которые абстрагируют все необходимые шаги и позволяют вам преобразовать ваш пакет python в пакет debian с помощью одной команды.

Предполагая, что в вашем пакете python уже есть setup.py, вкаталог, в котором находится setup.py, вы можете использовать:

  • stdeb (уже упоминалось в этом ответе , установить с помощью pip install stdeb).Чтобы создать пакет debian, запустите:

    python setup.py --command-packages=stdeb.command bdist_deb
    

    Выходной файл .deb будет расположен в каталоге bdist_deb.

  • fpm (установить с gem install --no-ri --no-rdoc fpm).Чтобы создать пакет debian, запустите:

    fpm -s python -t deb setup.py
    
  • py2deb (установить с pip install py2deb).Чтобы создать пакет debian, запустите:

    py2deb -r . .
    

Каждая из этих библиотек имеет свои собственные предостережения, поэтому вы можете попробовать то, что подходит вам лучше всего.

...