Как создать deb-пакет для одного скрипта Python?

Как создать deb-пакет для одного скрипта Python?

У меня есть один скрипт на Python, который я хочу распространить как deb-пакет. Этоиндикаторкоторый показывает локальную дату в панели Unity. Я следовалсоздать пакет .deb из скриптов или двоичных файловно мне не удалось создать deb-пакет, так как он не работает.

Может кто-нибудь дать мне пошаговую инструкцию, что мне делать? Насколько я знаю, этот скрипт зависит от python-appindicator.

ПРИМЕЧАНИЕ:
Мне не нужны ссылки на инструкции по упаковке Debian/Ubuntu. Я видел большинство из них. Я не нахожу их дружелюбными для новичков.

решение1

Ниже приведен базовый пример того, как может выглядеть исходный пакет для скрипта python. Хотя большинство руководств по упаковке немного сложны, они действительно могут помочь, если вы столкнетесь с проблемой. Тем не менее, я сначала изучил основы упаковки Debian, просто просматривая пакеты Debian. apt-get sourceчто-то похожее и учитесь на примере.

Вот базовая структура исходного пакета:

my-script/
    -- myScript
    -- debian/
        -- changelog
        -- copyright
        -- compat
        -- rules
        -- control
        -- install

Запустите dch --createкаталог, чтобы создать правильно отформатированную debian/changelogзапись.

Debian/авторское праводолжно выглядеть так:

Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: myScript
Upstream-Contact: Name, <email@address>

Files: *
Copyright: 2011, Name, <email@address>
License: (GPL-2+ | LGPL-2 | GPL-3 | whatever)
 Full text of licence.
 .
 Unless there is a it can be found in /usr/share/common-licenses

Debian/совместимыйможет быть просто:7

Debian/правила:

#!/usr/bin/make -f

%:
    dh $@ --with python2

Обратите внимание, что перед ним должно быть «tab» dh $@ --with python2, а не пробелы.

Примечание: Python2 устарел. Для одного файла python просто dh $@(без --with python) работает.

дебиан/контроль:

Source: my-script
Section: python
Priority: optional
Maintainer: Name, <email@address>
Build-Depends: debhelper (>= 7),
               python (>= 2.6.6-3~)
Standards-Version: 3.9.2
X-Python-Version: >= 2.6


Package: my-script
Architecture: all
Section: python
Depends: python-appindicator, ${misc:Depends}, ${python:Depends}
Description: short description
 A long description goes here.
 .
 It can contain multiple paragraphs

Debian/установить:

myScript usr/bin/

В этом файле указано, какой файл будет установлен в какую папку.

Теперь постройте его с помощьюdebuild --no-tgz-check

Это создаст функциональный deb-пакет. Lintian выдаст несколько предупреждений относительно отсутствия orig.tar.gz, но если вы не планируете создать полноценный upstream-проект, который выпускает tarball-релизы, вам, вероятно, стоит просто проигнорировать это на данный момент.

решение2

  1. создайте папку с любым именем в вашем домашнем каталоге, например: mypyscript
  2. Откройте папку и создайте две папки с именами «DEBIAN» и «usr».
  3. Откройте папку DEBIAN. Создайте там текстовый файл (без расширения) с именем 'control'.
  4. Откройте «control», введите следующее и сохраните в DEBIAN

    Package: mypyscript
    Version: 0.01
    Architecture: all
    Maintainer: your name<your mail id>
    Installed-Size: 2
    Depends: python-appindicator
    Section: extras
    Priority: optional
    Homepage: your homepage
    Description: describe
    
  5. Вернитесь в папку mypyscript. Откройте 'usr'. Создайте папку 'bin'. Откройте 'bin' и вставьте туда свой файл pythonscript.

  6. Вы также можете сделать запись в меню. Но это не обязательно.
  7. Вернитесь в домашнюю папку, где находится папка «mypyscript», или закройте файловый менеджер.
  8. Откройте терминал. Убедитесь, что терминал находится в домашней папке. Введите dpkg -b mypyscript.Затем нажмите Enter. Через несколько секунд ваш deb-пакет будет готов

примечание:Пожалуйста, заполните файл «control» правильно. Не используйте апострофы. Он нужен только для указания имен.

решение3

Создание .debпакета из одного скрипта Python 3 (обновлено в 2021 г.)

Этот ответ покажется (и является) длинным по сравнению с другими. Но, в отличие от принятого ответа, он будет работать для Python 3 и в 2021 году. Кроме того, он не выдает много предупреждений, поскольку включает в себя все требования, например страницу man.

Вот как создать пакет Debian (да, он будет работать в Ubuntu) из одного скрипта Python 3. Сначала давайте создадим скрипт. Это будет простая программа hello-world. Назовите этот файл hello-world. Поместите его в папку с именем hello-world-1.0.0. Поместите hello-world-1.0.0папку во вторую папку с именем work. Структура каталогов здесь немного... странная, хотя. debuild(инструмент, который мы используем для сборки пакета) поместит .debфайл на один каталог выше того, где мы его собираем, поэтому структура каталогов будет выглядеть так:

С этого момента, если не указано иное, я буду считать, что вы находитесь в справочнике work/hello-world-1.0.0.

work/
├─ hello-world-1.0.0/
│  ├─ hello-world

Обратите внимание, что я использовал дефис в имени файла, а не подчеркивание, поскольку Debian не хочет подчеркиваний в именах пакетов. Я также опустил расширение файла, что нормально, поскольку я добавил shebang в верхней части моего скрипта.

