Python a-t-il un système de gestion des packages / modules?


145

Python a-t-il un système de gestion de packages / modules, similaire à la façon dont Ruby a des rubygems où vous pouvez le faire gem install packagename?

Lors de l' installation des modules Python , je ne vois que des références à python setup.py install, mais cela vous oblige à trouver d'abord le package.


3
Si vous pensez que l'index des packages de Python PyPI devrait avoir des instructions plus claires sur l'installation des packages, veuillez voter et commenter le problème sur bitbucket.org/pypa/pypi/issue/149/…
Colonel Panic

Alors qu'il était courant à l'époque, le lien dans cette question est maintenant à la documentation distutils héritée. J'ai déposé bugs.python.org/issue26014 pour expliquer que ces documents doivent être plus clairs sur le fait qu'ils ne sont plus adaptés à une utilisation en tant que documentation pour l'utilisateur final (ils sont uniquement conservés au profit des implémenteurs d'outils).
ncoghlan

Réponses:


213

Progrès récents

Mars 2014 : Bonne nouvelle! Python 3.4 est livré avec Pip. Pip est depuis longtemps le gestionnaire de paquets standard de Python. Vous pouvez installer un package comme celui-ci:

pip install httpie

Wahey! C'est la meilleure fonctionnalité de toute version de Python. Cela rend la richesse des bibliothèques de la communauté accessible à tous. Les débutants ne sont plus exclus de l'utilisation des bibliothèques communautaires en raison de la difficulté prohibitive de la configuration.

Cependant , il reste un certain nombre de frustrations exceptionnelles avec l'expérience d'empaquetage Python. Cumulativement, ils rendent Python très peu accueillant pour les débutants. De plus, la longue histoire de négligence (c.-à-d. Ne pas être expédiée avec un gestionnaire de paquets pendant 14 ans de Python 2.0 à Python 3.3) a causé des dommages à la communauté. Je décris les deux ci-dessous.

Des frustrations exceptionnelles

Il est important de comprendre que si les utilisateurs expérimentés sont capables de contourner ces frustrations, ils constituent des obstacles importants pour les nouveaux utilisateurs de Python. En fait, la difficulté et la non-convivialité générale en dissuaderont probablement beaucoup.

Le site Web de PyPI est contre-utile

Chaque langue avec un gestionnaire de packages a un référentiel officiel (ou quasi-officiel) pour que la communauté télécharge et publie des packages. Python a l'index de package Python, PyPI. https://pypi.python.org/pypi

Comparons ses pages avec celles de RubyGems et Npm (le gestionnaire de paquets Node).

  1. https://rubygems.org/gems/rails Page RubyGems pour le packagerails
  2. https://www.npmjs.org/package/express Page Npm pour le packageexpress
  3. https://pypi.python.org/pypi/simplejson/ Page PyPI pour le packagesimplejson

Vous verrez que les pages RubyGems et Npm commencent toutes les deux par une description en une ligne du package, puis de grandes instructions conviviales pour l'installer.

En attendant, malheur à tout utilisateur malheureux de Python qui navigue naïvement vers PyPI. Sur https://pypi.python.org/pypi/simplejson/ , ils ne trouveront pas d'instructions utiles. Il existe cependant un grand lien vert «Télécharger». Il n'est pas déraisonnable de le suivre. Aha, ils cliquent! Leur navigateur télécharge un .tar.gzfichier. De nombreux utilisateurs de Windows ne peuvent même pas l'ouvrir, mais s'ils persévèrent, ils peuvent éventuellement l'extraire, puis l'exécuter setup.pyet éventuellement avec l'aide de Google setup.py install. Certains abandonneront et réinventeront la roue.

Bien sûr, tout cela est faux. Le moyen le plus simple d'installer un package est d'utiliser une commande Pip. Mais PyPI n'a même pas mentionné Pip. Au lieu de cela, cela les a conduits sur un chemin archaïque et fastidieux.

Erreur: impossible de trouver vcvarsall.bat

Numpy est l'une des bibliothèques les plus populaires de Python. Essayez de l'installer avec Pip, vous obtenez ce message d'erreur cryptique:

Erreur: impossible de trouver vcvarsall.bat

Essayer de résoudre ce problème est l'une des questions les plus courantes sur Stack Overflow: " erreur: impossible de trouver vcvarsall.bat "

Peu de gens réussissent.

A titre de comparaison, dans la même situation, Ruby imprime ce message, qui explique ce qui se passe et comment y remédier:

Veuillez mettre à jour votre PATH pour inclure les outils de construction ou télécharger le DevKit à partir de http://rubyinstaller.org/downloads et suivre les instructions à http://github.com/oneclick/rubyinstaller/wiki/Development-Kit

La publication de packages est difficile

Ruby et Nodejs sont livrés avec des gestionnaires de packages complets, Gem (depuis 2007) et Npm (depuis 2011), et ont nourri des communautés de partage centrées autour de GitHub. Npm rend la publication de packages aussi simple que de les installer, il contient déjà 64k packages . RubyGems répertorie 72k packages . Le vénérable index des packages Python ne répertorie que 41k .

