97 votes

Existe-t-il un moyen standard de créer des paquets Debian pour distribuer des programmes Python ?

Il y a une tonne d'informations sur la façon de le faire, mais puisque "il y a plus d'une façon d'écorcher un chat" Je n'ai pas réussi à comprendre le processus, et tous les tutoriels/manuels qui couvrent une partie du processus semblent faire certaines hypothèses qui sont différentes de celles des autres tutoriels.

Jusqu'à présent, voici ce que je pense avoir compris.

  1. Mon objectif final devrait être de créer un paquet .deb "binaire". Ce paquet sera indépendant de la plate-forme (32/64 bits) comme tous les programmes Python.
  2. Pour créer un paquet "binaire", je dois d'abord créer un paquet source.
  3. Pour créer le paquet source, je peux utiliser soit CDBS ou debhelper . Debhelper est le moyen recommandé pour les débutants.
  4. L'essentiel de la création d'un paquet source consiste à remplir le champ DEBIAN dans le répertoire source avec un certain nombre de fichiers précisant où les fichiers doivent être copiés, à quel droit d'auteur et à quel régime de licence ils sont soumis, quelles dépendances ils ont, etc...
  5. L'étape 4 peut être largement automatisée. dh_make commande si Le code source de Python est également fourni avec un programme "distutils". setup.py script.

Maintenant mes questions :

  1. Ma compréhension du processus est-elle correcte ? Y a-t-il quelque chose qui m'échappe ou que j'ai mal compris ?
  2. L'étape 5 est vraiment la plus confuse pour moi : plus précisément les deux points qui restent les plus obscurs pour moi sont :
    • Comment rédiger un setup.py script qui installe un programme autonome ? EDIT : Par programme autonome J'entends par là un programme destiné à être utilisé par un utilisateur d'ordinateur de bureau (par opposition à un utilisateur d'ordinateur de bureau). module que je comprends comme une collection de fonctionnalités à utiliser par d'autres logiciels après avoir été importées). Dans mon cas spécifique, j'aurais en fait besoin de deux Ces "programmes" : le logiciel principal et un utilitaire séparé (en fait un deuxième "programme" qui devrait se trouver dans le même paquet que l'autre).
    • Quelles sont les spécificités d'un tel script pour les paquets DEB ? La documentation officielle ne semble traiter que de RPM et de Windows...

BTW : Ce sont les meilleures sources d'information que j'ai pu trouver moi-même jusqu'à présent. Si vous avez quelque chose de mieux que ça, merci de le partager ! :)

2 votes

Avant de pouvoir préparer un programme python pour un conditionnement binaire, vous devez le préparer pour une distribution générale. C'est la setup.py bit. Ceci est comparable à la autotools étape que de nombreux projets GNU C/C++ utilisent, mais qui est spécifique à python. C'est plus facile qu'il n'y paraît, lisez docs.python.org/distutils/index.html

1 votes

