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

Contenu supprimé Contenu ajouté
Aucun résumé des modifications
Ligne 121 :
 
Avec distutils, MANIFEST.in ne sert que pour les distributions source, et <code>package_data</code> pour les installations, ce qui entraine une redondance. Setuptools ajoute une option booleene <code>include_package_data</code><ref name="">https://github.com/pypa/setuptools/commit/4cd66c4147bef3ee8096f7161d407fb37582f1c9</ref> de sorte que le fichier MANIFEST.in soit le seul à être utilisé, pour le paquetage et pour l'installation finale, ce qui déprécie <code>package_data</code>. L'usage de package_data a toutefois été rétabli plus tard pour permettre de n'installer des fichiers que lors d'une installation et non lors d'une distribution source, depuis une arborescence complète récupérée depuis git<ref>https://github.com/pypa/setuptools/commit/d98923012</ref>, il devient aussi possible d'exlure des fichiers <code>glob</code>és par package_data, de la même manière que <code>distutils</code> via MANIFEST.in<ref>https://docs.python.org/fr/3/distutils/commandref.html#sdist-cmd</ref>, avec l'argument <code>exclude_package_data</code>. Pour éviter la redondance, l'usage exclusif de MANIFEST.in est recommandé.
 
En 2005, il est possible d'inclure dans les distributions source tout le contenu suivi par cvs ou svn, à condition qu'il n'y ait pas de fichier MANIFEST.in à la racine du projet. Pour git cette fonctionnalité est assurée par le greffon <code>setuptools_scm</code>, on l'active ainsi
 
from setuptools import setup
setup(
...,
use_scm_version=True,
setup_requires=['setuptools_scm'],
...,
)
 
Les formats binaires continuent d'ignorer le manifest et les plugins de gestion de version, et ne lisent que l'attribut <code>packages</code>, pour la simplifier on l'écrit
 
from setuptools import setup, find_packages
setup (
packages=find_packages()
)
 
find_namespace_packages() sert à inclure les sous-paquetages PEP420.
 
== Pip ==
 
La commande <code>'''pip'''</code> sert à remplacer l'utilitaire <code>easy_install</code> et le format <code>egg</code> par le format wheel (<code>.whl</code>), il fonctionne de manière similaire sinon.
 
== Pep517 ==
 
Dans les années 2010 des outils ne s'appuyant pas sur distutils et écrits en python 3 voient le jour pour remplacer pip, on peut citer <code>bento</code> (obsolète), <code>flit</code> ou <code>peotry</code>. flit est le seul outils qui permette la création de distributions binairement reproductibles<ref>https://reproducible-builds.org/</ref>, quand à poetry il permet d'une simple commande de créer un environnement virtuel, télécharger un wheel et de l'installer. Ces nouveaux outils en plus d'utiliser le format wheel savent lire le format <code>sdist</code> produit par les outils distutils/setuptools. Ils n'assurent pas toutes les fonctionnalités assurées par setuptools comme <code>setup.py develop</code>. Il est possible d'utiliser les formats anciens et nouveaux de concert avec l'option <code>--pep517</code> et <code>--no-pep517</code> de pip, par exemple forcer une installation ancienne pour utiliser <code>setup.py develop</code> aisni <code>pip install --editable --no-pep517</code>.
 
== Références ==