611 votes

Différences entre distribute, distutils, setuptools et distutils2 ?

La situation

J'essaie de porter une bibliothèque open-source vers Python 3. ( SymPy si quelqu'un se pose la question).

Donc, j'ai besoin d'exécuter 2to3 automatiquement lors de la construction pour Python 3. Pour ce faire, je dois utiliser distribute . Par conséquent, je dois porter le système actuel, qui (selon le doctest) est distutils .

Le problème

Malheureusement, je ne sais pas quelle est la différence entre ces modules distutils , distribute , setuptools . La documentation est très sommaire, car ils semblent tous être des dérivations les uns des autres, censés être compatibles dans la plupart des cas (mais en fait, pas tous) et ainsi de suite, et ainsi de suite.

La question

Quelqu'un pourrait-il expliquer les différences ? Que dois-je utiliser ? Quelle est la solution la plus moderne ? (En passant, j'apprécierais également un guide sur le portage vers le format Distribute mais cela dépasse un peu le cadre de la question )

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

867voto

Flimm Points 8870

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 :

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).

0 votes

Quelqu'un peut-il nous éclairer sur ce qui est arrivé à distutils2 ? L'équipe est-elle retournée travailler sur distribute ?

2 votes

6 votes

Et ça ne s'arrange pas : 'Distribute' is a now deprecated fork of the 'Setuptools' project. @ PyPI Distribute page.

252voto

Éric Araujo Points 4212

Je suis un mainteneur de distutils et un contributeur de distutils2/packaging. J'ai fait un exposé sur le packaging Python à ConFoo 2011 et ces jours-ci j'écris une version étendue de celui-ci. Elle n'est pas encore publiée, alors voici des extraits qui devraient aider à définir les choses.

  • Distutils est l'outil standard utilisé pour l'emballage. Il fonctionne plutôt bien pour des besoins simples, mais il est limité et pas trivial à étendre.

  • Outils d'installation est un projet né du désir de combler les fonctionnalités manquantes de distutils et d'explorer de nouvelles directions. Dans certaines sous-communautés, c'est une de facto standard. Il utilise monkey-Parcheando et la magie qui est désapprouvée par les développeurs du noyau Python.

  • Distribuer est un fork de Setuptools qui a été lancé par des développeurs estimant que son rythme de développement était trop lent et qu'il n'était pas possible de le faire évoluer. Son développement a été considérablement ralenti lorsque distutils2 a été démarré par le même groupe. 2013-Mise à jour d'août : distribute est fusionnée à nouveau dans setuptools et abandonnée.

  • Distutils2 est une nouvelle bibliothèque distutils, démarrée comme un fork de la base de code distutils, avec de bonnes idées tirées des outils de configuration (dont certains ont été discutés en détail dans les PEP), et un installateur de base inspiré de pip. Le nom réel que vous utilisez pour importer Distutils2 est packaging dans la bibliothèque standard de Python 3.3+, ou distutils2 dans 2.4+ et 3.1-3.2. (Un backport sera bientôt disponible). Distutils2 n'a pas fait la sortie de Python 3.3, et il a été mis en attente.

Plus d'informations :

J'espère terminer mon guide bientôt, il contiendra plus d'informations sur les points forts et faibles de chaque bibliothèque et un guide de transition.

0 votes

@Éric Araujo S'il vous plaît, aidez-moi à comprendre. Est-ce que distutils2 et distribute convergeront un jour vers un outil/une bibliothèque unique ? Merci.

1 votes

Non. distutils2 reprend certaines bonnes idées de setuptools/distribute, après normalisation (PEPs) ou non (par exemple, je suis le mentor d'un étudiant du GSoC qui ajoute une commande develop et la génération automatique de scripts), mais il ne sera jamais un remplacement direct : il y a certaines parties que nous ne voulons pas (œufs, intégration VCS, etc.). D'un autre côté, distutils2 possède certaines choses que setuptools/distribute n'ont pas. Pour faciliter la transition, je pense que les développeurs de distribute utiliseront peut-être distutils2 pour supporter les nouveaux standards et outils ; je pense aussi me souvenir que le développeur de setuptools a dit qu'il voulait supporter les nouveaux standards.

1 votes

Où se situe ez_setup dans tout cela ? Y a-t-il également des mises à jour sur le statut de distutils2 ?

5voto

Keith Points 13800

REMARQUE : Réponse dépréciée, Distribute est maintenant obsolète. Cette réponse n'est plus valable depuis que la Python Packaging Authority a été formée et a fait un gros travail de nettoyage.


Oui, vous l'avez. :-o Je pense qu'en ce moment le paquet préféré est Distribuer qui est un fork de setuptools, qui est une extension de distutils (le système d'empaquetage original). Setuptools n'étant pas maintenu, il a été bifurqué et renommé, mais lorsqu'il est installé, il utilise le nom de paquetage de setuptools ! Je pense que la plupart des développeurs Python utilisent maintenant Distribute, et je peux dire avec certitude que je le fais.

0 votes

Pour mémoire, j'ai accepté cette réponse parce qu'elle me disait la situation actuelle (Et la fourche de is extension de relation que l'image dans l'autre réponse ne mentionne tout simplement pas). Et quelque part sur la route, j'ai aussi appris que la documentation elle-même n'est généralement pas sûre de ce qu'elle essaie de dire.

2 votes

@VPeric, En effet, la documentation reflète le fait que cet aspect de python est dans un état de flux / un désordre.

2voto

Éric Araujo Points 4212

Je me rends compte que j'ai répondu à votre question secondaire sans aborder les hypothèses incontestées de votre problème initial :

J'essaie de porter une bibliothèque open-source (SymPy, si quelqu'un se pose la question) vers Python 3. Pour Pour ce faire, j'ai besoin d'exécuter 2to3 automatiquement lors de la construction pour Python 3.

Vous mai pas besoin de . D'autres stratégies sont décrites à l'adresse http://docs.python.org/dev/howto/pyporting

Pour ce faire, je dois utiliser la distribution,

Vous mai :) distutils supporte la conversion 2to3 à la construction pour le code (pas les docstrings), d'une manière différente de celle de distribute : http://docs.python.org/dev/howto/pyporting#during-installation

0 votes

Merci, mais nous avons déjà décidé de résoudre le problème en écrivant notre script pour gérer la conversion. Et oui, je savais qu'il y avait d'autres options que d'utiliser 2to3, mais SymPy est une base de code complexe (environ 200k+ lignes la dernière fois que j'ai vérifié) et utiliser 2to3 était la seule stratégie réaliste. Merci encore, dans tous les cas !

1voto

Ce sujet semble être encore en pleine évolution. En date du 31-10-2013, le "Python Packaging User Guide" (Guide de l'utilisateur de Python Packaging) Recommandations rapides définit "quel ensemble d'outils est actuellement recommandé". Il renvoie également à " L'avenir du packaging Python "

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X