Vous avez deux types de paquets Python
- un paquet que l’on dit pur Python, c’est-à-dire qu’il ne contient pas de partie qui doit être compilée.
- un paquet avec des modules compilés comme ceux vus précédemment avec l’utilisation de
cython
.
Dans le premier cas, la distribution est assez simple puisqu’elle ne dépend que de la version de Python. Le paquet peut s’installer sur n’importe quel système d’exploitation en copiant juste les fichiers Python au bon endroit.
Dans le cas de bout compilé, les choses se compliquent un peu, car il faut fournir des binaires et, par conséquent, il y a une dépendance au système d’exploitation, au compilateur utilisé... En d’autres termes, si vous souhaitez distribuer ce genre de paquet sur tous les systèmes d’exploitation, vous devez les avoir à votre disposition pour pouvoir créer les bons binaires.
Heureusement, vous n’êtes pas obligés d’avoir plusieurs machines pour réaliser cette opération. L’intégration continue peut grandement vous faciliter la vie comme nous le verrons à la fin de cette formation.
Les gestionnaires de paquets dans l’univers Python sont au nombre de deux : pypi et conda. Nous verrons dans la suite comment rendre disponible son application sur ces deux gestionnaires.
PyPi¶
Nous allons dans un premier temps nous intéresser à PyPi. Maintenant que nous avons un fichier pyproject.toml
qui explique comment construire le package ainsi que ces dépendances, nous sommes en mesure de construire des distributions.
Dans PyPi, elles peuvent être de deux sortes
Archive et wheel¶
sdist
crée une archive de votre package.Lorsqu’un utilisateur utilise
pip
pour l’installer, l’archive est téléchargée puis la commandepip install
est exécutée comme vu précédemment. La ligne de commandepython -m build --sdist
crée une archive dans le répertoire
dist
.bdist
crée un binaire et est donc spécifique à une plateforme si des modules sont compilés. Ceci permet d’avoir une installation beaucoup plus rapide du fait qu’il n’y a pas de processus de compilation. Ce binaire est appeléwheels
et est obtenu à partir de la ligne de commandepython -m build --wheel
Il existe plusieurs variantes :
Lorsque le package ne contient que des fichiers Python.
On a alors dans le répertoire
dist
le fichiercalculator-0.1.1-py3-none-any.whl
.Lorsque le package contient des fichiers compilés.
On a alors dans le répertoire
dist
le fichiercalculator-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
. Ce fichier nous renseigne sur la version Python, l’OS et le type d’architecture pour qui est destiné ce binaire. Dans toute autre configuration, le binaire ne sera pas installable. Il vous faut donc toutes les variantes pour pouvoir avoir l’ensemble de binaires.
Maintenant que vous avez les différentes versions, vous pouvez les mettre sur PyPi pour que d’autres personnes puissent utiliser votre application.
twine¶
twine
permet de mettre les distributions créées se trouvant dans le répertoire dist
sur PyPi. Il existe deux sites
- https://pypi.org/ (le site officiel)
- https://
test .pypi .org / (le site pour faire des tests)
Avant d’utiliser twine
, il est nécessaire de se créer un compte
Pour mettre l’ensemble des distributions sur
pypi.org
twine upload dist/*
test.pypi.org
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
Une fois que vous avez effectué l’upload, vous pouvez rechercher votre application
pypi.org
pip search calculator
test.pypi.org
pip search --index https://testpypi.python.org/pypi calculator
conda¶
Il est également possible de mettre son package sur conda. Comme pour PyPi, il est nécessaire de se créer un compte pour pouvoir avoir sa propre channel
(https://
Il est ensuite nécessaire d’installer différents outils pour pouvoir uploader vos fichiers.
conda install conda-build anaconda-client
Il est possible d’installer des packages qui ne sont pas forcément écrits en Python.
conda-forge
est un endroit où l’on peut trouver ces packages.
Le but est d’écrire des recettes permettant de compiler le projet sur différentes plateformes (linux, mac OSX, windows).
Le processus de soumission peut être assez long, c’est pourquoi nous utiliserons notre propre channel dans la suite. Si vous souhaitez mettre vos applications sur conda-forge
(ce qui est une très bonne idée, car cela offre plus de visibilité que sur sa propre channel), il suffit d’aller ici : https://
Création d’une recette¶
Pour que conda puisse construire le binaire de votre application, il lui faut plusieurs fichiers que l’on retrouve généralement dans un répertoire recipes
.
meta.yaml
Ce fichier définit l’ensemble des méta données de la recette permettant de créer le package conda (voir https://
docs .conda .io /projects /conda -build /en /latest /resources /define -metadata .html) build.sh
Ce fichier indique comment construire des parties qui ne peuvent pas être produite par la recette (compilation, ajout de fichiers externes...) pour les systèmes linux et macos.
build.bat
Ce fichier indique comment construire des parties qui ne peuvent pas être produite par la recette (compilation, ajout de fichiers externes...) pour le système windows.
Nous ne verrons ici que l’écriture d’un fichier meta.yaml
. Reprenons l’exemple de l’application calculator
et regardons ce que ça donne
{% set name = "calculator" %}
{% set version = "0.1.1" %}
package:
name: '{{ name|lower }}'
version: '{{ version }}'
source:
path: ../
build:
number: 0
script: python setup.py install
requirements:
build:
- python
- setuptools
- cython
run:
- python
test:
imports:
- calculator
about:
home: http://github.com/gouarin/calculator
license: MIT
description: Simple calculator project
extra:
recipe-maintainers: Loic Gouarin <loic.gouarin@gmail.com>
Une fois les fichiers du répertoire recipes
sont écrits, il faut exécuter la commande suivante
conda build recipes
À la fin de la procédure, vous devriez voir où il a mis le package en local. Vous pouvez alors essayer de l’installer en faisant
conda install --use-local calculator
Uploader le paquet¶
Si tout s’est bien passé, vous pouvez à présent le mettre sur anaconda dans votre channel pour que d’autres puissent l’installer. Il vous faut pour cela anaconda-client
.
conda install anaconda-client
Vous pouvez maintenant l’uploader.
anaconda upload /home/loic/miniconda3/conda-bld/linux-64/calculator-0.1.1-py36h585410b_0.tar.bz2