pip ou pip3 pour installer des packages pour Python 3?

121

J'ai un Macbook avec OS X El Captain. Je pense que cela Python 2.7est préinstallé dessus. Cependant, je l'ai installé Python 3.5aussi. Quand j'ai commencé à utiliser Python 3, j'ai lu que si je veux installer un package, je devrais taper:

pip3 install some_package

Bref, maintenant quand j'utilise

pip install some_package

Je suis some_packageinstallé pour Python 3. Je veux dire que je peux l'importer et l'utiliser sans problème. De plus, lorsque je tape juste pip3dedans Terminal, j'ai ce message sur l'utilisation:

Usage:   
  pip <command> [options]

qui est le même message que je reçois lorsque je tape juste pip.

Cela signifie-t-il que dans les versions précédentes, les choses étaient différentes, et maintenant pipet pip3peuvent être utilisées de manière interchangeable? Si c'est le cas, et pour des raisons d'argumentation, comment puis-je installer des packages pour Python 2au lieu de Python 3?

Ammar Alyousfi
la source

Réponses:

74

Votre pipest un lien logiciel vers le même chemin de fichier exécutable avec pip3. vous pouvez utiliser les commandes ci-dessous pour vérifier où se trouvent vos chemins pipet vos pip3chemins réels:

$ ls -l `which pip`
$ ls -l `which pip3`

Vous pouvez également utiliser les commandes ci-dessous pour en savoir plus:

$ pip show pip
$ pip3 show pip

Lorsque nous installons différentes versions de python, nous pouvons créer de tels liens souples vers

  • définir le pip par défaut sur une version.
  • créer des liens différents pour différentes versions.

Il est de la même situation python, python2,python3

Plus d'informations ci-dessous si vous souhaitez savoir comment cela se passe dans différents cas:

CSJ
la source
1
Je pense que cela est faux. Mon pip3 s'appelle également juste pip dans sa sortie d'aide, encore, plain pip installe les packages Python 2 sur mon système. Je pense que stackoverflow.com/a/40832677/188108 est correct, au moins il est d'accord avec mes observations.
Torsten Bronger
cela change sur quel environnement et comment vous installez python, cette réponse est de donner des indices sur la façon de savoir comment pip fonctionne et de répondre à la situation de l'interrogateur. si ce n'est pas la même chose sur votre système, vous pouvez toujours utiliser la même méthode pour savoir pourquoi. ne veut pas dire que c'est une mauvaise réponse.
CSJ
1
Je doute que. Je n'ai pas de Mac mais sur les saveurs Ubuntu que j'ai testées, les variantes de pip ne sont pas des liens symboliques. Au lieu de cela, ce sont de minuscules scripts Python qui ne diffèrent que par la ligne shebang.
Torsten Bronger
oui, c'est ce que je veux dire, cela change sur l'environnement et la façon dont vous installez python (brew, apt, pyenv, compilez manuellement, etc.) et à la situation de l'interrogateur, c'est parce que ce sont des liens souples, et nous utilisons ls -let pip showpour vérifier la raison. et bien sûr, cette réponse est de répondre à sa question.
CSJ
Je ne pense pas qu'il y avait des liens symboliques sur l'ordinateur de l'interrogateur. Je ne trouve aucune référence à ce que pip ait jamais travaillé / fonctionne de cette façon.
Torsten Bronger
26

Si vous aviez python 2.x puis installé python3, votre pip pointera vers pip3. vous pouvez le vérifier en tapant pip --versionce qui serait le même que pip3 --version.

Sur votre système, vous avez maintenant pip, pip2 et pip3 .

Si vous le souhaitez, vous pouvez modifier pip pour qu'il pointe vers pip2 au lieu de pip3.

Apadana
la source
1
comment changer cela
ahnbizcad
3
@ahnbizcad Le moyen le plus simple est de définir un alias comme celui-ci: alias pip = "pip3"
apadana
2
Je l'ai fait, mais mon pip3 était v9 quand pip était v10, alors j'ai tapé pip3 install --upgrade pipet il a fait les deux v10
Kevin Danikowski
2
Cette réponse est fausse. pip ne pointera pas vers pip3. pip installera les packages Python 2 et pip3 installera les packages Python 3. Testé sur Lubuntu 18.10.
Torsten Bronger
@TorstenBronger quel était l'ordre des installations python dans votre environnement?
apadana le
14

Lorsque vous installez python3, pip3est installé. Et si vous n'avez pas d'autre installation python (comme python2.7), un lien est créé qui pointe pipvers pip3.

Il en pipva de même pour un lien verspip3 s'il n'y a pas d'autre version de python installée (autre que python3). pippointe généralement vers la première installation.

Ani Menon
la source
7

C'est un sujet délicat. En fin de compte, si vous l'invoquez, pipil invoquera soit pip2ou pip3, selon la façon dont vous avez configuré votre système.

Max Uppenkamp
la source
6

Par illustration:

pip --version
  pip 19.0.3 from /usr/lib/python3.7/site-packages/pip (python 3.7)

pip3 --version
  pip 19.0.3 from /usr/lib/python3.7/site-packages/pip (python 3.7)

