web-dev-qa-db-fra.com

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 depuis "il y a plus d'une façon d'habiller un chat" , et tous les tutoriels/manuels qui couvrent un peu de le processus semble faire certaines hypothèses qui sont différentes des autres tutoriels, je n'ai toujours pas réussi à le comprendre.

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

  1. Mon objectif final devrait être de créer un package .deb "binaire". Un tel package sera indépendant de la plate-forme (32/64 bits) car tous les programmes Python le sont).
  2. Pour créer un package "binaire", je dois d'abord créer un package source.
  3. Pour créer le paquet source, je peux utiliser CDBS ou debhelper. Debhelper est le moyen recommandé pour les débutants.
  4. Le noyau de la création d'un package source est de remplir le répertoire DEBIAN dans le répertoire source avec un certain nombre de fichiers clarifiant où les fichiers doivent être copiés, à quel régime de droits d'auteur et de licence ils sont soumis, quelles dépendances ils ont, etc. ...
  5. L'étape # 4 peut être largement automatisée le dh_makecommande si la source Python est également livrée avec un _ setup.py script.

Maintenant mes questions:

  1. Ma compréhension du processus est-elle correcte? Y a-t-il quelque chose qui me manque ou quelque chose que je me suis trompé?
  2. L'étape # 5 est vraiment la plus déroutante pour moi: spécifiquement les deux points qui me restent le plus obscurs sont:
    • Comment écrire un setup.py script qui installe un programme autonome? EDIT: By programme autonome Je veux dire un programme destiné à être utilisé par un utilisateur de bureau (par opposition à un module que je comprends comme une collection de fonctionnalités à utiliser par d'autres logiciels après importés). Dans mon cas spécifique, j'aurais réellement besoin de deux de tels "programmes": le logiciel principal et un utilitaire séparé (en fait, un deuxième "programme" qui devrait être dans le même paquet avec le un autre).
    • Quelles sont les spécificités d'un tel script pour les packages DEB? La documentation officielle ne semble traiter que de RPM et de Windows ...

BTW: Ce sont les meilleures sources d'informations que j'ai pu trouver jusqu'à présent. Si vous avez quelque chose de mieux que cela, partagez-le! :)

69
mac

Il semble que stdeb fera ce que vous voulez.

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

24
Ross Patterson

Cet article de Barry Varsovie m'a aidé à aller assez loin dans le processus. Cependant, je devais encore faire beaucoup de recherches sur le côté, et j'ai lu la plupart des Guide d'emballage Ubunt quelque temps dans le passé.

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

9
metakermit

La bonne façon de construire un paquet deb est d'utiliser dpkg-buildpackage mais parfois c'est un peu compliqué. À 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 n'importe quel binaire ou avec n'importe quel type de script qui s'exécute automatiquement sans avoir besoin d'une compilation manuelle (Python, Bash, Pearl, Ruby):

  1. Créez les fichiers et 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 dans /usr/bin/ sont directement appelés depuis le terminal, notez que je n'ai pas ajouté d'extension au script. Vous pouvez également remarquer que la structure du paquet deb sera la structure du programme une fois installé. Donc, si vous suivez cette logique si votre programme a un seul fichier, vous pouvez le placer directement sous ProgramName-Version/usr/bin/your_script, mais si vous avez plusieurs fichiers, vous devez les placer sous ProgramName-Version/usr/share/ProgramName/all your files et placez un seul fichier sous /usr/bin/ qui appellera vos scripts depuis /usr/share/ProgramName/

  1. Modifiez toutes les autorisations de dossier en root:

    chown root:root -R /path/to/ProgramName-Version
    
  2. Modifiez les autorisations du script:

    chmod 0755 /path/to/the/script
    
  3. Enfin, vous pouvez exécuter: 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 du fichier control. Il vous suffit de le copier-coller dans un fichier vide appelé "control" 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://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.

Il existe plusieurs bibliothèques qui résument toutes les étapes nécessaires et vous permettent de transformer votre paquet python en paquet Debian avec une seule commande).

En supposant que votre package python possède déjà le setup.py, dans le répertoire où setup.py est localisé, vous pouvez utiliser:

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

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

    Production .deb le fichier sera situé dans bdist_deb répertoire.

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

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

    py2deb -r . .
    

Chacune de ces bibliothèques a ses propres mises en garde, vous pouvez donc essayer ce qui vous convient le mieux.

3
Jakub Kukul