Pourquoi utiliser pip sur easy_install? [fermé]

936

Un tweet se lit comme suit:

N'utilisez pas easy_install, sauf si vous aimez vous poignarder au visage. Utilisez pip.

Pourquoi utiliser pip sur easy_install? La faute n'est-elle pas principalement due aux auteurs de PyPI et de packages ? Si un auteur télécharge l'archive tar source de merde (par exemple: fichiers manquants, pas de setup.py) sur PyPI, alors pip et easy_install échoueront. À part les différences esthétiques, pourquoi les gens de Python (comme dans le tweet ci-dessus) semblent-ils fortement favoriser pip par rapport à easy_install?

(Supposons que nous parlons d'easy_install à partir du package Distribute, qui est géré par la communauté)

Sridhar Ratnakumar
la source
74
Avant de voir cette question, j'ai répondu à une question non liée en disant "n'utilisez pas easy_install, utilisez pip". Maintenant, je me demande pourquoi j'ai dit ça ...
Daniel Roseman
21
Je rencontre toujours des packages qui provoquent l'échec de pip mais easy_install gère très bien, donc je suis également curieux de savoir cela.
kwatford
5
pyobjc-core est un exemple de package qui fonctionne avec easy_install mais pas avec pip.
Marc Abramowitz
5
Pour revenir à Python quatre ans plus tard, l'état de l'emballage est au-delà de tout foiré. Nous sommes en 2014 et ça n'a fait qu'empirer. D'après ce que je comprends, les distuils absorbés par setuptools, même si les documents officiels en python ne le savent pas, mais aucun ne fera partie de python 3 , et pip traîne comme une troisième roue (jeu de mots).
Andriy Drozdyuk
3
@drozzy: Il vous est arrivé de revenir au pire moment possible - juste après qu'un groupe de développeurs principaux ait décidé que les choses étaient devenues un tel gâchis qu'ils devaient s'impliquer dans la résolution du problème. setuptoolsne fait pas partie de Python 3 parce que pipc'est le cas, et c'est la seule partie dont les utilisateurs finaux ont besoin. (Et les développeurs qui veulent distribuer sur PyPI peuvent évidemment pip install setuptools, et tout ce qu'ils peuvent vouloir.)
abarnert

Réponses:

304

Beaucoup de réponses ici sont obsolètes pour 2015 (bien que celle initialement acceptée de Daniel Roseman ne le soit pas). Voici l'état actuel des choses:

  • Les packages binaires sont désormais distribués sous forme de roues ( .whlfichiers) - non seulement sur PyPI, mais dans des référentiels tiers comme les packages d'extension de Christoph Gohlke pour Windows . pippeut gérer les roues; easy_installne peux pas.
  • Les environnements virtuels (qui sont intégrés avec 3.4, ou peuvent être ajoutés à 2.6 + / 3.1 + avec virtualenv) sont devenus un outil très important et important (et recommandé dans les documents officiels ); ils incluent piphors de la boîte, mais ne fonctionnent même pas correctement avec easy_install.
  • Le distributepackage inclus easy_installn'est plus maintenu. Ses améliorations ont setuptoolsété fusionnées setuptools. Essayer d'installer distributene fera qu'installer à la setuptoolsplace.
  • easy_install elle-même n'est que quasi-maintenue.
  • Tous les cas où pipauparavant étaient inférieurs à - l' easy_installinstallation à partir d'une arborescence source non compressée, d'un dépôt DVCS, etc. - sont révolus depuis longtemps; vous pouvez pip install ., pip install git+https://.
  • pipest livré avec les packages officiels Python 2.7 et 3.4+ de python.org, et un pipbootstrap est inclus par défaut si vous construisez à partir des sources.
  • Les divers morceaux incomplets de documentation sur l'installation, l'utilisation et la construction de packages ont été remplacés par le Guide de l'utilisateur de Python Packaging . La propre documentation de Python sur l' installation des modules Python renvoie maintenant à ce guide de l'utilisateur et appelle explicitement pip"le programme d'installation préféré".
  • D'autres nouvelles fonctionnalités ont été ajoutées au pipfil des ans et ne seront jamais disponibles easy_install. Par exemple, pipil est facile de cloner vos packages de site en créant un fichier d'exigences, puis en l'installant avec une seule commande de chaque côté. Ou pour convertir votre fichier d'exigences en un référentiel local à utiliser pour le développement en interne. Etc.

