web-dev-qa-db-fra.com

Pourquoi utiliser pip over easy_install?

A Tweet se lit comme suit:

N'utilisez pas easy_install, à moins que vous n'aimiez vous piquer au visage. Utilisez pip.

Pourquoi utiliser pip over easy_install? Le la faute incombe-t-il principalement à PyPI et aux auteurs de paquets ? Si un auteur télécharge un fichier tarball source (par exemple, des fichiers manquants, pas de fichier setup.py) dans PyPI, alors pip et easy_install échoueront. Hormis les différences esthétiques, pourquoi les personnes de Python (comme dans le Tweet ci-dessus) semblent-elles fortement favoriser pip par rapport à easy_install?

(Supposons que nous parlons d'easy_install du paquet Distribute, qui est maintenu par la communauté)

918
Sridhar Ratnakumar

De Ian Bicking's own introduction to 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. L’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 conservées. Par exemple, si un paquet est en cours d'installation, pip garde une trace de 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 facilite son utilisation par programmation.
  • Les paquets ne doivent pas nécessairement être installés en tant qu’archives Egg, ils peuvent être installés à plat (tout en conservant les métadonnées Egg).
  • Prise en charge native d'autres systèmes de contrôle de version (Git, Mercurial et Bazaar)
  • Désinstallation de packages.
  • Simple à définir des ensembles fixes d'exigences et à reproduire de manière fiable un ensemble de packages.
592
Daniel Roseman

Une autre raison - pour le moment non mentionnée - de privilégier pip est qu’elle est la nouvelle actualité et qu’elle continuera d’être utilisée à l’avenir.

L’infographie ci-dessous - tirée de la section Etat actuel de l’emballage dans le Le guide de l’auto-stoppeur v1. - montre que setuptools/easy_install disparaîtra à l’avenir.

enter image description here

Voici une autre infographie de documentation de distribution montrant que Setuptools et easy_install seront remplacés par le nouveau raccourci — distribution et pip . Alors que pip est toujours le nouveau point chaud, Distribuer a fusionné avec Setuptools en 2013 avec la sortie de Setuptools v0.7 .

enter image description here

244
Matthew Rankin

Deux raisons, il peut y avoir plus:

  1. pip fournit une commande uninstall

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

170
Ned Batchelder

EXIGENCES fichiers.

Sérieusement, j'utilise cela quotidiennement avec virtualenv.


TUTORIEL DE GESTION DE DÉPENDANCE RAPIDE, FOLKS

Les fichiers de conditions requises 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 travailler votre base de code sur un ensemble très spécifique de paquets 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 qu'il l'utilise. (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 à l'installer globalement sur votre ordinateur.

pip install flask

Maintenant, vous pouvez vider les informations sur les paquets installés avec

pip freeze > requirements.txt

Si vous avez coché ce fichier dans le contrôle de version, lorsque quelqu'un d'autre récupère 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 un ennui comme ça, c'est génial.

115
Matthew Schinckel

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

Comme Windows ne vient pas avec un compilateur par défaut pip souvent ne peut pas être utilisé ici. easy_install can installe les packages binaires pour Windows.

82
fuzzyman

UPDATE: setuptools a absorbé distribute contrairement à l’inverse, comme certains le pensaient. setuptools est à jour avec les dernières modifications distutils et le format de la roue. Par conséquent, easy_install et pip sont 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

74
user3341691

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

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

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

Voici un tour sous Windows:

  • vous pouvez utiliser easy_install <package> pour installer des paquets binaires afin d'éviter de construire un fichier 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 fichier binaire n'est impliqué.

Voir le doku actuel du pip: 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 d'installer les fichiers binaires va être wheelname__! 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 pour PySideen utilisant wheelà la place des œufs. Je reviendrai et rapporterai à ce sujet.

à la vôtre - Chris

Une mise à jour rapide:

La transition vers wheelest presque terminée. La plupart des paquets supportent wheelname__.

J'ai promis de construire des roues pour PySideet c'est ce que j'ai fait l'été dernier. Fonctionne très bien!

CONSEIL: Quelques développeurs ont jusqu'à présent échoué à prendre en charge le format de roue, simplement parce qu'ils oublient de remplacer distutilspar setuptoolsname__. Il est souvent facile de convertir de tels packages en remplaçant ce mot par setup.py.

24
Christian Tismer

Je viens tout juste de rencontrer un cas particulier dans lequel j'ai dû utiliser easy_install au lieu de pip, ou je dois extraire directement les codes sources.

Pour le package GitPython, la version de pip est trop ancienne, c'est-à-dire 0.1.7, tandis que celle de easy_install est la dernière, qui est 0.3.2.rc1.

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

easy_install GitPython
3
Landys