2015-04-17 10 views
6

Das verursacht mir kein Problem, das ich nicht lösen kann, indem ich die virtuelle Umgebung aktiviere und pip install -U pip betreibe, aber ich frage mich immer, woher die ältere Version von pip kommt.Warum 'python3 -m venv myenv' eine ältere Version von pip in myenv installiert als irgendeine Version von pip, die ich irgendwo auf dem System finden kann?

Ich benutze OS X 10.7.5. Wenn ich eine virtuelle Umgebung mit pyvenv-3.4 myenv oder python3 -m venv myenv erstelle, ist die Version von pip, die in der virtuellen Umgebung installiert ist, 6.0.8, aber ich habe meinen globalen Pip auf 6.1.1 aktualisiert.

Hier ist eine Terminalsitzung zeigen, was ich meine:

$ python3 -m venv myenv 
$ myenv/bin/pip -V 
pip 6.0.8 from /Users/dust/Desktop/myenv/lib/python3.4/site-packages (python 3.4) 

Hier ist, was ich auftreten möchte:

$ source myenv/bin/activate 
(myenv)$ pip -V 
UPDATED SYSTEM VERSION HERE WOULD BE NICE 

kann ich keine pip 6.0.8 irgendwoanders, anders als das, was in virtuellen Umgebungen erstellt wird.

Hier sind die Ausgänge der verschiedenen Befehle, die ich verwenden, dies zu versuchen haben und herauszufinden:

$ which pip 
/Library/Frameworks/Python.framework/Versions/3.4/bin/pip 

$ which pip3 
/Library/Frameworks/Python.framework/Versions/3.4/bin/pip3 

$ pip -V 
pip 6.1.1 from /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages (python 3.4) 

$ pip3 -V 
pip 6.1.1 from /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages (python 3.4) 

Ich habe sogar versucht FIND:

$ find/-type f -name pip 2>&1 | awk '! /^f.*$/' 
/Library/Frameworks/Python.framework/Versions/3.4/bin/pip 
/usr/local/bin/pip 

$ find/-type f -name pip3 2>&1 | awk '! /^f.*$/' 
/Library/Frameworks/Python.framework/Versions/3.4/bin/pip3 

ich vielleicht gedacht, dass die /usr/local/bin/pip haben könnte war der Schuldige, aber nein:

$ /usr/local/bin/pip -V 
pip 6.1.1 from /Library/Python/2.7/site-packages/pip-6.1.1-py2.7.egg (python 2.7) 

Hmm. Vielleicht hat das OS X Python es?

$ /usr/bin/python 
>>> import pip 
>>> pip.__version__ 
'6.1.1' 

6.1.1 ist keine Angelegenheit berichtet, die Verteilung von Python Ich frage, ob es 2.7.1 ist sein OS X, python.org der 2.7.9 oder python.org der 3.4.3.

Ist es möglich (oder ratsam), die Version von pip zu aktualisieren, die in eine virtuelle Umgebung versetzt wird?

Antwort

3

Ich habe das gleiche Problem, läuft OSX 10.10.2 und python 3.4.2. Zuletzt erstellte ich eine virtuelle Umgebung in einer debian wheezy Maschine mit python 3.4.3 und endete auch mit einer älteren Version von pip als verfügbar. musste pip aktualisieren.

Ich habe innerhalb der virtuellen Umgebung zu 6.1.1 von 6.0.8 Upgrade pip manuell, weil ich o.c.d über Software-Bibliothek-Versionen, die Art und Weise bin - und ja, ich bin meine python 3 Version 3.4.3 jetzt aktualisieren. Wie auch immer, mein System python3-pip ist die neueste Version 6.1.1, so habe ich mich auch gefragt, warum pyvenv erstellt eine neue virtuelle Umgebung und lädt es mit alten pip.

Ich habe nicht bemerkt, dass irgendetwas in den virtuellen Umgebungen aufgrund der Aktualisierung pip schlecht passiert, (aber auf der anderen Seite habe ich auch nichts Gutes bemerkt) Anscheinend ist der neue Pip schneller - nicht bemerken, und gibt weniger Müll bei erfolgreichen Installationen, weil Benutzer ist egal - auch nicht bemerkt, wahrscheinlich, weil ich einer von denen, die nicht egal sind, und kommt auch mit einer State-of-the art Kaffeemaschine geeignet für Latte Art zu booten !!!- noch warten auf sudo pip install latte zu beenden :(

Also, um Ihre Frage zu beantworten, ist es definitiv möglich, und wahrscheinlich ratsam, zu aktualisieren, weil anscheinend die neue pip einige Bugs behebt und schneller geht, aber ich denke, die Geschwindigkeit ist nicht, dass die große und die Fehlerbehebung, dass all viele Menschen nicht beeinflussen.

Sie kann Link zu System-Website-Paketen (ich habe noch nie einen Fehler mit meiner Nutzung der alten pip konfrontiert) unter Verwendung von das Flag --system-site-packages, wenn Sie eine neue virtuelle Umgebung erstellen, wie diese

pyvenv myenv --system-site-packages 

Dies wird eine Verbindung zu Ihrer systemweiten Version von pip herstellen und würde den Ärger beseitigen, der Pip manuell auf jeder virtuellen Umgebung aktualisiert, aber wenn Sie dies tun, ist Ihre virtuelle Umgebung all das virtuell?

update: nach meiner Rant oben, ging ich in die venv Paketquelle zu graben. pip wird durch ein Verfahren namens _setup_pip in der Datei __init__.py, Linie 248

def _setup_pip(self, context): 
     """Installs or upgrades pip in a virtual environment""" 
     # We run ensurepip in isolated mode to avoid side effects from 
     # environment vars, the current directory and anything else 
     # intended for the global Python environment 
     cmd = [context.env_exe, '-Im', 'ensurepip', '--upgrade', 
                '--default-pip'] 
     subprocess.check_output(cmd, stderr=subprocess.STDOUT) 

So scheint Venv zu rufen ensurepip aus der Schale mit dem subprocess Modul einrichten.

Noch eine Minute von Google-Fu gab mir das aus der documentation for ensurepip.

ensurepip.version()

Gibt eine Zeichenfolge, die die gebündelte Version von pip angeben, die installiert wird, wenn eine Umgebung Bootstrapping.

Also, von der Befehlszeile den folgenden Code:

$ python3 -c 'import ensurepip; print(ensurepip.version())' 
6.0.8 

zeigt meine aktuellen pip, die mit ensurepip Bootstrap wird.

Ich denke, wir mit der alten Version von pip für jeden neuen sitzen fest installieren, bis ensurepip aktualisiert wird, da ich nicht einen Weg finden, können die Version von pip zu aktualisieren, die mit ensurepip

+0

Oh kommt! Ich habe '' appearpip'' vergessen! Nachdem ich die von mir referenzierte Dokumentation von securepip gelesen habe, wo ich für weitere Informationen an PEP-453 gesendet wurde, [diesen Teil in PEP 453] (https://www.python.org/dev/peps/pep-0453/#updating- Die-private-copy-of-pip gab mir ein Verständnis, dass es Gründe für das Verhalten gibt, also habe ich keine Angst mehr, dass ich eine verpatzte Python-Installation hatte. – dusty