La seule bonne raison que je sache utiliser easy_installen 2015 est le cas particulier de l'utilisation des versions Python préinstallées d'Apple avec OS X 10.5-10.8. Depuis 10.5, Apple a inclus easy_install, mais à partir de 10.10 ils ne comprennent toujours pas pip. Avec 10.9+, vous devriez toujours utiliser get-pip.py, mais pour 10.5-10.8, cela a quelques problèmes, donc c'est plus facile sudo easy_install pip. (En général, easy_install pipc'est une mauvaise idée; ce n'est que pour OS X 10.5-10.8 que vous voulez faire cela.) De plus, 10.5-10.8 inclut readlined'une manière qui easy_installsait se déplacer mais pippas, donc vous voulez aussi sudo easy_install readlinesi vous voulez mettre à jour cela.

abarnert
la source
9
@drozzy: Peut-être. Mais considérez que dans 5 ans, ma réponse sera aussi obsolète que toutes les autres, tandis que celle de Daniel Roseman est intemporelle. De plus, ma réponse ne serait pas aussi bonne si elle ne pouvait pas s'appuyer sur une réponse acceptée de 5 ans qui démontre pourquoi la communauté Python a pris du retard pipdans l'intervalle.
abarnert
2
Il convient de noter que certaines versions de pip emballées étaient boguées et que pip n'a pas réussi à se mettre à niveau. Que vous le jugiez ironique ou non, dans ces cas, la solution la plus simple est de faire easy_install -U pipou easy_install3 -U pip.
analytik
"mais ne fonctionnent même pas correctement avec easy_install" Ce n'était pas mon expérience, même si je n'ai pas essayé depuis un certain temps depuis que les roues dominent maintenant. Mais les binaires de Christoph Gohlke étaient auparavant distribués sous forme d'oeufs exécutables. Faire appel easy_installà eux était le seul moyen de faire installer ces packages dans un environnement virtuel, et cela ne m'a jamais causé de brûlures d'estomac. De quelle manière ne easy_installfonctionne plus avec les envs virtuels?
jpmc26
599

De l' introduction de Ian Bicking à pip :