@TokenMacGuy - Merci, j'ai déjà compris l'idée générale (ma formulation est peut-être incorrecte, mais c'est la partie 5 du processus que je décris). Ce qui est déroutant pour moi, c'est que dans la documentation officielle je n'ai pas pu trouver un mode d'emploi explicite sur la façon de distribuer les programmes autonomes plutôt que des modules. Peut-être s'agit-il simplement d'un problème de terminologie et que ce que j'appelle des "programmes autonomes" sont un type spécifique de modules ?

1 votes

@mac : Vous pouvez installer des scripts, c'est-à-dire des fichiers exécutables pour lancer votre programme. Voir docs.python.org/distutils/setupscript.html#installation-scripts

37voto

Ross Patterson Points 4331

On dirait que stdeb fera ce que vous voulez.

De plus, pour l'installation de scripts, je recommande fortement distribuer les scripts de la console support du point d'entrée.

1 votes

Très très très utile, merci ! (+1) Je vais tester cette route dans les prochains jours et faire un rapport.

1 votes

C'était en effet la voie à suivre (du moins pour moi). Merci encore, réponse acceptée.

3 votes

Le lien "distribute's console_scripts" ne fonctionne pas.

13voto

rsm Points 112

La bonne façon de construire un paquet deb est d'utiliser dpkg-buildpackage mais parfois c'est un peu compliqué. A la place, vous pouvez utiliser dpkg -b <folder> et il créera votre paquet Debian.

Ce sont les bases pour créer un paquet Debian avec dpkg -b <folder> avec tout binaire ou avec tout type de script qui s'exécute automatiquement sans nécessiter de compilation manuelle (Python, Bash, Perl et Ruby) :

  1. Créez les fichiers et les dossiers afin de recréer la structure suivante :

     ProgramName-Version/
     ProgramName-Version/DEBIAN
     ProgramName-Version/DEBIAN/control
     ProgramName-Version/usr/
     ProgramName-Version/usr/bin/
     ProgramName-Version/usr/bin/your_script

    Les scripts placés à /usr/bin/ sont directement appelés depuis le terminal, notez que je n'ai pas ajouté d'extension au script. Aussi vous pouvez remarquer que la structure du paquet deb sera la structure du programme une fois qu'il sera installé. Donc, si vous suivez cette logique, si votre programme n'a qu'un seul fichier, vous pouvez le placer directement dans le dossier ProgramName-Version/usr/bin/your_script mais si vous avez plusieurs fichiers, vous devriez les placer sous ProgramName-Version/usr/share/ProgramName/all your files et ne placer qu'un seul fichier sous /usr/bin/ qui appellera vos scripts à partir de /usr/share/ProgramName/

  2. Changez la permission de tous les dossiers en Root :

     chown root:root -R /path/to/ProgramName-Version
  3. Changez les permissions du script :

     chmod 0755 /path/to/the/script
  4. Enfin, vous pouvez courir : dpkg -b /path/to/the/ProgramName-Version et votre paquet deb sera créé ! (Vous pouvez également ajouter les scripts post/pre inst et tout ce que vous voulez, cela fonctionne comme un paquet Debian normal).


Voici un exemple de la control fichier. Il vous suffit de le copier-coller dans un fichier vide appelé "contrôle" et de le placer dans le dossier DEBIAN.

Package: ProgramName
Version: VERSION
Architecture: all
Maintainer: YOUR NAME <EMAIL>
Depends: python2.7, etc , etc,
Installed-Size: in_kb
Homepage: http://example.com
Description: Here you can put a one line description. This is the short Description.
 Here you put the long description, indented by one space.

L'article complet sur les paquets Debian peut être lu ici .

2 votes

Cette solution était exactement ce dont j'avais besoin après avoir rencontré un obstacle en essayant d'utiliser le système de gestion de l'information de la Commission européenne. stdeb pour construire un paquet python3 qui nécessite pyqt5. Mucho merci à Rafael. Je m'excuse également d'avoir accidentellement cliqué sur le bouton de vote négatif pour cette solution - je ne parviens pas à modifier mon vote.

0 votes

Je viens d'essayer de cliquer à nouveau sur le downvote (et aussi sur le upvote) et je reçois le message suivant : Vous avez voté pour la dernière fois sur cette réponse le 17 novembre à 21:25. Votre code est maintenant verrouillé, sauf si la réponse est modifiée. Peut-être que si vous modifiez la réponse, je pourrais changer mon vote ? Encore merci @rsm pour votre réponse. Elle m'a aidé à créer un paquet DEB pour manuskript.

0 votes

Y a-t-il un moyen de modifier le chemin d'installation avec cette approche ? Je n'ai pu trouver qu'un moyen de changer le préfixe (en utilisant override_dh_auto_install dans le fichier de règles), mais ne pas personnaliser le chemin entier

10voto

kermit666 Points 1730

Cet article de Barry Warsaw m'a aidé à aller assez loin dans le processus. J'ai quand même dû faire beaucoup de recherches en parallèle, et j'ai lu la plupart des articles de la Guide de l'emballage Ubuntu à un moment donné dans le passé.

Avoir un bon setup.py est un très bon conseil. J'ai trouvé ces deux guides très bons :

2 votes

Notez que le Guide du Hitchhiker a été remplacé par le Guide de l'utilisateur de Python Packaging .

0 votes

Oh, merci ! Bien qu'ils ne couvrent tous deux que les bases les plus élémentaires des distutils. La documentation de Distribute a un peu plus de détails et est la solution recommandée (au moment de la rédaction de ce commentaire).

1 votes

Le blog de Barry a été mis à jour et recommande le wiki.debian.org/Python/LibraryStyleGuide guide. Cela a fonctionné pour moi.

7voto

jkukul Points 1930

Il existe plusieurs bibliothèques qui font abstraction de toutes les étapes nécessaires et vous permettent de transformer votre paquet Python en paquet Debian en une seule commande.

En supposant que votre paquetage python possède déjà le fichier setup.py dans le répertoire où se trouve setup.py est situé, vous pourriez utiliser :

  • stdeb (Déjà mentionné dans ce réponse installer avec pip install stdeb ). Pour créer un paquet Debian, exécutez :

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

    Le résultat .deb sera situé dans le dossier bdist_deb répertoire.

  • fpm (à installer avec gem install --no-ri --no-rdoc fpm ). Pour créer un paquet Debian, exécutez :

    fpm -s python -t deb setup.py
  • py2deb (à installer avec pip install py2deb ). Pour créer un paquet Debian, exécutez :

    py2deb -r . .

Chacune de ces bibliothèques présente ses propres inconvénients. Il est donc préférable d'essayer ce qui fonctionne le mieux pour vous.

0voto

Tolga Sahin Points 89

Cette méthode fonctionne pour moi.

  1. installer stdeb. (pip install stdeb)

  2. créer le fichier setup.py. J'utilise PyCharm. Cela va ( https://www.jetbrains.com/help/pycharm/creating-and-running-setup-py.html ) écrivez ces commandes dans le répertoire de votre projet.

  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. votre fichier deb est dans le répertoire deb_dist qui se trouve dans votre projet

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X