« Distribuer un projet en python » : différence entre les versions

Contenu supprimé Contenu ajouté
+ environnement virtuel
Paquetage
Ligne 13 :
== Environnement virtuel ==
 
Nous avons vu que le système de site-packages est compatible avec les environnement virtuels par le biais du script site.py, et qu'il est fortement conseillé que cet environnement contienne la totalité de ce qui est nécessaire pour que votre module soit exécutable par des tiers une fois ''pip''é, ''easy-installéinstall''é, etc. Pour s'assurer de cela la ligne <code>include-system-site-packages = false</code> dans le fichier pyenv.cfg peut éviter des maladresses et laisser à croire que votre module fonctionne, mais qu'il dépende d'un environnement extérieur au module.
 
La manière dont vous décrivez ces environnement est propre à chaque outil, nous allons décrire celui de pip, qui est l'outil recommandé par python et désormais inclus par défaut dans les distributions python, si vous ne l'avez pas, vous pour l'obtenir avec la commande <code>python get-pip.py</code>, vous pouvez soit taper taper la commande <code>pip</code> directement dans une invite de commande, soit, ce qui est préférable le lancer via python <code>python -m pip</code>. Si vous lancez pip sans argument vous verrez une liste de commandes qu'il peut exécuter, celles qui nous intéressent sont <code>install</code> et <code>freeze</code>. <code>freeze</code> affiche la liste des modules tiers dans le site-packages en cours, dans un format que la commande <code>pip install</code> peut comprendre. La manière la plus pratique pour conserver une trace de ces noms de modules est la syntaxe suivant <code>python -m pip freeze > '''requirements.txt'''</code>. Ce nom de fichier est normalisé et il est recommandé de toujours l'utiliser. Un utilisateur tiers pourra alors imiter votre environnement simplement en tapant la commande <code>python -m pip install -r requirements.txt</code>, de préférence en ayant créé et activé un environnement virtuel au préalable, dans le même souci d'avoir un environnement reproductible, et de ne pas polluer la commande <code>pip freeze</code> si il souhaite lui aussi participer à votre module. Pour que cela soit possible il faut que le fichier requirements.txt – qui n'a de sens que pour pip – soit inclus avec votre module, on parlera alors plutôt de « '''paquetage''' », en anglais ''package'', car notre projet contient autre chose qu'un simple script en python.
 
== Le paquetage ==
 
Pour utiliser votre module, il faut donc l'inclure dans un paquetage qui contient en outre les noms d'autre modules tiers que votre module utilise dans un fichier texte, ce fichier peut être utilisé pour établir un arbre de dépendances, et il est déconseillé de le modifier à la main mais de laisser <code>pip freeze</code> s'en occuper.
 
Maintenant comment construire ce paquetage ? Encore une fois le faire à la main peut être fastidieux, surtout si votre module contient beaucoup de fichiers, des fichiers non en python, des fichiers que vous ne souhaitez pas partager, etc. Python contient un module spécialement dédié à cette fin, nommé « '''distutils''' ». Si vous êtes curieux, vous le trouverez dans Lib/distutils, et sa documentation est à l'adresse install/index.html de la documentation officielle. On voit que la finalité première de ce module est de produire des paquetages dans le sens de linux, c'est à dire des fichier .rpm. En ce qui nous intéresse, dans un premier temps, c'est de créer une archive .zip, .tar.gz, que pip install est capable de lire (si vous tapez <code>python -m pip install --help</code>, vous verrez qu'en outre de lire un fichier de requirements il sait lire une archive zip, en sus de savoir chercher un module sur pipy, d'un dépôt git où d'un simple chemin vers une arborescence locale). Ce que pip va faire dans tous les cas, plutôt que de recopier tout le contenu du répertoire, déport distant, archive, etc. est d'exécuter un fichier dont le nom est normalisé : <code>'''setup.py'''</code> avec l'argument <code>install</code>, c'est ce fichier qui va donc chapeauter ce qui sera copié ou non dans le dossier site-packages via pip.
 
Ce fichier peut être utilisé par soi même de multiples manières : construire une archive, un paquetage linux, voire même un installeur windows (même si cela est déconseillé de nos jours et non plus officiellement supporté), mais également des outils tiers comme pip.
 
Dans sa forme la plus simple le fichier setup.py contient un import de la librairie setuptools, et un appel a la fonction setup() de celle-ci qui lira le contenu de la ligne de commande et exécutera les taches nécessaires à la copie de fichiers, la compilation de modules, de paquetage dans une archive, etc.
 
from setuptools import setup
setup()
 
[[Catégorie:Python]]