pip a été écrit à l'origine pour améliorer easy_install des manières suivantes

  • Tous les packages sont téléchargés avant l'installation. Une installation partiellement terminée ne se produit donc pas.
  • On prend soin de présenter une sortie utile sur la console.
  • Les raisons des actions sont enregistrées. Par exemple, si un paquet est en cours d'installation, pip conserve la raison pour laquelle ce paquet était requis.
  • Les messages d'erreur devraient être utiles.
  • Le code est relativement concis et cohérent, ce qui le rend plus facile à utiliser par programme.
  • Les packages ne doivent pas être installés en tant qu'archives d'oeufs, ils peuvent être installés à plat (tout en conservant les métadonnées d'oeuf).
  • Prise en charge native d'autres systèmes de contrôle de version (Git, Mercurial et Bazaar)
  • Désinstallation des packages.
  • Simple à définir des ensembles d'exigences fixes et à reproduire de manière fiable un ensemble de packages.
Daniel Roseman
la source
63
L'avantage des "messages d'erreur" est énorme, en particulier pour les nouveaux utilisateurs. Easy-install est célèbre pour avoir craché des dizaines de ce qui ressemble à des erreurs fatales, seulement pour avoir fini l'installation avec succès de toute façon, ce qui rend son utilisation difficile jusqu'à ce que vous appreniez à ignorer presque tout ce qu'il dit. Pip omet simplement de dire ces choses en premier lieu.
Brandon Rhodes
1
@Glyph est - il un avantage en utilisant easy_install pipplus sudo apt-get install python-pip?
Dennis
2
N'utilisez pas easy_install en dehors d'un virtualenv sur les distributions basées sur des packages: workaround.org/easy-install-debian
Federico
11
@Dennis: Lors de l'utilisation d' sudo apt-getUbuntu / Debian, les packages Python seront installés dans ou /usr/lib/python/dist-packagesalors ils s'installeront dans et malheureusement les packages Debian / Ubuntu ont souvent des noms différents avec lesquels pip n'est pas familier. La meilleure solution à mon humble avis est d'utiliser virtualenv et d'y installer vos packages. sudo pipsudo easy_install/local/lib/python/site-packagespip
Mark Mikofski
2
Cela nécessite une mise à jour.
Andriy Drozdyuk
248

Une autre raison - pour l'instant non mentionnée - de favoriser le pip est parce que c'est la nouvelle chaleur et continuera d'être utilisée à l'avenir.

L'infographie ci-dessous - de la section État actuel de l'emballage dans le Guide de l'auto-stoppeur de l'emballage v1.0 - montre que setuptools / easy_install disparaîtra à l'avenir.

entrez la description de l'image ici

Voici une autre infographie de la documentation de distribution montrant que Setuptools et easy_install seront remplacés par la nouvelle hotness - distribution et pip . Alors que pip est toujours la nouvelle nouveauté, Distribute a fusionné avec Setuptools en 2013 avec la sortie de Setuptools v0.7 .

entrez la description de l'image ici

Matthew Rankin
la source
47
Infographie FTW
WineSoaked
34
OTOH, le deuxième graphique est dépassé depuis un an. distrib atteindra la fin de vie et sera remplacé par distutils2 (qui sera également dans la bibliothèque standard Python à partir de la 3.3). Un programme d'installation de base nommé pysetup est fourni en tant que pièce ou distutils2, et pip continuera à fournir des fonctionnalités supplémentaires au-dessus de distutils2 à l'avenir.
Éric Araujo
7
omg merci beaucoup. Je suis confus par le packaging python depuis des années et il est réconfortant de voir une voie semi-autoritaire pour aller de l'avant.
aaron
21
Cette "réponse" est tellement obsolète et juste fausse, ce n'est même pas drôle.
seulement le
172

Deux raisons, il peut y en avoir plus:

  1. pip fournit une uninstallcommande

  2. si une installation échoue au milieu, pip vous laissera dans un état propre.

Ned Batchelder
la source
1
Tout comme setuptoools maintenant. Euh ... en quelque sorte. pythonhosted.org/setuptools/…
Andriy Drozdyuk
116

Fichiers EXIGENCES.

Sérieusement, je l'utilise tous les jours avec virtualenv.


TUTORIEL DE GESTION RAPIDE DES DÉPENDANCES, PERSONNES

Les fichiers d'exigences vous permettent de créer un instantané de tous les packages qui ont été installés via pip. En encapsulant ces packages dans un environnement virtuel, vous pouvez faire fonctionner votre base de code sur un ensemble très spécifique de packages et partager cette base de code avec d'autres.

De la documentation de Heroku https://devcenter.heroku.com/articles/python

Vous créez un environnement virtuel et configurez votre shell pour l'utiliser. (instructions bash / * nix)

virtualenv env
source env/bin/activate

Désormais, tous les scripts python exécutés avec ce shell utiliseront les packages et la configuration de cet environnement. Vous pouvez maintenant installer un package localement dans cet environnement sans avoir besoin de l'installer globalement sur votre machine.

pip install flask

Vous pouvez maintenant vider les informations sur les packages installés avec

pip freeze > requirements.txt

Si vous avez vérifié ce fichier dans le contrôle de version, quand quelqu'un d'autre obtient votre code, il peut configurer son propre environnement virtuel et installer toutes les dépendances avec:

pip install -r requirements.txt

Chaque fois que vous pouvez automatiser l'ennui comme ça, c'est génial.

Matthew Schinckel
la source
1
Cela semble aussi faire partie de setuptools maintenant: pythonhosted.org/setuptools/…
Andriy Drozdyuk
vous devez utiliser pipreqspour obtenir le fichier requirements.txt. Il ne donnera que les bibliothèques liées au projet où vous appelez pipreqs, de sorte que requirements.txt sera basé sur le projet et non sur virtualenv.
SeF
83

pip n'installera pas de paquets binaires et n'est pas bien testé sur Windows.

Comme Windows ne vient pas avec un compilateur par défaut, pip ne peut souvent pas être utilisé là-bas. easy_install peut installer des packages binaires pour Windows.

fuzzyman
la source
3
Intéressant, je n'y ai jamais pensé. pip ne supporte pas non plus les fonctionnalités "extras" de setuptools qui sont utilisées par les gens de Zope au moins.
Sridhar Ratnakumar
1
Est-ce une indication d'avoir besoin d'un environnement gcc sur Windows, plutôt que d'insister sur le fait que pip installe des binaires pré-construits?
WineSoaked
18
Le "bon" compilateur à utiliser pour Windows est Visual Studio (2008 je crois pour les versions récentes de Python). L'installation, même la version gratuite, est un problème. La façon normale d'installer des extensions C sur Windows est à partir de binaires précompilés. easy_install le supporte, pip non.
fuzzyman
8
C'est la raison principale pour laquelle j'utilise toujours easy_install.
Randy Syring du
14
Dans les années qui ont suivi la réponse ci-dessus, il n'est plus vrai que pip ne puisse pas installer de packages binaires, sur Windows ou sur d'autres plates-formes. Le wheelformat de distribution binaire rend cela possible. De nombreux packages tiers avec des modules d'extension C sont désormais également distribués sous forme de roues conçues pour diverses plates-formes et pip peut les installer automatiquement. Voir, par exemple, pythonwheels.com
Ned Deily
76

MISE À JOUR: setuptoolsa absorbé distributepar opposition à l'inverse, comme certains le pensaient. setuptoolsest à jour avec les dernières distutilsmodifications et le format de roue. Par conséquent, easy_installet pipsont plus ou moins sur un pied d'égalité maintenant.

Source: http://pythonhosted.org/setuptools/merge-faq.html#why-setuptools-and-not-distribute-or-another-name

user3341691
la source
5
Pourquoi n'est-ce pas plus voté? Les réponses sont tellement dépassées!
Andriy Drozdyuk
5
oui, les meilleures réponses sont extrêmement obsolètes
WKordos
2
Par conséquent, easy_install et pip sont plus ou moins sur un pied d'égalité maintenant. C'est absurde. easy_installc'est toujours ce que ça fait depuis longtemps et pip l'améliore énormément. easy_installest juste une partie setuptoolset sans doute l'un des pires, c'est pourquoi pip vise à le remplacer.
Piotr Dobrogost
25

En complément de la réponse de Fuzzyman:

pip n'installera pas de paquets binaires et n'est pas bien testé sur Windows.

Comme Windows ne vient pas avec un compilateur par défaut, pip ne peut souvent pas être utilisé là-bas. easy_install peut installer des packages binaires pour Windows.

Voici une astuce sur Windows:

  • vous pouvez utiliser easy_install <package>pour installer des packages binaires pour éviter de construire un binaire

  • vous pouvez utiliser pip uninstall <package>même si vous avez utilisé easy_install.

Ceci est juste une solution de contournement qui fonctionne pour moi sur Windows. En fait, j'utilise toujours pip si aucun binaire n'est impliqué.

Voir le pip doku actuel: http://www.pip-installer.org/en/latest/other-tools.html#pip-compared-to-easy-install

Je demanderai sur la liste de diffusion ce qui est prévu pour cela.

Voici la dernière mise à jour:

La nouvelle façon prise en charge pour installer les binaires va être wheel! Ce n'est pas encore dans la norme, mais presque. La version actuelle est toujours un alpha: 1.0.0a1

https://pypi.python.org/pypi/wheel

http://wheel.readthedocs.org/en/latest/

Je vais tester wheelen créant un programme d'installation OS X à PySideutiliser à la wheelplace des œufs. Je reviendrai et ferai un rapport à ce sujet.

cheers - Chris

Une mise à jour rapide:

La transition vers wheelest presque terminée. La plupart des packages prennent en charge wheel.

J'ai promis de construire des roues pour PySide, et je l'ai fait l'été dernier. Fonctionne très bien!

CONSEIL: Quelques développeurs n'ont pas réussi jusqu'à présent à prendre en charge le format de roue, simplement parce qu'ils oublient de le remplacer distutilspar setuptools. Souvent, il est facile de convertir de tels packages en remplaçant ce seul mot dans setup.py.

Christian Tismer
la source
2
mis à jour ci-dessus - je pense que l'attente est presque terminée ;-)
Christian Tismer
Je devrais mettre à jour cela, encore une fois, parce que la roue est devenue la norme au printemps 2014. En fait, je pense que ces anciens fils ne devraient pas être modifiés à l'infini, car - les anciennes réponses étaient assez bonnes - il est facile de tout remplacer lorsque la réalité change. Mais est-ce juste, lorsque la raison initiale d'une question a disparu?
Christian Tismer
3

Je viens de rencontrer un cas spécial que j'ai dû utiliser à la easy_installplace pip, ou je dois tirer directement les codes source.

Pour le package GitPython, la version de pipest trop ancienne, ce qui est le cas 0.1.7, tandis que celle de easy_installest la plus récente 0.3.2.rc1.

J'utilise Python 2.7.8. Je ne suis pas sûr du mécanisme de calque sous-jacent de easy_installet pip, mais au moins les versions de certains packages peuvent être différentes les unes des autres, et c'est parfois easy_installcelle avec une version plus récente.

easy_install GitPython
Landys
la source
6
J'ai vérifié cela maintenant (voir horodatage), et ce n'est plus vrai: pip et easy_install ont fonctionné de la même manière, ce qui donne GitPython 0.3.5 aujourd'hui. (Testé sur OS X Yosemite, uniquement). Quelle est votre plateforme? Veuillez mettre à jour votre entrée car elle est maintenant trompeuse.
Christian Tismer