Faire un .deb
à partir d'un seul script de Python 3 (mise à jour 2021)
Cette réponse semblera (et est) longue par rapport aux autres/ Mais, contrairement à la réponse acceptée, elle fonctionnera pour Python 3, et en 2021. De plus, elle ne produit pas beaucoup d'avertissements, parce qu'elle inclut toutes les exigences, comme un fichier man
page.
Voici comment faire un paquet Debian (oui, cela fonctionnera sur Ubuntu) à partir d'un seul script de Python 3. D'abord, faisons le script. Il s'agira d'un simple programme "hello-world". Nommez ce fichier hello-world
. Mettez-le dans un dossier nommé hello-world-1.0.0
. Mettez le hello-world-1.0.0
à l'intérieur d'un deuxième dossier appelé work
. La structure du répertoire ici est un peu... étrange, cependant. debuild
(l'outil que nous utilisons pour construire le paquet) placera le fichier .deb
un répertoire plus haut que celui où nous l'avons construit, donc la structure du répertoire ressemblera à ceci :
A partir de maintenant, sauf mention contraire, je supposerai que vous êtes dans le work/hello-world-1.0.0
répertoire.
work/
hello-world-1.0.0/
hello-world
Notez que j'ai utilisé un trait d'union dans le nom du fichier, et non un trait de soulignement, car Debian ne veut pas de trait de soulignement dans les noms de paquets. J'ai également omis l'extension du fichier, ce qui est bien car j'ai ajouté un shebang en haut de mon script.
Voici le script Python que je vais utiliser comme exemple. Comme mentionné ci-dessus, il est nommé hello-world
(sans extension de fichier).
#!/usr/bin/env python3
def hello_world():
print("Hello world!")
if __name__ == "__main__":
hello_world()
Voir cette question de Stack Overflow pour quoi if __name__ = "__main__:"
moyens. Le tout est inclus selon cette question .
Tout d'abord, assurez-vous que le code fonctionne en l'exécutant :
$ chmod +x ./hello-world
$ ./hello-world
Hello world!
Pour construire le .deb
vous avez besoin du fichier git
, devscripts
, build-essential
, lintian
y pandoc
paquets installés. Je suis conscient que certains de ces paquets sont préinstallés, mais je voulais aussi que ce guide fonctionne sous Debian, donc je les ai quand même inclus ici. Vous pouvez les installer avec ces commandes.
sudo apt-get update
sudo apt-get install git devscripts build-essential lintian pandoc
A l'intérieur de la hello-world-1.0.0
créez un dossier appelé debian
. À l'intérieur de celui-ci, créez un dossier nommé source
. Aussi, directement à l'intérieur de la debian
créez les fichiers suivants changelog
, compat
, control
, copyright
, install
y rules
. L'intérieur de la debian/source
dans le dossier, créez un fichier nommé format
.
Votre arborescence de répertoires devrait maintenant ressembler à ceci
work/
hello-world-1.0.0/
debian/
source/
format
changelog
compat
control
copyright
install
rules
hello-world
Maintenant, pour le contenu de ces fichiers. Je vais supposer que vous êtes directement dans le hello-world-1.0.0
dossier.
debian/source/format
Vous pouvez en général ignorer ce point, mais si vous vous posez la question, il est expliqué dans §5.22 dans la documentation Debian.
3.0 (native)
debian/changelog
Ce fichier contient le journal des modifications de la version hello-world
programme.
hello-world (1.0.0) unstable; urgency=medium
* Initial release:
-- John Doe <johndoe@example.com> Sun, 28 Nov 2021 10:18:51 -0800
debian/compat
Cela permet de définir le debhelper
niveau de compatibilité. Voir §5.2 dans la documentation Debian
10
debian/control
Cela définit diverses valeurs que des outils comme apt
pour gérer le paquet. Voir §4.1 dans la documentation Debian
Source: hello-world
Section: python
Maintainer: John Doe <johndoe@example.com>
Build-Depends: debhelper (>= 7),
python3 (>= 3.5)
Standards-Version: 4.5.1
Priority: optional
Package: hello-world
Architecture: all
Section: python
Depends: python-appindicator, 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
Ce fichier contient des informations sur le copyright et la licence du code source. Ici, je suppose que le code sera sous la licence MIT. Changez ceci si nécessaire. Voir §4.2 dans la documentation Debian
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Files: *
Copyright: 2021 John Doe <johndoe@example.com>
License: MIT-License
Files: debian/*
Copyright: 2021 John Doe <johndoe@example.com>
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
Ce fichier contrôle quels fichiers sont installés à quel endroit pour votre paquet. Voir §5.11 dans la documentation Debian
hello-world usr/bin/
hello-world.1 usr/share/man/man1/
debian/rules
C'est ainsi que Debian construit le paquet. Voir §4.4 dans la documentation Debian. Un mot d'avertissement : comme pour les autres Makefiles, utilisez les tabulations pour indenter. Les espaces ne fonctionnent pas.
#!/usr/bin/make -f
%:
dh $@
Notre belle hello-world
devrait avoir un man
page. Mais le format des pages de manuel est complexe et difficile à lire. Donc, à la place, nous allons écrire la page de manuel en Markdown, et laisser pandoc
le convertir pour nous.
Dans le répertoire principal (c'est-à-dire directement à l'intérieur de la section hello-world-1.0.0
), créez un fichier appelé hello-world.1.md
. Mettez ce qui suit dans le fichier :
% 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** [*optios*]
# 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.
La construction de ce paquet nécessite quelques étapes. Donc, faisons un script (Bash) à la place. Créez un fichier nommé build
. Rendez-le exécutable chmod +x ./build
. Mettez ce qui suit dans le fichier :
#!/usr/bin/env bash
pandoc null-cat.1.md -s -t man > null-cat.1
debuild --no-tgz-check -uc -us
Cela va générer la page de manuel, et la stocker dans le fichier nommé hello-world.1
. Il construira ensuite le paquet. Le site -uc -us
signifie que nous ne le signerons pas avec une clé GPG, car cela est complexe. Exécutez le script ( ./build
), et si tout va bien, il y aura le paquet généré dans le répertoire parent work
.