49 votes

Comment faire un empaquetage Debian d'un paquet Python ?

Je dois écrire, ou trouver, un script pour créer un paquet Debian, en utilisant le package python-support à partir d'un paquetage Python. Le paquetage Python sera du pur Python sans extensions C.

Le paquetage Python pour les tests sera juste un répertoire avec un dossier vide __init__.py et un seul module Python, package_test.py .

L'emballage script doit utiliser python-support pour fournir un bytecode correct pour d'éventuelles installations multiples de Python sur une plate-forme cible, c'est-à-dire v2.5 et v2.6 sur Ubuntu 9.04 (Jaunty Jackalope).

La plupart des conseils que je trouve en cherchant sur Google ne sont que des exemples de piratages méchants qui n'utilisent même pas la technologie de l'Internet. python-support o python-central .

J'ai passé des heures à faire des recherches sur ce sujet, et le mieux que j'ai pu trouver est de pirater le script d'un projet open source existant, mais je ne sais pas quels bits sont nécessaires pour ce que je fais.

Est-ce que quelqu'un ici a fait un paquet Debian à partir d'un paquet Python d'une manière raisonnablement peu compliquée ?

Je commence à penser qu'il me faudra plus d'une semaine pour passer d'une absence de connaissances sur l'empaquetage de Debian à python-support pour obtenir un script fonctionnel. Combien de temps cela a-t-il pris aux autres ?

33voto

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 appelés directement 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 qu'il sera installé. Donc si vous suivez cette logique, si votre programme a un seul fichier, vous pouvez directement le placer sous 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 de post/pré installation 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 de l'utilisateur. DEBIAN dossier.

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 .

1 votes

Merci, pour le guide. Comment puis-je ajouter des scripts pré/post inst ?

4 votes

@Gleb les scripts pre/post doivent être placés à l'intérieur de la section DEBIAN dossier. Ajoutez simplement votre script avec le bon nom preinst , postinst , prerm etc. . Je suis heureux que cela vous ait aidé :)

0 votes

Il s'avère que l'article mentionné (complet) a disparu (

22voto

Nikratio Points 697

Je pense que vous voulez http://pypi.python.org/pypi/stdeb :

stdeb produit les paquets sources de Debian à partir de paquets Python via une nouvelle distutils, sdist_dsc. Des valeurs par défaut automatiques sont fournies pour le paquet Debian, mais de nombreux aspects du paquet résultant peuvent être personnalisés (voir la section sur la personnalisation ci-dessous). Une commande supplémentaire supplémentaire, bdist_deb, crée un paquet Debian un paquet binaire Debian, un fichier .deb.

22voto

Martin v. Löwis Points 61768

Je prendrais les sources d'un paquet Debian existant, et remplacerais le paquet actuel par votre paquet. Pour trouver une liste des paquets qui dépendent de python-support, faites

 apt-cache rdepends python-support

Choisissez un paquet qui est Architecture: all afin qu'il s'agisse d'un paquetage purement Python. En parcourant cette liste, j'ai trouvé que, par exemple, python-flup pourrait être un bon point de départ. Pour obtenir les sources d'un tel paquetage, faites

apt-get source <package>

Pour le construire, faites

cd <packagesrc>
dpkg-buildpackage -rfakeroot

Lorsque vous l'éditez, attendez-vous à n'avoir besoin que des fichiers du répertoire debian remplacez toutes les références à flup par votre propre nom de paquet.

Une fois que vous aurez commencé, cela devrait vous prendre une journée pour le faire.

5 votes

Note : depuis que cette réponse a été écrite, python-support a été déprécié au profit de dh_python2 . Transition vers dh_python2 est brièvement décrit sur le wiki de Debian.

1 votes

@drdaeman @Martin : dh_python2 est maintenant expédié directement dans le fichier python paquet, donc cette recette ne fonctionne plus aussi bien. Comment la mettriez-vous à jour ?

18voto

Jasper Poppe Points 366

La plupart des réponses postées ici sont dépassées, mais heureusement, un excellent article du wiki Debian a été publié récemment, qui explique les meilleures pratiques actuelles et décrit comment construire des paquets Debian pour les modules et les applications Python.

0 votes

Le lien est maintenant redirigé vers " Python/BibliothèqueStyleGuide " et le lien est probablement (effectivement) rompu. Ou alternativement, quelle partie est pertinente ? Pouvez-vous la réparer ?

7voto

derobert Points 26258

Tout d'abord, il y a de nombreux paquets Python déjà présents dans Debian ; vous pouvez télécharger les sources (y compris tous les paquets) pour chacun d'entre eux en utilisant apt-get source ou en visitant http://packages.debian.org .

Les ressources suivantes peuvent vous être utiles :

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