pip oder pip3, um Pakete für Python 3 zu installieren?

119

Ich habe ein Macbook mit OS X El Captain. Ich denke, Python 2.7das ist vorinstalliert. Allerdings habe ich auch installiert Python 3.5. Als ich anfing zu verwenden Python 3, las ich, dass ich Folgendes eingeben sollte, wenn ich ein Paket installieren möchte.

pip3 install some_package

Jedenfalls jetzt, wenn ich benutze

pip install some_package

Ich werde some_packageinstalliert für Python 3. Ich meine, ich kann es importieren und ohne Probleme verwenden. Außerdem, wenn ich nur geben pip3in Terminal, bekomme ich diese Meldung über die Nutzung:

Usage:   
  pip <command> [options]

Das ist die gleiche Nachricht, die ich bekomme, wenn ich nur tippe pip.

Bedeutet das, dass in früheren Versionen die Dinge anders waren und jetzt pipund pip3austauschbar verwendet werden können? Wenn ja, und aus Gründen der Argumentation, wie kann ich Pakete Python 2anstelle von installieren Python 3?

Ammar Alyousfi
quelle

Antworten:

73

Sie pipsind ein weicher Link zu demselben ausführbaren Dateipfad mit pip3. Mit den folgenden Befehlen können Sie überprüfen, wo sich Ihre pipund die pip3tatsächlichen Pfade befinden:

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

Sie können auch die folgenden Befehle verwenden, um weitere Details zu erfahren:

$ pip show pip
$ pip3 show pip

Wenn wir verschiedene Versionen von Python installieren, können wir solche Softlinks zu erstellen

  • Setze Standard-Pip auf eine Version.
  • Machen Sie verschiedene Links für verschiedene Versionen.

Es ist die gleiche Situation mit python, python2,python3

Weitere Informationen unten, wenn Sie daran interessiert sind, wie es in verschiedenen Fällen passiert:

CSJ
quelle
1
Ich denke das ist falsch. Mein pip3 nennt sich in seiner Hilfeausgabe auch nur pip. Trotzdem installiert plain pip Python 2-Pakete auf meinem System. Ich denke, stackoverflow.com/a/40832677/188108 ist korrekt, zumindest stimmt es mit meinen Beobachtungen überein.
Torsten Bronger
Es ändert sich in welcher Umgebung und wie Sie Python installieren. Diese Antwort soll einen Hinweis darauf geben, wie Pip funktioniert, und die Situation des Fragestellers beantworten. Wenn dies auf Ihrem System nicht der Fall ist, können Sie auf dieselbe Weise herausfinden, warum. Das heißt nicht, dass es eine falsche Antwort ist.
CSJ
1
Ich bezweifle das. Ich habe keinen Mac, aber auf den von mir getesteten Ubuntu-Varianten sind Pip-Varianten keine Symlinks. Stattdessen handelt es sich um winzige Python-Skripte, die sich nur in der Shebang-Zeile unterscheiden.
Torsten Bronger
Ja, das ist , was ich meine , es ändert sich auf die Umwelt und die Art , wie Sie Python installieren (Gebräu, apt, pyenv, manuell kompilieren, usw.) und der Situation des Fragestellers ist es , weil sie weich Links sind, und wir nutzen ls -lund pip showden Grund zu überprüfen. und natürlich soll diese Antwort seine Frage beantworten.
CSJ
Ich glaube nicht, dass es Symlinks auf dem Computer des Fragestellers gab. Ich finde keinen Hinweis darauf, dass Pip jemals so funktioniert hat.
Torsten Bronger
26

Wenn Sie Python 2.x hatten und dann Python3 installiert haben, zeigt Ihr Pip auf Pip3. Sie können dies überprüfen, indem Sie Folgendes eingeben pip --versionwie pip3 --version.

Auf Ihrem System haben Sie jetzt pip, pip2 und pip3 .

Wenn Sie möchten, können Sie pip so ändern, dass es auf pip2 anstatt auf pip3 zeigt.

Apadana
quelle
1
Wie ändern Sie das
Ahnbizcad
3
@ahnbizcad Der einfachste Weg ist, einen Alias ​​wie diesen zu definieren: alias pip = "pip3"
apadana
2
Ich habe das getan, aber mein pip3 war v9, als pip v10 war, also habe ich getippt pip3 install --upgrade pipund es hat beide v10 gemacht
Kevin Danikowski
2
Diese Antwort ist falsch. pip zeigt nicht auf pip3. pip installiert Python 2-Pakete und pip3 installiert Python 3-Pakete. Getestet auf Lubuntu 18.10.
Torsten Bronger
@TorstenBronger Wie war die Reihenfolge der Python-Installationen in Ihrer Umgebung?
Apadana
14

