Python a une histoire confusion des outils qui peuvent être utilisés pour emballer et décrire les projets: ceux - ci sont distutils
dans la bibliothèque standard, distribute
, distutils2
et setuptools
(et peut - être plus). Il semble que distribute
et distutils2
ont été abandonnés en faveur de setuptools
, ce qui laisse deux normes concurrentes.
À ma connaissance, il setuptools
offre beaucoup plus d'options (par exemple, déclarer des dépendances, des tests, etc.) que distutils
, cependant, il n'est pas inclus dans la bibliothèque standard Python (encore?).
Le guide de l'utilisateur de Python Packaging [ 1 ] recommande maintenant:
Permet
setuptools
de définir des projets et de créer des distributions source.
Et explique:
Bien que vous puissiez utiliser pure
distutils
pour de nombreux projets, il ne prend pas en charge la définition de dépendances sur d’autres projets et il manque plusieurs utilitaires pratiques permettant de remplir automatiquement correctement les métadonnées de package fournies parsetuptools
. En dehors de la bibliothèque standard, setuptools offre également un ensemble de fonctionnalités plus cohérent dans différentes versions de Python, et (contrairement àdistutils
),setuptools
sera mis à jour pour produire les prochains formats standard «Metadata 2.0» sur toutes les versions prises en charge.Même pour les projets qui choisissent d'utiliser
distutils
, lorsque pip installe ces projets directement à partir de la source (plutôt que d'installer à partir d'un fichier de roue prédéfini), il construira en fait votre projet à lasetuptools
place.
Cependant, l' examen des fichiers setup.py de divers projets révèle que cela ne semble pas être une norme réelle. De nombreux packages utilisent encore distutils
et ceux qui prennent en charge setuptools
se mélangent souvent setuptools
avec, distutils
par exemple en effectuant une importation de secours:
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
Suivi d'une tentative pour trouver un moyen d'écrire une configuration pouvant être installée à la fois par setuptools
et distutils
. Cela inclut souvent diverses méthodes de vérification des dépendances sujettes aux erreurs, car distutils
ne prend pas en charge les dépendances dans la fonction de configuration.
Pourquoi les gens font-ils encore des efforts supplémentaires pour soutenir distutils
- le fait que ce setuptools
ne soit pas dans la bibliothèque standard est-il la seule raison? Quels sont les avantages distutils
et y a-t-il des inconvénients à écrire des fichiers setup.py qui ne prennent en charge que setuptools
.
setuptools
est une alternative améliorée à distutils
mais notez que " Le programme d' installation pip recommandé exécute tous les scripts setup.py avec setuptools
, même si le script lui-même importe uniquementdistutils
" ( source )
distutils
a été fusionné danssetuptools
, mais il existe des applications héritées qui ont été écrites pour être utiliséesdistutils
et la migration vers les normes appropriées entraîne des coûts.