web-dev-qa-db-fra.com

Est-ce que Python a un système de gestion de paquet/module?

Python a-t-il un système de gestion de paquets/modules, similaire à Ruby avec Rubygems où vous pouvez faire gem install packagename?

Sur Installation de modules Python, je ne vois que des références à python setup.py install, mais cela nécessite que vous trouviez d'abord le paquet.

139
tommy chheng

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 facto de Python. Vous pouvez installer un paquet comme ceci:

pip install httpie

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

Cependant, il reste un certain nombre de frustrations exceptionnelles liées à l'expérience de l'empaquetage Python. Cumulativement, ils rendent Python très peu accueillant pour les débutants. En outre, la longue histoire de négligence (c’est-à-dire le fait de ne pas expédier avec un gestionnaire de paquets pendant 14 ans de Python 2.0 à Python 3.3) a porté préjudice à la communauté. Je décris les deux ci-dessous.

Frustrations exceptionnelles

Il est important de comprendre que, même si des utilisateurs expérimentés sont en mesure de contourner ces frustrations, ils constituent un obstacle important pour les débutants en Python. En fait, la difficulté et le désagrément général des utilisateurs risquent de dissuader beaucoup d’entre eux. 

Le site Web de PyPI est contre-utile

Chaque langue avec un gestionnaire de paquets dispose d'un référentiel officiel (ou quasi officiel) permettant à la communauté de télécharger et de publier des packages. Python dispose de l'index de package Python, PyPI. _ { https://pypi.python.org/pypi } _ 

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

  1. _ { https://rubygems.org/gems/Rails Page RubyGems pour le paquetage Rails 
  2. _ { https://www.npmjs.org/package/express Page Npm pour le paquetage express
  3. _ { https://pypi.python.org/pypi/simplejson/ page PyPI du paquetage simplejson

Vous verrez que les pages RubyGems et Npm commencent toutes les deux par une description en une ligne du paquet, puis par de grandes instructions conviviales pour son installation.

Pendant ce temps, malheur à tout malheureux utilisateur de Python qui navigue naïvement vers PyPI. Sur https://pypi.python.org/pypi/simplejson/ , ils ne trouveront aucune instruction utile. Il existe cependant un grand lien vert "Télécharger". Ce n'est pas déraisonnable de le suivre. Aha, ils cliquent! Leur navigateur télécharge un fichier .tar.gz. De nombreux utilisateurs Windows ne peuvent même pas l'ouvrir, mais s'ils persévèrent, ils peuvent éventuellement l'extraire, puis exécuter setup.py et éventuellement à l'aide de Google setup.py install. Certains vont abandonner et réinventer la roue. 

Bien sûr, tout cela est faux. Le moyen le plus simple d'installer un paquet est d'utiliser une commande Pip. Mais PyPI n'a même pas mentionné Pip. Au lieu de cela, il les conduisit 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

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

Pour 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 des outils de compilation ou télécharger le DevKit à partir de http://rubyinstaller.org/downloads et suivez les instructions présentées à http://github.com/oneclick/rubyinstaller/wiki/ Kit de développement

Publier des paquets est difficile

Ruby et Nodejs sont accompagnés de gestionnaires de paquets complets, Gem (depuis 2007) et Npm (depuis 2011), et ont nourri des communautés de partage centrées sur GitHub. Npm rend publication des packages aussi simple que de les installer, il dispose déjà de paquets 64k . Les listes RubyGems paquets de 72k . Le vénérable index du package Python répertorie seulement 41 Ko .

L'histoire

Volant en face de sa devise " piles incluses }", Python a été expédié sans gestionnaire de paquets jusqu'en 2014. 

Jusqu'à Pip, le standard de facto était une commande easy_install. C'était lamentablement insuffisant. Il n'y avait pas de commande pour désinstaller les packages.

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

209
Colonel Panic

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

  • Pour installer un paquet: pip install MyProject
  • Pour mettre à jour un paquet pip install --upgrade MyProject
  • Pour réparer une version d'un paquet pip install MyProject==1.0

Vous pouvez installer le gestionnaire de paquets comme suit:

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

Références:

64
Thomas Bratt

Et juste pour faire contraste, il y a aussi pip .

63

En tant que développeur Ruby and Perl et formateur Learning-Python, je n'ai pas trouvé que easy_install ou pip était équivalent à RubyGems ou à CPAN. 

J'ai tendance à laisser mes systèmes de développement exécuter les dernières versions des modules à mesure que les développeurs les mettent à jour et à geler mes systèmes de production à des versions définies. RubyGems et CPAN facilitent la recherche de modules en répertoriant ce qui est disponible, puis en installant et en les mettant à jour ultérieurement individuellement ou en bloc si vous le souhaitez.

easy_install et pip facilitent l'installation d'un module UNE FOIS que je l'ai localisé via une recherche dans le navigateur ou appris à le connaître par un autre moyen, mais ils ne me disent 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 ni ne mettront tout à jour en bloc si je le souhaite.

Donc, les fonctionnalités de base sont présentes dans pip et easy_install, mais il manque certaines fonctionnalités que j'aimerais voir qui les rendraient plus conviviales et plus faciles à utiliser et à égalité avec CPAN et RubyGems.

21
the Tin Man

Il y a au moins deux, easy_install et son successeur pip .

13
Wolph

À partir de la fin de 2014 au moins, la distribution de Anaconda de Continuum Analytics _ Python avec le gestionnaire de packages conda doit être prise en compte. Il résout la plupart des problèmes graves rencontrés par les utilisateurs de Python en général (gestion de 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 vouloir avec Python sans avoir à changer le système. 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 peut ne pas être la version souhaitée), ou bien compiler à partir du code source . Anaconda rend ce processus complet en un clic, tout en ajoutant de nombreuses autres fonctionnalités.

11
anderspitman

Ce serait easy_install .

6
Kirk Strauser

C'est ce qu'on appelle setuptools. Vous l'exécutez avec la commande "easy_install".

Vous pouvez trouver le répertoire à http://pypi.python.org/

6
Chris Long

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

choco install python

Ouvrez une nouvelle fenêtre cmd avec le PATH mis à jour. Ensuite, faites

choco install pip

Après cela, vous pouvez

pip install pyside
pip install ipython
...
4
hansvb

Je ne vois pas non plus MacPorts ou Homebrew mentionnés dans d’autres réponses ici, mais comme je les vois mentionnés ailleurs dans Stack Overflow pour des questions connexes, je vais ajouter mon propre dollar US (0,02 dollar US) que beaucoup de gens semblent à considérer MacPorts comme non seulement un gestionnaire de paquets pour les paquets en général (à ce jour, ils répertorient 16311 paquets/ports, 2931 correspondants à "python", bien que seulement pour les Mac), mais aussi comme un paquet décent (peut-être meilleur) gestionnaire pour les packages/modules Python:

Question

"... quelle est la méthode utilisée par les développeurs Mac pour gérer leurs modules?"

Réponses

SciPy

"Les Macs (contrairement à Linux) ne viennent pas avec un gestionnaire de paquets, mais il existe quelques gestionnaires de paquets populaires que vous pouvez installer . Macports ..."

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

4
Osteoboon

Puisque personne n’a mentionné pipenv ici, je voudrais décrire mon point de vue sur la raison pour laquelle tout le monde devrait l’utiliser pour la gestion des paquets python.

Comme @ColonelPanic l'a mentionné, il existe plusieurs problèmes avec les index Python Package Index et avec pip et virtualenv .

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

Caractéristiques 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 différentes versions python/versions de package pour différents projets.

  • Permet des constructions réellement déterministes, tout en spécifiant facilement ce que vous voulez.
  • Génère et vérifie les hachages de fichiers pour les dépendances verrouillées.
  • Installer automatiquement les Pythons requis, si pyenv est disponible.
  • Trouve automatiquement votre projet à la maison, de manière récursive, en recherchant un fichier Pipfile.
  • Génère automatiquement un fichier pipfile, s’il n’en existe pas.
  • Crée automatiquement une virtualenv dans un emplacement standard.
  • Ajoute/supprime automatiquement les paquetages à un fichier Pipfile lorsqu'ils ne sont pas/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 grandement la gestion des paquets. 

Autres commandes

  • check vérifie les vulnérabilités de sécurité et affirme que les conditions requises pour PEP 508 sont respectées par l'environnement actuel. (ce qui, à mon avis, est une fonctionnalité intéressante, surtout après cela - Colis malveillants sur PyPi)
  • graph vous montrera un graphe de dépendance, de vos dépendances installées.

Vous pouvez en lire plus ici - Pipenv .

Installation

Vous pouvez trouver la documentation d'installation ici

P.S .: Si vous aimiez travailler avec le paquet Python request , vous seriez heureux de savoir que pipenv est du même développeur Kenneth Reitz

3
Vaulstein

Poésie est ce que vous cherchez. Il s’occupe de la gestion des dépendances, des environnements virtuels, de l’exécution.

0
0x32e0edfb

En 2019 Poésie est le gestionnaire de paquets et de dépendances que vous recherchez.

https://github.com/sdispater/poetry#why

C'est moderne, simple et fiable.

0
gagarine