En mars 2020, la plupart des autres réponses à cette question étaient obsolètes depuis plusieurs années. Lorsque vous rencontrez des conseils sur les problèmes de packaging Python, n'oubliez pas de regarder la date de publication et ne vous fiez pas aux informations obsolètes.
Le Guide de l'utilisateur de Python Packaging mérite d'être lu. Chaque page a une date de «dernière mise à jour» affichée, vous pouvez donc vérifier la récence du manuel, et il est assez complet. Le fait qu'il soit hébergé sur un sous-domaine de python.org de la Python Software Foundation ne fait qu'ajouter de la crédibilité. La page Résumés du projet est particulièrement pertinente ici.
Résumé des outils:
Voici un résumé du paysage de l'emballage Python:
Outils pris en charge:
distutilsest toujours l'outil standard pour l'empaquetage en Python. Il est inclus dans la bibliothèque standard (Python 2 et Python 3). Il est utile pour les distributions Python simples, mais manque de fonctionnalités. Il présente le distutilspackage Python qui peut être importé dans votre setup.pyscript.
setuptoolsa été développé pour surmonter les limitations de Distutils et n'est pas inclus dans la bibliothèque standard. Il a introduit un utilitaire de ligne de commande appelé easy_install. Il a également introduit le setuptoolspackage Python qui peut être importé dans votre setup.pyscript et le pkg_resourcespackage Python qui peut être importé dans votre code pour localiser les fichiers de données installés avec une distribution. L'un de ses pièges est qu'il patche le distutilspaquet Python avec des singes . Cela devrait bien fonctionner avec pip. Il voit des sorties régulières.
scikit-buildest un générateur de système de construction amélioré qui utilise en interne CMake pour créer des extensions Python compilées. Parce que scikit-build n'est pas basé sur des distutils, il n'a vraiment aucune de ses limites. Lorsque ninja-build est présent, scikit-build peut compiler de grands projets plus de trois fois plus rapidement que les alternatives. Cela devrait bien fonctionner avec pip.
distlibest une bibliothèque qui fournit des fonctionnalités utilisées par des outils de niveau supérieur comme pip.
packagingest également une bibliothèque qui fournit des fonctionnalités utilisées par des outils de niveau supérieur comme pipetsetuptools
Outils obsolètes / abandonnés:
distributeétait une fourchette de setuptools. Il partageait le même espace de noms, donc si vous aviez installé Distribute, import setuptoolsimporterait en fait le package distribué avec Distribute. Distribute a été fusionné dans Setuptools 0.7 , vous n'avez donc plus besoin d'utiliser Distribute. En fait, la version sur Pypi n'est qu'une couche de compatibilité qui installe Setuptools.
distutils2était une tentative de tirer le meilleur parti de distutils, setuptoolset de distributedevenir l'outil standard inclus dans la bibliothèque standard de Python. L'idée était qu'elle distutils2serait distribuée pour les anciennes versions de Python, et qu'elle distutils2serait renommée packagingpour Python 3.3, qui l'inclurait dans sa bibliothèque standard. Cependant, ces plans ne se sont pas déroulés comme prévu et il distutils2s'agit actuellement d' un projet abandonné . La dernière version date de mars 2012 et sa page d'accueil Pypi a finalement été mise à jour pour refléter sa mort.
Autres:
Il existe d'autres outils, si vous êtes intéressé, lisez les résumés des projets dans le Guide de l'utilisateur de Python Packaging. Je ne vais pas les énumérer tous, de ne pas répéter cette page, et de garder la réponse correspondant à la question, qui était seulement distribute, distutils, setuptoolset distutils2.
Recommandation:
Si tout cela est nouveau pour vous et que vous ne savez pas par où commencer, je recommanderais d'apprendresetuptools , avec pipet virtualenv, qui fonctionnent tous très bien ensemble.
Si vous êtes à la recherche dans virtualenv, vous pourriez être intéressé par cette question: Quelle est la différence entre venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, etc? . (Oui, je sais, je gémis avec toi.)