L'histoire

Faisant fi de sa devise « batteries incluses », Python a été livré sans gestionnaire de colis jusqu'en 2014.

Jusqu'à Pip, la norme de facto était une commande easy_install. C'était terriblement insuffisant. Il n'y avait aucune commande pour désinstaller les packages.

Pip était une énorme amélioration. Il avait la plupart des caractéristiques de Ruby's Gem. Malheureusement, Pip était - jusqu'à récemment - ironiquement difficile à installer. En fait, le problème reste une des principales questions Python sur Stack Overflow: " Comment installer pip sur Windows? "


3
Pour toute personne intéressée, le PEP 439 propose un moyen de rationaliser le processus d'installation de pip, même si je pense que ce PEP fait simplement partie d'une stratégie plus large qui est à l'étude. Voir également la discussion ici .
Cartroo

3
@Cartroo c'est une excellente nouvelle! Python mérite un gestionnaire de paquets, j'espère que les développeurs pourront y arriver.
Colonel Panic

Absolument, depuis longtemps. J'espère vraiment que cela en fera au moins Python 3.4. Malheureusement, je doute fort qu'il finisse par être rétroporté vers 2.x, mais il y a au moins de la lumière au bout du tunnel. Espérons juste que ce n'est pas un dragon venant en sens inverse ... (^_^)
Cartroo

6
Dans la défense de Python, les nouveaux langages tels que Ruby et Node ont eu la chance de pouvoir observer les erreurs des langages précédents et de les éviter. Cela dit, je souhaite vraiment que la gestion des paquets sur Python reçoive plus d'amour et de soins, donc je suis heureux de voir PEP 439 comme l'a souligné @Cartroo.
Dennis

Je conviens que la gestion des paquets de Ruby est une chose merveilleuse de mon point de vue (utilisateur final) .. gem install Xsemble juste fonctionner sur toutes les plates-formes. Alors, comment ont-ils géré cela pour les gemmes qui nécessitent la compilation de code C sous Windows?
bsa

64

L'index de package Python (PyPI) semble être standard:

  • Pour installer un package: pip install MyProject
  • Pour mettre à jour un package pip install --upgrade MyProject
  • Pour corriger une version d'un packagepip install MyProject==1.0

Vous pouvez installer le gestionnaire de packages comme suit:

curl -O http://python-distribute.org/distribute_setup.py
python distribute_setup.py
easy_install pip

Références:


3
Telle est la réponse moderne.
Gringo Suave

6
J'ai cherché sur Internet pendant 20 minutes et cette réponse n'était nulle part. Merci beaucoup. De plus, j'ai de sérieux doutes sur l'utilisation de python si la documentation est si mauvaise ... cela devrait être sur la page principale de Python ou accessible depuis Google ou quelque chose
Chris J

63

Et juste pour donner un contraste, il y a aussi pip .


2
Merci! pourquoi pip n'est-il pas mentionné sur la page de documentation d'installation des modules python?
tommy chheng

Notez que pip ne prend pas en charge les œufs, il installe uniquement les paquets sources. De manière générale, pip fait beaucoup mieux que easy_install, mais easy_install est susceptible d'être installé par défaut sur la plupart des Unix, pip ne l'est pas.
Jeffrey Harris

8
@Tommy C'est vrai! Si les développeurs Python se soucient de l'expérience utilisateur, ils expédient Python avec un gestionnaire de packages (tel que pip). Ruby est livré avec Gem et Nodejs avec Npm. stackoverflow.com/a/13445719/284795
Colonel Panic

21

En tant que développeur Ruby et Perl et apprenant Python, je n'ai pas trouvé que easy_install ou pip était l'équivalent de RubyGems ou CPAN.

J'ai tendance à garder mes systèmes de développement exécutant les dernières versions des modules au fur et à mesure que les développeurs les mettent à jour, et à geler mes systèmes de production aux versions définies. RubyGems et CPAN facilitent la recherche de modules en répertoriant ce qui est disponible, puis installez-les et mettez-les à jour ultérieurement individuellement ou en masse si vous le souhaitez.

easy_install et pip facilitent l'installation d'un module UNE FOIS que je l'ai localisé via une recherche de navigateur ou que je l'ai appris par d'autres moyens, mais ils ne me diront pas ce qui est disponible. Je peux nommer explicitement le module à mettre à jour, mais les applications ne me diront pas ce qui a été mis à jour et ne mettront pas à jour tout en vrac si je le souhaite.

Ainsi, la fonctionnalité de base est là dans pip et easy_install, mais il manque des fonctionnalités que j'aimerais voir qui les rendraient plus conviviales et plus faciles à utiliser et à égalité avec CPAN et RubyGems.


Cette réponse est désormais bel et bien dépassée.
ncoghlan


11