Вот скрипт Python, который я буду использовать в качестве примера. Как уже упоминалось выше, он называется hello-world(без расширения файла).

#!/usr/bin/env python3
def hello_world():
    print("Hello world!")

if __name__ == "__main__":
    hello_world()

Видетьэтот вопрос Stack Overflowдля чего if __name__ = "__main__:"средства. Шебанг включен в соответствии сэтот вопрос.

Сначала просто убедитесь, что код работает, запустив его:

$ chmod +x ./hello-world
$ ./hello-world
Hello world!

Для сборки .debфайла вам необходимо установить пакеты git, devscripts, build-essential, lintianи pandoc. Я знаю, что некоторые из этих пакетов предустановлены, но я также хотел, чтобы это руководство работало на Debian, поэтому я включил их сюда в любом случае. Вы можете установить их с помощью этих команд.

sudo apt-get update
sudo apt-get install git devscripts build-essential lintian pandoc

Внутри hello-world-1.0.0папки создайте папку с именем debian. Внутри нее создайте папку с именем source. Также непосредственно внутри debianпапки создайте следующие файлы changelog, compat, control, copyright, install, и rules. Внутри debian/sourceпапки создайте файл с именем format.

Теперь ваше дерево каталогов должно выглядеть так

work/
├─ hello-world-1.0.0/
│  ├─ debian/
│  │  ├─ source/
│  │  │  ├─ format
│  │  ├─ changelog
│  │  ├─ compat
│  │  ├─ control
│  │  ├─ copyright
│  │  ├─ install
│  │  ├─ rules
│  ├─ hello-world

Теперь, что касается содержимого этих файлов. Я предполагаю, что вы находитесь непосредственно в hello-world-1.0.0папке.

debian/source/format

Вы можете в основном игнорировать это, но если вам интересно, это объясняется в§5.22в документации Debian.

3.0 (native)

debian/changelog

Этот файл содержит журнал изменений программы hello-world.

hello-world (1.0.0) unstable; urgency=medium

    * Initial release:
 -- John Doe <[email protected]>  Sun, 28 Nov 2021 10:18:51 -0800

debian/compat

Это устанавливает debhelperуровень совместимости. Смотреть§5.2в документации Debian

10

debian/control

Это устанавливает различные значения, которые инструменты, такие как, aptиспользуют для управления пакетом. Смотреть§4.1в документации Debian

Source: hello-world
Section: python
Maintainer: John Doe <[email protected]>
Build-Depends: debhelper (>= 7),
               python3 (>= 3.5)
Standards-Version: 4.5.1
Priority: optional

Package: hello-world
Architecture: all
Section: python
Depends: python3 (>=3.5), ${misc:Depends}
Description: A simple hello-world program to demenstrate how to package a
 Python 3 script as a deb file

debian/copyright

Этот файл содержит информацию об авторских правах и лицензии исходного кода. Здесь я предполагаю, что код будет под лицензией MIT. Измените это по мере необходимости. Смотреть§4.2в документации Debian

Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/

Files: *
Copyright: 2021 John Doe <[email protected]>
License: MIT-License

Files: debian/*
Copyright: 2021 John Doe <[email protected]>
License: MIT-License

License: MIT-License
 MIT License
 .
 Copyright (c) 2021 John Doe
 .
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
 in the Software without restriction, including without limitation the rights
 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 copies of the Software, and to permit persons to whom the Software is
 furnished to do so, subject to the following conditions:
 .
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 .
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.

debian/install

Этот файл контролирует, какие файлы будут установлены и где для вашего пакета. Смотреть§5.11в документации Debian

hello-world usr/bin/
hello-world.1 usr/share/man/man1/

debian/rules

Вот как Debian собирает пакет. Смотреть§4.4в документации Debian. Предупреждение: как и в других Makefile, используйте табуляции для отступа. Пробелы не подойдут.

#!/usr/bin/make -f

%:
    dh $@

Наш замечательный hello-worldпакет должен иметь manстраницу. Но формат страниц man сложен и труден для чтения. Поэтому вместо этого мы напишем страницу man в Markdown и позволим pandocконвертировать ее для нас.

В главном каталоге (т.е. прямо внутри hello-world-1.0.0папки) создайте файл с именем hello-world.1.md. Вставьте в файл следующее:

% hello-world(1) hello-world 1.0.0
% John Doe
% November 2021

# NAME
hello-world - Prints a file until a null-character is reached

# SYNOPSIS
**hello-world** [*options*]

# DESCRIPTION
**hello-world** prints a file character-by-character until a null character is reached. The null character will not be printed

# OPTIONS

# EXAMPLES
**hello-world**
: Prints the text "Hello world!", followed by a newline, to the screen.

Сборка этого и пакета требует нескольких шагов. Итак, давайте создадим (Bash) скрипт вместо этого. Создайте файл с именем build. Сделайте его исполняемым chmod +x ./build. Поместите следующее в файл:

#!/usr/bin/env bash
pandoc hello-world.1.md -s -t man > hello-world.1
debuild --no-tgz-check -uc -us

Это сгенерирует страницу руководства и сохранит ее в файле с именем hello-world.1. Затем он построит пакет. Это -uc -us означает, что мы не будем подписывать его ключом GPG, так как это сложно. Запустите скрипт ( ./build), и если все пойдет хорошо, в родительском каталоге будет сгенерированный пакет work.

решение4

Я бы проверил быстро, отлично подходит для создания быстрых приложений и генерации deb-файлов, погуглите или вы можете найти руководства здесьhttp://developer.ubuntu.com/

Связанный контент