En mars 2020, la plupart des autres réponses à cette question sont dépassées de plusieurs années. Lorsque vous trouvez des conseils sur les questions relatives à l'emballage des pythons, n'oubliez pas de regarder la date de publication et ne vous fiez pas à des informations périmées.
El Guide de l'utilisateur de Python Packaging vaut la peine d'être lu. Chaque page comporte une date de "dernière mise à jour", ce qui vous permet de vérifier l'actualité du manuel, qui 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 du crédit à son contenu. Le site Résumés des projets est particulièrement pertinente ici.
Résumé des outils :
Voici un résumé du paysage de l'emballage Python :
Outils pris en charge :
-
distutils
est toujours l'outil standard pour le packaging 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 introduit le distutils
Python qui peut être importé dans votre programme setup.py
script.
-
setuptools
a été développé pour surmonter les limitations de Distutils, et n'est pas inclus dans la bibliothèque standard. Il introduit un utilitaire en ligne de commande appelé easy_install
. Il a également introduit le setuptools
Python qui peut être importé dans votre programme setup.py
script, et les pkg_resources
Paquet Python qui peut être importé dans votre code pour localiser les fichiers de données installés avec une distribution. L'un de ses inconvénients est qu'il modifie l'interface de l'application distutils
paquet Python. Il devrait bien fonctionner avec pip
. Il voit des sorties régulières.
-
scikit-build
est un générateur de système de construction amélioré qui utilise en interne CMake pour construire des extensions Python compilées. Comme scikit-build n'est pas basé sur distutils, il n'a pas vraiment ses limitations. Lorsque ninja-build est présent, scikit-build peut compiler de grands projets plus de trois fois plus rapidement que les alternatives. Il devrait bien fonctionner avec pip
.
-
distlib
est une bibliothèque qui fournit des fonctionnalités utilisées par des outils de niveau supérieur tels que pip
.
-
packaging
est également une bibliothèque qui fournit des fonctionnalités utilisées par des outils de plus haut niveau tels que pip
y setuptools
Outils obsolètes/abandonnés :
-
distribute
était une fourche de setuptools
. Il partageait le même espace de noms, donc si vous aviez installé Distribute, import setuptools
importerait en fait le paquet distribué avec Distribute. Distribute a été fusionné à nouveau dans Setuptools 0.7 Vous n'avez donc plus besoin d'utiliser Distribute. En fait, la version sur Pypi est juste une couche de compatibilité qui installe Setuptools.
-
distutils2
était une tentative de prendre le meilleur de distutils
, setuptools
y distribute
et est devenu l'outil standard inclus dans la bibliothèque standard de Python. L'idée était que distutils2
serait distribué pour les anciennes versions de Python, et que distutils2
serait renommé en packaging
pour Python 3.3, qui l'inclurait dans sa bibliothèque standard. Ces plans ne se sont cependant pas déroulés comme prévu, et actuellement, distutils2
est un projet abandonné . La dernière version date de mars 2012, et sa page d'accueil Pypi a enfin été mise à jour pour refléter sa mort.
Autres :
Il y a d'autres outils, si vous êtes intéressés, lisez Résumés des projets dans le guide de l'utilisateur de Python Packaging. Je ne les énumérerai pas tous, pour ne pas répéter cette page, et pour que la réponse corresponde à la question, qui ne portait que sur distribute
, distutils
, setuptools
y distutils2
.
Recommandation :
Si tout cela est nouveau pour vous, et que vous ne savez pas par où commencer, Je recommande d'apprendre setuptools
ainsi que pip
y virtualenv
qui fonctionnent tous très bien ensemble.
Si vous cherchez à 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 vous).
24 votes
A quel point c'est déroutant ? Je suis venu à Python après avoir travaillé sur Java/C++. Dans ces situations, la distribution est très simple. Avec python, je suis complètement désorienté par tous ces systèmes de distribution.
82 votes
Je suis d'accord, l'emballage/installation de Python a beaucoup trop d'alternatives sans que la communauté ne donne de directives claires.
6 votes
Je voulais juste mettre en lien cette information sur le fait que Pip ne supporte pas les distributions binaires. lucumr.pocoo.org/2012/6/22/hate-hate-hate-everywhere
0 votes
@pixelbeat pip supporte l'installation de roues (distributions dites binaires), ce lien est périmé.