python --version
  Python 3.7.3

which python
  /usr/bin/python

ls -l '/usr/bin/python'
  lrwxrwxrwx 1 root root 7 Mar 26 14:43 /usr/bin/python -> python3

which python3
  /usr/bin/python3

ls -l /usr/bin/python3
  lrwxrwxrwx 1 root root 9 Mar 26 14:43 /usr/bin/python3 -> python3.7

ls -l /usr/bin/python3.7
  -rwxr-xr-x 2 root root 14120 Mar 26 14:43 /usr/bin/python3.7

Ainsi, mon python dans mon système par défaut (Python 3.7.3) pip est pip3 .

Victoria Stuart
la source
5

Je pense pip, pip2et pip3ne sont pas des liens souples vers le même chemin de fichier exécutable. Notez ces commandes et résultats dans mon terminal linux:

mrz@mrz-pc ~ $ ls -l `which pip`
-rwxr-xr-x 1 root root 292 Nov 10  2016 /usr/bin/pip
mrz@mrz-pc ~ $ ls -l `which pip2`
-rwxr-xr-x 1 root root 283 Nov 10  2016 /usr/bin/pip2
mrz@mrz-pc ~ $ ls -l `which pip3`
-rwxr-xr-x 1 root root 293 Nov 10  2016 /usr/bin/pip3
mrz@mrz-pc ~ $ pip -V
pip 9.0.1 from /home/mrz/.local/lib/python2.7/site-packages (python 2.7)
mrz@mrz-pc ~ $ pip2 -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
mrz@mrz-pc ~ $ pip3 -V
pip 9.0.1 from /home/mrz/.local/lib/python3.5/site-packages (python 3.5)

Comme vous le voyez, ils existent dans des chemins différents.

pip3 fonctionne toujours uniquement sur l'environnement Python3, comme le fait pip2 avec Python2. pip fonctionne sur n'importe quel environnement approprié au contexte. Par exemple, si vous êtes dans un venv Python3, pip fonctionnera sur l'environnement Python3.

Mohammad Reza
la source
Je dirais qu'il est un peu trompeur de dire que pip est lié à tout environnement approprié au contexte. Dans le cas de venv, l'exécutable pip est spécifique au venv et non au système. Sauf si vous avez installé plusieurs versions de python dans le même venv, je ne vois pas ce problème se poser là-bas. Lorsque vous n'utilisez pas de venv, la version de pip utilisée est parfois peu intuitive et dépend de la configuration de votre système (souvent elle est déterminée par la version de python installée en premier, comme d'autres l'ont dit). Mais Pip n'a aucune intelligence qu'il utilise pour sélectionner une version dynamiquement
Luke Baumann
3

Si vous avez installé Python 2.7, je pense que vous pouvez utiliser pip2et pip2.7installer des packages spécifiquement pour Python 2, comme

pip2 install some_pacakge

ou

pip2.7 install some_package

Et vous pouvez utiliser pip3ou pip3.5installer des pacakges spécifiquement pour Python 3.

mikeqfu
la source
1

Sur mon instance Windows - et je ne comprends pas entièrement mon environnement - utiliser pip3 pour installer le package kaggle-cli a fonctionné - contrairement à pip. Je travaillais dans un environnement conda et les environnements semblent différents.

(fastai) C: \ Users \ redact \ Downloads \ fast.ai \ deeplearning1 \ nbs> pip --version

pip 9.0.1 de C: \ ProgramData \ Anaconda3 \ envs \ fastai \ lib \ site-packages (python 3.6)

(fastai) C: \ Users \ redact \ Downloads \ fast.ai \ deeplearning1 \ nbs> pip3 --version

pip 9.0.1 de c: \ users \ redact \ appdata \ local \ programs \ python \ python36 \ lib \ site-packages (python 3.6)

PM
la source
0

Étant donné un virtualenv Python 3.6 activé dans somepath / venv , les alias suivants ont résolu les différents problèmes sur un macOS Sierra où pip insistait pour pointer vers le Python 2.7 d'Apple.

alias pip='python somepath/venv/lib/python3.6/site-packages/pip/__main__.py'

Cela ne fonctionnait pas très bien quand je devais le faire sudo pipcar l'utilisateur root ne savait rien de mon alias ou de virtualenv, j'ai donc dû ajouter un alias supplémentaire pour gérer cela également. C'est un hack, mais ça marche, et je sais ce que ça fait:

alias sudopip='sudo somepath/venv/bin/python somepath/venv/lib/python3.6/site-packages/pip/__main__.py'

Contexte:

pip3 n'existait pas pour démarrer ( commande introuvable ) avec et which piprenverrait /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/pip , le Python d'Apple.

Python 3.6 a été installé via macports.

Après l'activation du virtualenv 3.6 avec lequel je voulais travailler, which pythonje retournerais somepath / venv / bin / python

D'une manière ou d'une autre, pip installferait la bonne chose et frapperait mon virtualenv, mais pip listferait exploser les paquets Python 2.7.

Pour Python, c'est bien en deçà de mes attentes en termes de convivialité pour les débutants.

JL Peyret
la source