Стандартный способ создания пакетов Debian для распространения программ на Python?

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

Пока это то, что я думаю, я понял.

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

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

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

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

4 ответа

Решение

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

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

Правильный способ создания пакета 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/

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

    chown root:root -R /path/to/ProgramName-Version
    
  2. Измените разрешения скрипта:

    chmod 0755 /path/to/the/script
    
  3. Наконец, вы можете запустить: 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.

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

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

Существует несколько библиотек, которые абстрагируют все необходимые шаги и позволяют вам преобразовать ваш пакет 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 . .
    

Each of these libraries has its own caveats, so you might want to try what works best for you.

У меня этот метод работает.

  1. установить stdeb. (pip install stdeb)

  2. создать setup.py. Я использую PyCharm. Это (https://www.jetbrains.com/help/pycharm/creating-and-running-setup-py.html) запишет эти команды в каталог вашего проекта.

  3. sudo apt-get install python3-stdeb fakeroot python-all
  4. python3 setup.py sdist
  5. sudo python3 setup.py --command-packages=stdeb.command bdist_deb
  6. ваш файл deb находится в каталоге deb_dist в вашем проекте
Другие вопросы по тегам