Différence entre 'python setup.py install' et 'pip install'

105

J'ai un package externe que je veux installer dans mon python virtualenv à partir d'un fichier tar. Quelle est la meilleure façon d'installer le package?

J'ai découvert 2 façons de le faire:

  1. Extrayez le fichier tar, puis exécutez-le python setup.py installdans le répertoire extrait.
  2. pip install packagename.tar.gzà partir de l'exemple n ° 7 dans https://pip.pypa.io/en/stable/reference/pip_install/#examples

Est-ce qu'il y a une différence en les faisant de ces 2 façons.

user2125465
la source
5
Utilisez pip. Vous pouvez désinstaller des packages avec.
Blender
"De la source" comme dans "VCS checkout", ou comme dans sdist?
Ce qui est «meilleur» dépend de vos besoins! Avez-vous essayé l'une de ces solutions et avez-vous échoué en manquant d'une manière ou d'une autre? Ou demandez - vous ce que la différence est entre ces deux approches?
Martin Atkins
Sur fedora, par exemple, en utilisant yum.
perreal

Réponses:

109

En apparence, les deux font la même chose: faire l'un python setup.py installou l' autre ou pip install <PACKAGE-NAME>installer votre paquet python pour vous, avec un minimum de tracas.

Cependant, l'utilisation de pip offre des avantages supplémentaires qui le rendent beaucoup plus agréable à utiliser.

  • pip téléchargera automatiquement toutes les dépendances pour un package pour vous. En revanche, si vous utilisez setup.py, vous devez souvent rechercher et télécharger manuellement les dépendances, ce qui est fastidieux et peut devenir frustrant.
  • pip garde la trace de diverses métadonnées qui vous permettent de désinstaller et de mettre à jour facilement les packages avec une seule commande: pip uninstall <PACKAGE-NAME>et pip install --upgrade <PACKAGE-NAME>. En revanche, si vous installez un package à l'aide de setup.py, vous devez supprimer et maintenir manuellement un package si vous souhaitez vous en débarrasser, ce qui pourrait être source d'erreurs.
  • Vous n'avez plus besoin de télécharger manuellement vos fichiers. Si vous utilisez setup.py, vous devez visiter le site Web de la bibliothèque, déterminer où le télécharger, extraire le fichier, exécuter setup.py... En revanche, pip recherchera automatiquement l' index du package Python (PyPi) pour voir si le package existe, et téléchargera, extraira et installera automatiquement le package pour vous. À quelques exceptions près, presque toutes les bibliothèques Python vraiment utiles peuvent être trouvées sur PyPi.
  • pip vous permettra d' installer facilement des roues, qui est le nouveau standard de la distribution Python. Plus d'informations sur les roues .
  • pip offre des avantages supplémentaires qui s'intègrent bien avec using virtualenv, qui est un programme qui vous permet d'exécuter plusieurs projets nécessitant des bibliothèques et des versions Python en conflit sur votre ordinateur. Plus d'infos .
  • pip est fourni par défaut avec Python à partir de Python 2.7.9 sur la série Python 2.x et à partir de Python 3.4.0 sur la série Python 3.x, ce qui le rend encore plus facile à utiliser.

Donc, en gros, utilisez pip. Il n'offre que des améliorations par rapport à l'utilisation python setup.py install.


Si vous utilisez une ancienne version de Python, que vous ne pouvez pas mettre à niveau et que vous n'avez pas installé pip, vous pouvez trouver plus d'informations sur l'installation de pip sur les liens suivants:

pip, en lui-même, ne nécessite pas vraiment de tutoriel. 90% du temps, la seule commande dont vous avez vraiment besoin est pip install <PACKAGE-NAME>. Cela dit, si vous souhaitez en savoir plus sur les détails de ce que vous pouvez faire exactement avec pip, consultez:

Il est également généralement recommandé d'utiliser pip et virtualenv ensemble. Si vous êtes un débutant en Python, je pense personnellement que ce serait bien de commencer par simplement utiliser pip et d'installer des packages à l'échelle mondiale, mais finalement je pense que vous devriez passer à l'utilisation de virtualenv lorsque vous vous attaquez à des projets plus sérieux.

Si vous souhaitez en savoir plus sur l'utilisation conjointe de pip et virtualenv, consultez:

Michael0x2a
la source
1
Pip install appelle-t-il en interne le fichier setup.py?
variable du
@variable, pip install à partir de "roues", packages pré-compilés, ne le fait pas, pip install à partir de la source le fait: voir pip install build interface du système
denis
D'après mon expérience, python setup.py installtélécharge et installe également des dépendances. Est-ce un changement depuis que vous avez écrit cette réponse en 2013?
Ken Williams le
19

python setup.py installest l'analogue de make install: c'est un moyen limité de compiler et de copier des fichiers dans les répertoires de destination. Cela ne veut pas dire que c'est la meilleure façon d'installer réellement un logiciel sur votre système.

pipest un gestionnaire de paquets, qui peut installer, mettre à jour, lister et désinstaller des paquets, comme les gestionnaires de paquets familiers, y compris: dpkg, apt, yum, urpmi, portsetc. Sous le capot, il fonctionnera python setup.py install, mais avec des options spécifiques pour contrôler comment et où les choses finissent installées.

En résumé: utilisation pip.

Éric Araujo
la source
2

La question porte sur la méthode préférée pour installer une archive tar locale contenant un package python, PAS sur l'avantage de télécharger un package vers un service d'indexation comme PyPi.

Pour ne pas savoir que certains distributeurs de logiciels ne téléchargent pas leur package sur PyPi, demandant à la place aux développeurs de télécharger le package à partir de leur site Web et de l'installer.

installation de python setup.py

Cela peut fonctionner mais n'est pas recommandé. Il n'est pas nécessaire de dérouler le fichier tarball et d'y accéder pour exécuter le fichier setup.py.

pip install ../path/to/packagename.tar.gz

C'est la manière conçue et préférée. Concis et aligné avec les packages de style PyPi.

Plus d'informations sur pip installpeuvent être trouvées ici: https://pip.readthedocs.io/en/stable/reference/pip_install/

champ
la source
Pouvons-nous utiliser pip install -e?
variable du