Comment empaqueter votre code Python

Vous avez passé des semaines à perfectionner votre code. Vous l’avez testé et envoyé à des amis développeurs proches pour une assurance qualité. Vous avez posté tout le code source sur votre serveur Git personnel et vous avez reçu des rapports de bogues utiles de quelques courageux premiers utilisateurs. Et maintenant, vous êtes prêt à rendre votre code Python accessible au monde entier.
Et c’est à ce moment-là que ça vous frappe. Vous n’avez aucune idée de comment livrer le produit.
Livrer du code à sa cible est un gros problème. C’est toute une branche du développement logiciel, c’est le “D” en CI/CD, et pourtant beaucoup de gens oublient tout, au moins jusqu’à la fin. J’ai écrit des articles sur Autotools et Cmake, mais certains langages ont leurs propres méthodes pour vous aider à rendre votre code facilement accessible aux utilisateurs. Pour Python, un moyen courant de fournir du code aux utilisateurs est d’utiliser setuptools
.
Contents
Installer les outils de configuration
Le moyen le plus simple d’installer et de mettre à jour setuptools
est avec pip
:
$ sudo python -m pip install --upgrade setuptools
Exemple de bibliothèque
Créez une bibliothèque Python simple appelée myhellolib
pour un exemple de code nécessitant un emballage. Cette bibliothèque accepte une chaîne puis imprime la chaîne en majuscules.
Il s’agit de deux lignes de code, mais la structure du projet est importante, alors créez d’abord l’arborescence :
$ mkdir -p myhellolib.git/myhellolib
Pour confirmer que ce projet est une bibliothèque importable (un “module” Python), créez le fichier vide __init__.py
dans le répertoire code, accompagné du fichier contenant le code :
$ touch myhellolib.git/myhellolib/__init__.py
$ touch myhellolib.git/myhellolib/myhellolib.py
Dans le myhellolib.py
fichier, entrez ce code Python simple :
def greeter(s):
print(s.upper())
C’est la bibliothèque écrite.
Essaye-le
Avant de l’emballer, testez votre bibliothèque. Créer un myhellolib.git/test.py
fichier et entrez ce code :
import myhellolib.myhellolib as hellohello.greeter("Hello Opensource.com.")
Exécutez le script :
$ cd myhellolib.git
$ python ./test.py
HELLO OPENSOURCE.COM
Cela fonctionne, alors maintenant vous pouvez l’emballer.
Outils de configuration
Pour packager un projet avec setuptools
, vous devez créer un .toml
identification de fichier setuptools
comme système de construction. Placez ce texte dans un fichier appelé myhellolib.toml
dans le répertoire de votre projet :
[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"
Ensuite, créez un fichier appelé setup.py
, contenant des métadonnées sur votre projet :
from setuptools import setupsetup(
name='myhellolib',
version='0.0.1',
packages=['myhellolib'],
install_requires=[
'requests',
'importlib; python_version == "3.8"',
],
)
Croyez-le ou non, c’est toute la configuration setuptools
a besoin. Votre projet est prêt pour l’emballage.
Empaqueter Python
Pour créer votre package Python, vous avez besoin d’un constructeur. Un outil commun est build
, que vous pouvez installer avec pip
:
$ python -m pip install build --user
Construisez votre projet :
$ python -m build
Après quelques instants, la construction se termine et il y a un nouveau répertoire dans votre dossier de projet appelé dist
. Ce dossier contient un .tar.gz
et un .whl
déposer.
Votre tout premier package Python ! Voici ce que chacun contient :
$ tar --list --file dist/myhellolib-0.0.1.tar.gz
myhellolib-0.0.1/
myhellolib-0.0.1/PKG-INFO
myhellolib-0.0.1/myhellolib/
myhellolib-0.0.1/myhellolib/__init__.py
myhellolib-0.0.1/myhellolib/myhellolib.py
myhellolib-0.0.1/myhellolib.egg-info/
myhellolib-0.0.1/myhellolib.egg-info/PKG-INFO
myhellolib-0.0.1/myhellolib.egg-info/SOURCES.txt
myhellolib-0.0.1/myhellolib.egg-info/dependency_links.txt
myhellolib-0.0.1/myhellolib.egg-info/requires.txt
myhellolib-0.0.1/myhellolib.egg-info/top_level.txt
myhellolib-0.0.1/setup.cfg
myhellolib-0.0.1/setup.py$ unzip -l dist/myhellolib-0.0.1-py3-none-any.whl
Archive: dist/myhellolib-0.0.1-py3-none-any.whl
Name
----
myhellolib/__init__.py
myhellolib/myhellolib.py
myhellolib-0.0.1.dist-info/METADATA
myhellolib-0.0.1.dist-info/WHEEL
myhellolib-0.0.1.dist-info/top_level.txt
myhellolib-0.0.1.dist-info/RECORD
-------
6 files
Le rendre disponible
Maintenant que vous savez à quel point il est facile d’emballer votre package Python, vous pouvez soit automatiser le processus à l’aide de hooks Git, de webhooks GitLab, de Jenkins ou d’un outil d’automatisation similaire. Vous pouvez même télécharger votre projet sur PyPi, le référentiel populaire pour les modules Python. Une fois sur PyPi, les utilisateurs peuvent l’installer en utilisant pip
, de la même manière que vous avez installé setuptools
et build
pour cet article !
Ce n’est pas souvent la première chose à laquelle vous pensez lorsque vous vous asseyez pour développer une application ou une bibliothèque, mais l’empaquetage du code est un aspect important de la programmation. Les développeurs Python ont beaucoup réfléchi à la façon dont les programmeurs peuvent rendre leur travail accessible au monde, et cela ne devient pas beaucoup plus simple que setuptools
. Essayez-le, utilisez-le et continuez à coder en Python !