Wenn Sie installieren python3, pip3wird installiert. Und wenn Sie eine andere Python - Installation nicht (wie python2.7) haben dann ein Link erstellt wird , die Punkte pipzupip3 .

Ist also pipein Link zu,pip3 wenn keine andere Version von Python installiert ist (außer Python3). pipverweist in der Regel auf die erste Installation.

Ani Menon
quelle
7

Dies ist ein heikles Thema. Wenn Sie am Ende aufrufen pip, wird entweder pip2oder aufgerufen pip3, je nachdem, wie Sie Ihr System eingerichtet haben.

Max Uppenkamp
quelle
5

Ich denke pip, pip2und pip3sind keine Softlinks zum gleichen ausführbaren Dateipfad. Beachten Sie diese Befehle und Ergebnisse in meinem Linux-Terminal:

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)

Wie Sie sehen, existieren sie auf verschiedenen Wegen.

pip3 arbeitet immer nur in der Python3-Umgebung, wie pip2 es mit Python2 tut. pip arbeitet in jeder Umgebung, die dem Kontext entspricht. Wenn Sie sich beispielsweise in einem Python3-Venv befinden, wird pip in der Python3-Umgebung ausgeführt.

Mohammad Reza
quelle
Ich würde sagen, es ist ein wenig irreführend zu sagen, dass pip mit jeder Umgebung verbunden ist, die für den Kontext geeignet ist. Im Fall von venv ist die ausführbare Pip-Datei spezifisch für das venv und nicht für das System. Wenn Sie nicht mehrere Python-Versionen in derselben Version installiert haben, kann dieses Problem dort nicht auftreten. Wenn Sie kein venv verwenden, ist die verwendete Version von pip manchmal nicht intuitiv und hängt von der Konfiguration Ihres Systems ab (häufig hängt es davon ab, welche Python-Version zuerst installiert wurde, wie andere gesagt haben). Aber Pip hat keine Intelligenz, mit der er eine Version dynamisch auswählt
Luke Baumann
5

Zur Veranschaulichung:

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

So mein in meinem Standard - System - Python (Python 3.7.3), pip ist pip3 .

Victoria Stuart
quelle
3

Wenn Sie Python 2.7 installiert haben, können Sie möglicherweise Pakete speziell für Python 2 verwenden pip2und pip2.7installieren, z

pip2 install some_pacakge

oder

pip2.7 install some_package

Und Sie können Pacakges speziell für Python 3 verwenden pip3oder pip3.5installieren.

mikeqfu
quelle
1

Auf meiner Windows-Instanz - und ich verstehe meine Umgebung nicht vollständig - funktionierte die Verwendung von pip3 zur Installation des kaggle-cli-Pakets - während pip dies nicht tat. Ich habe in einer Conda-Umgebung gearbeitet und die Umgebungen scheinen anders zu sein.

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

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

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

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

PM
quelle
0

Angesichts einer aktivierten virtuellen Python 3.6-Version in somepath / venv lösten die folgenden Aliase die verschiedenen Probleme auf einem macOS Sierra, bei dem pip darauf bestand, auf Apples 2.7 Python zu verweisen.

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

Dies funktionierte nicht so gut, als ich dies tun musste, sudo pipda der Root-Benutzer nichts über meinen Alias ​​oder die virtuelle Umgebung weiß. Daher musste ich einen zusätzlichen Alias ​​hinzufügen, um dies ebenfalls zu handhaben. Es ist ein Hack, aber es funktioniert und ich weiß, was es tut:

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

Hintergrund:

pip3 existierte nicht zum Starten ( Befehl nicht gefunden ) mit und which pipwürde zurückkehren /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/pip , den Apple - Python.

Python 3.6 wurde über Macports installiert.

Nach der Aktivierung von 3.6 virtualenv wollte ich arbeiten, which python würde somepath / venv / bin / python zurückgegeben

Irgendwie pip install würde ich das Richtige tun und meine virtuelle Umgebung treffen, aberpip list Python 2.7-Pakete rasseln.

Für Python liegt dies weit unter meinen Erwartungen in Bezug auf Anfängerfreundlichkeit.

JL Peyret
quelle