GNU/Linux >> Tutoriels Linux >  >> Linux

Comment empaqueter des applications Python pour Linux

Une façon de rendre les applications Python installables sur les systèmes d'exploitation basés sur Debian (tels que Debian ou Elementary OS) consiste à utiliser l'outil dh_virtualenv. Il construit un .deb package qui encapsule un environnement virtuel Python autour d'une application et le déploie lors de l'installation.

Dans cet article, je vais vous expliquer comment l'utiliser avec l'exemple de la construction d'un package contenant l'outil HTTPie pour tester les API HTTP depuis la ligne de commande sans avoir à activer un environnement virtuel.

Packaging avec dh_virtualenv

Tout d'abord, vous devez installer les outils dont a besoin dh_virtualenv. La documentation de dh_virtualenv fournit toutes les options d'installation. Sur mon système basé sur Debian, j'ai entré :

apt-get install dh-virtualenv devscripts 

Bien que le package devscripts ne soit pas requis, il simplifiera les opérations suivantes.

Maintenant, créez un répertoire pour conserver les sources. Puisqu'il s'agit d'un emballage local non officiel de HTTPie, je l'ai appelé myhttp . Ensuite, créons des fichiers dans myhttp pour fournir des métadonnées au système de compilation Debian.

Tout d'abord, créez le debian/control fichier :

Source :myhttp
Section :python
Priorité :extra
Maintainer :Jan Doe
Build-Depends :debhelper (>=9), python3.7, dh-virtualenv (>=0.8)
Standards-Version :3.9.5

Package :myhttp
Architecture :any
Pré-dépend :dpkg (>=1.16.1), python3.7, ${misc:Pre-Depends}
Dépend :${misc:Depends}
Description :client http
 Utile pour faire des choses

Alors, sur quoi portent toutes ces informations ? Comme le dit la documentation Debian :

"Les lignes 1 à 7 sont les informations de contrôle du paquet source. Les lignes 9 à 13 sont les informations de contrôle du paquet binaire."

Voici mon avis :

  • la rubrique la valeur n'a généralement pas de sens pour notre cas, mais doit être là. Il est utile de fournir des informations au programme d'installation guidée de l'interface utilisateur, qui ne sont pas pertinentes pour ce package.
  • La priorité supplémentaire valeur est la bonne priorité pour les packages tiers comme celui-ci.
  • Il est fortement recommandé de mettre de vraies coordonnées dans le Maintainer domaine. Il ne doit pas nécessairement s'agir de votre adresse e-mail personnelle -- "Équipe d'infrastructure ", par exemple, si le package est géré par l'équipe et que vous souhaitez que les problèmes soient être envoyé à l'alias de messagerie de l'équipe.
  • Le dépend de la construction indique que vous avez besoin de debhelper, python et dh-virtualenv pour construire le paquet :le processus de construction du paquet s'assurera que ces dépendances sont installées au moment de la construction du paquet.
  • La version standard est principalement destiné à la consommation humaine. Il indique quel guide vous suivez. Ce guide est basé sur la documentation officielle de dh-virtualenv, qui est basée sur le guide 3.9.5 de Debian. C'est presque toujours le meilleur choix de nommer le paquet binaire et le paquet source de la même manière.
  • L'architecture le champ doit être Tout car un environnement virtuel peut inclure des fichiers spécifiques à l'architecture :sinon, le champ serait mieux choisi comme tous .
  • Conservez les pré-dépends list as-is:pre-depends est une forme assez stricte de dépendances, et il est rare que vous ayez besoin de quelque chose de plus que le minimum suggéré ici. Les dépendances sont généralement calculées avec précision par le système de construction, il n'y a donc aucune raison de les spécifier manuellement.
  • Si votre package est principalement destiné à un usage interne, la Description peut ne spécifier qu'un minimum d'informations et un lien vers le wiki de l'entreprise ; sinon, plus de détails pourraient être utiles.

Créez ensuite le fichier debian/compat fichier, qui existe principalement à des fins historiques :