Au moins fin 2014, la distribution Anaconda Python de Continuum Analytics avec le gestionnaire de packages conda devrait être envisagée. Il résout la plupart des problèmes graves que les gens rencontrent avec Python en général (gestion des différentes versions de Python, mise à jour des versions de Python, gestion des packages, environnements virtuels, compatibilité Windows / Mac) en un seul téléchargement cohérent.

Cela vous permet de faire à peu près tout ce que vous pourriez souhaiter avec Python sans avoir à changer le système du tout. Ma prochaine solution préférée est pip + virtualenv, mais vous devez soit installer virtualenv dans votre système Python (et votre système Python n'est peut-être pas la version que vous souhaitez), soit construire à partir des sources . Anaconda rend tout ce processus en un clic, ainsi que l'ajout de nombreuses autres fonctionnalités.


7

Ce serait easy_install .


1
Si vous souhaitez voter contre tous ceux qui ont dit sur la page easy_install, veuillez d'abord vérifier les dates. C'était un conseil valable lorsqu'il a été donné il y a près de 7 ans . Je ne pense pas que nous, les répondeurs, reviendrons régulièrement sur cette question pour mettre à jour, donc le vote négatif est ridicule.
Kirk Strauser


5

Je ne vois ni MacPorts ni Homebrew mentionnés dans d'autres réponses ici, mais comme je les vois mentionnés ailleurs sur Stack Overflow pour des questions connexes, j'ajouterai mon propre 0,02 $ US que beaucoup de gens semblent considérer MacPorts comme non seulement un package gestionnaire pour les paquets en général (à ce jour, ils répertorient 16311 paquets / ports, 2931 correspondant à «python», mais uniquement pour les Mac), mais aussi comme gestionnaire de paquets décent (peut-être meilleur) pour les paquets / modules Python:

Question

"... quelle est la méthode que les développeurs Mac Python utilisent pour gérer leurs modules?"

Réponses

SciPy

"Les Mac (contrairement à Linux) ne sont pas livrés avec un gestionnaire de paquets, mais vous pouvez installer quelques gestionnaires de paquets populaires. Macports ..."

Je suis toujours en train de débattre sur l'opportunité d'utiliser ou non MacPorts moi-même, mais pour le moment, je penche dans cette direction.


1
Homebrew lui-même dit: Vous pouvez installer des packages Python avec (le easy_install ou obsolète) pip install <your_favorite_package>
Simone

4

Sous Windows, installez http://chocolatey.org/ puis

choco install python

Ouvrez une nouvelle cmd-window avec le PATH mis à jour. Ensuite, faites

choco install pip

Après cela, vous pouvez

pip install pyside
pip install ipython
...

Je voulais répondre à cela en commentaire à la réponse de Thomas Bratt mais je n'ai pas assez de réputation ...
hansvb

3

Puisque personne n'a mentionné pipenv ici, j'aimerais décrire mon point de vue sur les raisons pour lesquelles tout le monde devrait l'utiliser pour gérer les packages python.

Comme @ColonelPanic l'a mentionné, il y a plusieurs problèmes avec l' index des packages Python et avec pip et virtualenv également.

Pipenv résout la plupart des problèmes avec pip et fournit également des fonctionnalités supplémentaires.

Fonctionnalités de Pipenv

Pipenv est destiné à remplacer pip et virtualenv, ce qui signifie que pipenv créera automatiquement un environnement virtuel distinct pour chaque projet, évitant ainsi les conflits entre les différentes versions de python / versions de package pour différents projets.

  • Permet des builds vraiment déterministes, tout en ne spécifiant facilement que ce que vous voulez.
  • Génère et vérifie les hachages de fichiers pour les dépendances verrouillées.
  • Installez automatiquement les Pythons requis, si pyenv est disponible.
  • Recherche automatiquement la maison de votre projet, de manière récursive, en recherchant un Pipfile.
  • Génère automatiquement un Pipfile, s'il n'en existe pas.
  • Crée automatiquement un virtualenv dans un emplacement standard.
  • Ajoute / supprime automatiquement les packages à un fichier Pipfile lorsqu'ils sont dés / installés.
  • Charge automatiquement les fichiers .env, s'ils existent.

Si vous avez déjà travaillé sur des projets python, vous vous rendrez compte que ces fonctionnalités facilitent considérablement la gestion des packages.

Autres commandes

  • checkvérifie les vulnérabilités de sécurité et affirme que les exigences PEP 508 sont satisfaites par l'environnement actuel. ( ce qui, à mon avis, est une fonctionnalité intéressante, surtout après cela - Paquets malveillants sur PyPi )
  • graph vous montrera un graphique de dépendances, de vos dépendances installées.

Vous pouvez en savoir plus ici - Pipenv .

Installation

Vous pouvez trouver la documentation d'installation ici

PS: Si vous avez aimé travailler avec les requêtes Python Package , vous seriez heureux de savoir que pipenv est du même développeur Kenneth Reitz



0

La poésie est ce que vous recherchez. Il s'occupe de la gestion des dépendances, des environnements virtuels, de l'exécution.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.