89 votes

Comment créer un paquet deb pour un seul script Python ?

J'ai un seul script Python que je veux distribuer sous forme de paquet deb. Il s'agit d'un indicateur qui affiche la date locale dans le panneau Unity. J'ai suivi créer un paquet .deb à partir de scripts ou de binaires mais je n'ai pas pu créer un paquet deb car il échoue.

Quelqu'un peut-il me donner une instruction étape par étape sur ce que je dois faire ? Autant que je sache, ce script dépend de python-appindicator .

NOTE :
Je ne veux pas de liens vers les instructions de conditionnement de Debian/Ubuntu. J'en ai vu la plupart. Je ne les trouve pas conviviales pour les débutants.

94voto

Ghirai Points 11

Ce qui suit est un exemple de base de ce à quoi pourrait ressembler un paquetage source pour un script Python. Bien que la plupart des tutoriels de packaging soient un peu complexes, ils peuvent vraiment vous aider si vous rencontrez un problème. Cela dit, j'ai d'abord appris les bases de l'empaquetage Debian en regardant simplement les paquets Debian. apt-get source quelque chose de similaire et apprendre par l'exemple.

Voici la disposition de base de votre paquet source :

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

Exécuter dch --create dans le répertoire pour créer une debian/changelog l'entrée.

debian/copyright devrait ressembler :

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/compat peut juste être : 7

debian/rules :

#!/usr/bin/make -f

%:
    dh $@ --with python2

Notez qu'il doit y avoir "tab" avant dh $@ --with python2 et non des espaces.

Note : Python2 est déprécié. Pour un seul fichier Python, il suffit de dh $@ (sans --with python ) fonctionne.

debian/control :

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/install :

myScript usr/bin/

Ce fichier indique quel fichier sera installé dans quel dossier.

Maintenant, construisez-le avec debuild --no-tgz-check

Cela créera un paquet deb fonctionnel. Lintian va envoyer quelques avertissements concernant l'absence d'un orig.tar.gz, mais à moins que vous ne prévoyiez de créer un projet amont approprié qui fasse des versions tarball, vous voudrez probablement ignorer cela pour le moment.

22voto

geoffrobinson Points 123
  1. créez un dossier avec n'importe quel nom sur votre ordinateur personnel, par exemple : mypyscript

  2. Ouvrez le dossier et créez deux dossiers avec les noms 'DEBIAN' et 'usr'.

  3. Ouvrez le dossier DEBIAN. Créez-y un fichier texte (sans extension) avec le nom 'control'.

  4. Ouvrez 'control' et tapez ce qui suit et sauvegardez-le sur 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. Retournez dans le dossier nommé mypyscript. Ouvrez 'usr'. Créez un dossier nommé 'bin'. Ouvrez 'bin' et collez-y votre fichier pythonscript.

  6. Vous pouvez également faire une entrée de menu. Mais ce n'est pas indispensable.

  7. Retournez dans le dossier d'accueil où se trouve le dossier 'mypyscript' ou fermez le navigateur de fichiers.

  8. Borne ouverte. Assurez-vous que le terminal se trouve dans le dossier d'accueil. tapez dpkg -b mypyscript Puis appuyez sur la touche Entrée. En quelques secondes, votre paquet deb est prêt

note : veuillez remplir correctement le fichier 'contrôle'. N'utilisez pas d'apostrophes. C'est seulement pour indiquer les noms.

12voto

thing2k Points 413

Vous pouvez essayer avec Débreate un outil GUI pour la création de paquets.

6voto

cocomac Points 2049

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 .

3voto

Oly Points 313

Je vous conseille d'aller voir rapidement, c'est génial pour créer des applications rapides et générer des debs. Vous pouvez aussi trouver des tutoriels ici. http://developer.ubuntu.com/

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X