$ echo "9" > debian/compat 

Ensuite, créez le journal des modifications pour indiquer aux utilisateurs du package ce qui a changé depuis la dernière version. Le moyen le plus simple est d'utiliser dch --create pour créer un modèle, puis remplissez les valeurs.

Rempli, il ressemble à :

monhttp (2.0.0-1) stable ; urgency=medium

  * Version initiale.

 -- Jan Doe  Ven 27 mars 2020 01:09:22 +0000

Maintenant, vous devez indiquer à l'outil d'installer HTTPie, mais quelle version ?

Créer un requirements.in fichier qui a des versions lâches :

httpie 

En général, le fichier d'exigences lâche ne contiendra que les dépendances directes de votre projet et spécifiera les versions minimales si nécessaire. Il n'est pas toujours nécessaire de spécifier les versions minimales :les outils sont généralement orientés vers le resserrement des dépendances vers la "dernière version possible". Dans le cas où votre paquet Debian correspond à un paquet Python interne, un cas courant dans les applications internes, le fichier d'exigences lâche ressemblera :une seule ligne avec le nom du paquet.

Ensuite, utilisez pip-compile (disponible en installant le package PyPI pip-tools ):

$ pip-compile requirements.in > requirements.txt 

Cela produira un fichier de dépendance strict appelé requirements.txt :

#
# Ce fichier est généré automatiquement par pip-compile
# Pour mettre à jour, exécutez :
#
#    pip-compile requirements.in
#
certifi==2019.11.28       # via les requêtes
chardet==3.0.4            # via les requêtes
httpie==2.0.0             # via -r requirements.in
idna==2.9                 # via des requêtes
pygments==2.6.1           # via httpie
requests==2.23.0          # via httpie
urllib3==1.25.8           # via des requêtes

Enfin, écrivez un debian/rules fichier pour créer le package. Étant donné que dh_virtualenv fait tout le travail, le fichier de règles est simple :

#!/usr/bin/make -f

% :
        dh $@ --with python-virtualenv --python /usr/bin/python3.7

Assurez-vous de spécifier l'interpréteur Python. Par défaut, il utilisera l'interpréteur dans /usr/bin/python , qui est Python 2, mais vous devez utiliser une version prise en charge de Python.

L'écriture est terminée; il ne reste plus qu'à compiler le package :

$ debuild -b -us -uc 

Plus de ressources Linux

  • Aide-mémoire des commandes Linux
  • Aide-mémoire des commandes Linux avancées
  • Cours en ligne gratuit :Présentation technique de RHEL
  • Aide-mémoire sur le réseau Linux
  • Aide-mémoire SELinux
  • Aide-mémoire sur les commandes courantes de Linux
  • Que sont les conteneurs Linux ?
  • Nos derniers articles Linux

Cela produira un fichier dans le répertoire parent avec un nom comme myhttp_2.0.0-1_amd64.deb . Ce fichier peut être installé sur n'importe quel système d'exploitation compatible.

En général, il est préférable de créer des packages Debian destinés à une plate-forme spécifique, telle que Debian 10.0, sur la même plate-forme.

Vous pouvez stocker ce paquet Debian dans un référentiel et l'installer sur tous les systèmes concernés avec, par exemple, Ansible.

Conclusion

L'empaquetage d'applications pour les systèmes d'exploitation basés sur Debian est un processus en plusieurs étapes. L'utilisation de dh_virtualenv rendra le processus simple.


Linux
  1. Comment installer Python sur Linux

  2. Comment créer un package RPM Linux

  3. Comment créer un swap sous Linux

  4. Comment créer un service Systemd sous Linux

  5. Comment créer un fichier d'échange sous Linux

Comment créer des raccourcis sur le bureau Linux

Comment créer un alias SSH sous Linux

Comment créer un alias sous Linux

Comment installer Setuptools pour Python sur Linux

Comment créer un package pour le compte cPanel ?

Comment créer un contrôleur de domaine sous Linux pour AD