Was ist der richtige Weg, um pip, virtualenv zu installieren und für Python zu verteilen?

247

Kurze Frage

Hintergrund

In meiner Antwort auf Frage SO 4314376 , empfahl ich mit , ez_setupso dass Sie dann installieren könnte pipund virtualenvwie folgt dar :

curl -O http://peak.telecommunity.com/dist/ez_setup.py
sudo python ez_setup.py
sudo easy_install pip
sudo pip install virtualenv

Ich habe diese Anleitung ursprünglich aus Jesse Nollers Blog-Post gezogen. Möchten Sie Python auf dem Mac verwenden? . Ich mag die Idee, ein sauberes globales Site-Packages-Verzeichnis zu führen, daher sind virtualenvwrapperund die einzigen anderen Pakete, die ich dort installiere distribute. (Ich habe vor kurzem distributeaufgrund dieser Ankündigung des öffentlichen Python-Dienstes zu meiner Toolbox hinzugefügt . Um diese beiden Pakete zu installieren, habe ich Folgendes verwendet:

sudo pip install virtualenvwrapper
curl -O http://python-distribute.org/distribute_setup.py
sudo python distribute_setup.py

Keine setuptools und easy_install mehr

Um dieser Ankündigung des öffentlichen Python-Dienstes bei einer neuen Python-Installation wirklich zu folgen , würde ich Folgendes tun:

curl -O http://python-distribute.org/distribute_setup.py
sudo python distribute_setup.py
sudo easy_install pip
sudo pip install virtualenv
sudo pip install virtualenvwrapper

Glyphs Rüge

In einem Kommentar zu meiner Antwort auf die SO-Frage 4314376 erklärte der SO-Benutzer Glyph :

NEIN. Mach NIEMALS was auch sudo python setup.py installimmer. Schreiben Sie eine ~ / .pydistutils.cfg, die Ihre Pip-Installation in ~ / .local oder so versetzt. Insbesondere die genannten Dateien ez_setup.pyneigen dazu, neuere Versionen von Dingen wie setuptools und easy_install herunterzusaugen, wodurch möglicherweise andere Dinge auf Ihrem Betriebssystem beschädigt werden.

Zurück zur kurzen Frage

So Glyph Antwort führt mich zu meiner ursprünglichen Frage:

Matthew Rankin
quelle
Matthew, ich weiß, dass dieser Thread ziemlich alt ist. Aber gibt es an dieser Front etwas Neues? Ist es immer noch eine schlechte Idee, python distribute_setup.pygefolgt von easy_install pipund virtualenv --distribute venv? (siehe python-guide.readthedocs.org/en/latest/starting/install/… ) und wenn ja, warum?
Amelio Vazquez-Reina
2
Was ist los mit sudo apt-get install python-{pip,virtualenv}???
MestreLion
1
Ja, im Allgemeinen sind die älteren, aber kompatiblen Pakete in Ordnung, wenn kleinere Versionen für Ihre Zwecke keine Rolle spielen, aber Sie haben speziell gefragt, "was ist los mit", und ich versuche, mein Pedant-Abzeichen zu bekommen.
2
FYI, sind mehrere Links in dieser Frage jetzt veraltet / gebrochen - ich zur Zeit (nicht) sehen, diejenigen pip, virtualenvund der Python PSA.
Chris Sprague
1
http://python-distribute.org/distribute_setup.pyWeiterleitungen zu 404 :(
Jitter

Antworten:

173

Sie können dies tun, ohne etwas in Python selbst zu installieren .

Sie benötigen weder Sudo noch Privilegien.

Sie müssen keine Dateien bearbeiten.

Installieren Sie virtualenv in einer virtuellen Bootstrap-Umgebung. Verwenden Sie diese virtuelle Umgebung, um mehr zu erstellen. Da virtualenv mit pip and Distribute ausgeliefert wird, erhalten Sie alles aus einer Installation.

  1. Laden Sie virtualenv herunter:
  2. Packen Sie den Quell-Tarball aus
  3. Verwenden Sie den entpackten Tarball, um eine saubere virtuelle Umgebung zu erstellen. Diese virtuelle Umgebung wird verwendet, um andere zu "booten". Alle Ihre virtuellen Umgebungen enthalten automatisch Pip und Distribute.
  4. Installieren Sie mithilfe von pip virtualenv in dieser Bootstrap-Umgebung.
  5. Verwenden Sie diese Bootstrap-Umgebung, um mehr zu erstellen!

Hier ist ein Beispiel in Bash:

# Select current version of virtualenv:
VERSION=12.0.7
# Name your first "bootstrap" environment:
INITIAL_ENV=bootstrap
# Set to whatever python interpreter you want for your first environment:
PYTHON=$(which python)
URL_BASE=https://pypi.python.org/packages/source/v/virtualenv

# --- Real work starts here ---
curl -O $URL_BASE/virtualenv-$VERSION.tar.gz
tar xzf virtualenv-$VERSION.tar.gz
# Create the first "bootstrap" environment.
$PYTHON virtualenv-$VERSION/virtualenv.py $INITIAL_ENV
# Don't need this anymore.
rm -rf virtualenv-$VERSION
# Install virtualenv into the environment.
$INITIAL_ENV/bin/pip install virtualenv-$VERSION.tar.gz

Jetzt können Sie Ihre "Bootstrap" -Umgebung verwenden, um mehr zu erstellen:

# Create a second environment from the first:
$INITIAL_ENV/bin/virtualenv py-env1
# Create more:
$INITIAL_ENV/bin/virtualenv py-env2

Verrückt werden!

Hinweis

Dies setzt voraus, dass Sie keine wirklich alte Version von virtualenv verwenden. Alte Versionen erforderten die Flags --no-site-packges(und abhängig von der Version von Python --distribute). Jetzt können Sie Ihre Bootstrap-Umgebung mit just python virtualenv.py path-to-bootstrapoder erstellen python3 virtualenv.py path-to-bootstrap.

Walker Hale IV
quelle
13
Nur mühsam, weil es sehr allgemein ist, ein einfacher Download, untar und dann python virtualenv.py TARGET_DIRECTORYdas gleiche tut.
Sebastian Blask
3
Das ist brilliant. Ich habe es angepasst, um meine spezifischere Frage zur Installation von virtualenv in mehreren Python-Versionen zu beantworten, unabhängig von Systempaketen - stackoverflow.com/questions/6812207/… - funktioniert einwandfrei.
David.Libremone
6
Hinweis: virtualenvDerzeit sind keine Optionen für '--no-site-packages --distribute' erforderlich. Das Gegenteil --system-site-packageskönnte erforderlich sein
jfs
1
Sie können den neuesten stabilen Tarball mit diesem Befehl erhalten:curl -Lo virtualenv-tmp.tar.gz 'https://github.com/pypa/virtualenv/tarball/master'
Bohr
1
Wo installieren Sie virtualenvwrapper? Die Dokumente warnen ausdrücklich davor, es in einer virtuellen Umgebung zu installieren (obwohl es zu funktionieren scheint ).
Aryeh Leib Taurog
21

Ich denke, Glyphe bedeutet so etwas zu tun:

  1. Erstellen Sie ein Verzeichnis ~/.local, falls es noch nicht vorhanden ist.
  2. In Ihrem ~/.bashrcsicher , dass ~/.local/binauf PATHund ~/.localist auf PYTHONPATH.
  3. Erstellen Sie eine Datei, ~/.pydistutils.cfgdie enthält

    [install]
    prefix=~/.local

    Es ist eine Standarddatei im ConfigParser-Format.

  4. Herunterladen distribute_setup.py und ausführen python distribute_setup.py(nein sudo). Wenn es sich über ein nicht vorhandenes site-packagesVerzeichnis beschwert , erstellen Sie es manuell:

    mkdir -p ~ / .local / lib / python2.7 / site-packages /

  5. Führen Sie aus which easy_install, um zu überprüfen, ob es von kommt~/.local/bin

  6. Lauf pip install virtualenv
  7. Lauf pip install virtualenvwrapper
  8. Erstellen Sie beispielsweise eine virtuelle Umgebung mit einem Ordner ~/.virtualenvs
  9. Zusätzlich ~/.bashrchinzufügen

    export WORKON_HOME
    source ~/.local/bin/virtualenvwrapper.sh

Das war's, überhaupt keine Verwendung sudound Ihre Python-Umgebung befindet sich in ~/.local, völlig getrennt von Python des Betriebssystems. Haftungsausschluss: virtualenvwrapperIch bin mir nicht sicher, wie kompatibel dieses Szenario ist - ich konnte es auf meinem System nicht testen :-)

Vinay Sajip
quelle
2
Ist ~ / .local ein dummer Name? Was ist, wenn Ruby dasselbe tun möchte? Vielleicht wäre ~ / .python27 besser?
Jonathan Hartley
1
Nur eine Anmerkung, ich habe nur das Gleiche unter Windows versucht und musste sowohl den lokalen Ordner (zum Beispiel "local" genannt) als auch "local \ Lib \ site-packages" zu PYTHONPATH hinzufügen, um Distribute_setup.py erfolgreich auszuführen.
technomalogical
1
Ein letztes Problem bei diesem Ansatz: virtualenv ist nicht mit der Verwendung der Datei .pydistutils.cfg kompatibel. Siehe github.com/pypa/virtualenv/issues/88
Dan
3
Ich denke, es sollte eine easy_install pipzwischen Schritt 5 und 6 geben.
SiggyF
5
Die ~ / .local Sache kommt von PEP 370.
Éric Araujo
16

Wenn Sie die Schritte befolgen, die in mehreren Tutorials beschrieben wurden, die ich in dieser Antwort verlinkt habe , können Sie den gewünschten Effekt erzielen, ohne die etwas komplizierten "manuellen" Schritte in den Antworten von Walker und Vinay. Wenn Sie auf Ubuntu sind:

sudo apt-get install python-pip python-dev

Das Äquivalent wird in OS X durch die Verwendung von Homebrew zur Installation von Python erreicht (weitere Details hier ).

brew install python

Mit pipinstalliert können Sie es verwenden, um die verbleibenden Pakete zu erhalten (Sie können sudoin OS X weglassen , da Sie Ihre lokale Python-Installation verwenden).

sudo pip install virtualenvwrapper

(Dies sind die einzigen Pakete, die Sie global installieren müssen, und ich bezweifle, dass sie mit allen Systemen auf Betriebssystemebene des Betriebssystems in Konflikt geraten. Wenn Sie besonders sicher sein möchten, können Sie die Versionen der Distribution behalten. sudo apt-get install virtualenvwrapper)

Hinweis: In Ubuntu 14.04 erhalte ich einige Fehler bei der Pip-Installation , daher verwende ich pip3 install virtualenv virtualenvwrapperund füge VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3sie meiner .bashrc/.zshrcDatei hinzu.

Sie hängen dann an Ihre .bashrcDatei an

export WORKON_HOME
source /usr/local/bin/virtualenvwrapper.sh

und beschaffen

. ~/.bashrc

Das ist es im Grunde. Jetzt müssen Sie nur noch entscheiden, ob Sie eine virtuelle Umgebung erstellen möchten, die Pakete auf Systemebene enthält

mkvirtualenv --system-site-packages foo

Wenn Ihre vorhandenen Systempakete nicht neu installiert werden müssen, sind sie mit den Versionen des Systeminterpreters verknüpft. Hinweis: Sie können weiterhin neue Pakete installieren und vorhandene Pakete aus dem System ohne sudo aktualisieren. Ich habe es getestet und es funktioniert ohne Unterbrechungen des Systeminterpreters.

kermit@hocus-pocus:~$ sudo apt-get install python-pandas
kermit@hocus-pocus:~$ mkvirtualenv --system-site-packages s
(s)kermit@hocus-pocus:~$ pip install --upgrade pandas
(s)kermit@hocus-pocus:~$ python -c "import pandas; print(pandas.__version__)"
0.10.1
(s)kermit@hocus-pocus:~$ deactivate
kermit@hocus-pocus:~$ python -c "import pandas; print(pandas.__version__)"
0.8.0

Die Alternative, wenn Sie eine vollständig getrennte Umgebung wünschen, ist

mkvirtualenv --no-site-packages bar

oder vorausgesetzt, dies ist einfach die Standardoption

mkvirtualenv bar

Das Ergebnis ist, dass Sie eine neue virtuelle Umgebung haben, in der Sie Ihre Lieblingspakete frei und plötzlich installieren können

pip install flask
Metakermit
quelle
Installiert dies nicht beide Setuptools und verteilt es? Und bricht das nicht Pakete wie Tkinter und pyopencl, die keine Setuptools mögen?
Kochfelder
Erzwingt das Setzen von WORKON_HOME auf null in bashrc venvwrapper, etwas Vernünftiges zu verwenden export WORKON_HOME="$HOME/.virtualenvs"?
Kochfelder
Nun, es installiert alles, wovon Ihr Paketmanager sagt, dass Pip davon abhängt. Derzeit sind das Setuptools in Ubuntu und OS X ( brew install pythonzieht Pip + Setuptools ein). Dieser Ansatz funktioniert gut für mich. Darüber hinaus scheint die Konzentration auf Pip auch der zukünftige Weg in der Python-Verpackung zu sein.
Metakermit
1
WORKON_HOMEStandardmäßig ~/.virtualenvsja. Es gibt eine Linie in /usr/local/bin/virtualenvwrapper.shdiesen Sets workon_home_dir="$HOME/.virtualenvs" if [ "$workon_home_dir" = "" ].
Metakermit
Verstanden. Vielen Dank. Ihr einfacher Ansatz hat unter Ubuntu 12.04 bei der Installation von Modulen, die bei der Verwendung von Distribute (pyopencl) wählerisch sind, hervorragend funktioniert. Der Trick für mich bestand darin, Ihre pip install virtualenv virtualenv-wrapperLinie pip install --upgrade distributeinnerhalb der aktivierten virtuellen Umgebung zu verfolgen, in der ich dann pyopencl installiert habe. Ich habe auch export PROJECT_HOME="$HOME/src"meinen bashrc hinzugefügt , um das coole mkprojectvenv-Tool zu aktivieren .
Kochfelder
12

Python 3.4 ab

Python 3.3 fügt das venv-Modul hinzu und Python 3.4 fügt das surepip-Modul hinzu . Dies macht das Bootstrapping von Pip so einfach wie:

Python -m Surepip

Möglicherweise geht ein Aufruf dazu venvin einer virtuellen Umgebung voraus .

Garantierte Pip ist in PEP 453 beschrieben .

gerrit
quelle
10

Unter Ubuntu:

sudo apt-get install python-virtualenv

Das Paket python-pipist eine Abhängigkeit, daher wird es auch installiert.

Arik Halperin
quelle
1
python-virtualenv installiert sowohl virtualenv als auch pip. Führen Sie danach einfach virtualenv aus, um virtuelle Python-Umgebungen zu erstellen. Führen Sie pip in virtual env aus, um andere Pakete zu installieren.
Jemeshsu
2
Dies ist in der Tat die vernünftigste Option. Der "richtige" Weg, um Dinge in Ihrem Betriebssystem zu installieren, ist die Verwendung Ihres Betriebssystem-Installationssystems ! Danach können Sie mit spielen pip, vorzugsweise in ein virtualenvund nie verwenden sudoentweder für
MestreLion
Leider pipweisen die vom Betriebssystem bereitgestellten Versionen von manchmal erhebliche Fehler auf, sodass ich häufig die get-pip.pyauf python.org bereitgestellten Versionen verwende.
RichVel
@RichVel können Sie die signifikanten Fehler erläutern, auf die Sie gestoßen sind?
Danielpops
1
@danielpops - Ein Beispiel ist dieses Pip-Problem unter Ubuntu 16.04.1. Bei bestimmten Versionen und Anwendungsfällen kann es jedoch auch andere Probleme geben.
RichVel
5

Ich habe dieses Verfahren für uns bei der Arbeit erstellt.

cd ~
curl -s https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz | tar xvz
cd pip-1.3.1
python setup.py install --user
cd ~
rm -rf pip-1.3.1

$HOME/.local/bin/pip install --user --upgrade pip distribute virtualenvwrapper

# Might want these three in your .bashrc
export PATH=$PATH:$HOME/.local/bin
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS="--distribute"
source $HOME/.local/bin/virtualenvwrapper.sh

mkvirtualenv mypy
workon mypy
pip install --upgrade distribute
pip install pudb # Or whatever other nice package you might want.

Wichtige Punkte für Sicherheitsbewusste:

  1. curl führt eine SSL-Validierung durch. wget nicht.
  2. Ab Pip 1.3.1 führt pip auch eine SSL-Validierung durch.
  3. Weniger Benutzer können den Pypi-Tarball hochladen als einen Github-Tarball.
Bukzor
quelle
5

Update: Ab Juli 2013 wird dieses Projekt nicht mehr gepflegt. Der Autor schlägt vor, pyenv zu verwenden . (pyenv hat keine integrierte Unterstützung für virtualenv, spielt aber gut damit.)

Pythonbrew ist ein Versionsmanager für Python und bietet Unterstützung für virtualenv.

Nach der Installation von Pythonbrew und einer Python-Version mit venvs ist das ganz einfach:

# Initializes the virtualenv 
pythonbrew venv init

# Create a virtual/sandboxed environment 
pythonbrew venv create mycoolbundle  

# Use it 
pythonbrew venv use mycoolbundle
Kioopi
quelle
@ kermit666 danke. Was wäre der bevorzugte Weg, um meine Antwort als veraltet zu markieren? Einfach löschen?
Kioopi
1
Nun, Sie können es entweder so lassen, wie es ist (es gibt Anweisungen zur Verwendung von pyenv für Personen, die dem Link aus meinem Kommentar folgen, dessen Konzept dem von Ihnen empfohlenen Pythonbrew ähnelt) oder die Antwort noch besser bearbeiten, z. B. Update September 2013 von Anhängen der neuen Anweisungen. Vielleicht wird Pythonbrew in Zukunft wieder aktiv, damit ich Ihre alten Anweisungen nicht lösche. Weitere Informationen finden Sie unter Meta .
Metakermit
Siehe meine Antwort über pyenv, was gut funktioniert.
RichVel
3

Es ist kein Problem, sudo python setup.py zu installieren, wenn Sie sicher sind, dass es das ist, was Sie tun möchten.

Der Unterschied besteht darin, dass das Site-Packages-Verzeichnis Ihres Betriebssystems als Ziel für das Kopieren von .py-Dateien verwendet wird.

Wenn Sie also möchten, dass Pip über einen weiten Bereich zugänglich ist, ist dies wahrscheinlich der richtige Weg. Ich sage nicht, dass andere Wege schlecht sind, aber das ist wahrscheinlich fair genug.

Alexis Métaireau
quelle
1
Ja, ich habe es so benutzt. Und einige Zeit später wurde pip freezeich durch das Aufrufen fast eingefroren - die Liste der Pakete, die systemweit installiert wurden, war viel zu lang. Seitdem empfehle ich dringend, die Installation des Python-Pakets "no sudo" und "no os-wide" zu verwenden.
Jan Vlcinsky
2

Ich bin kürzlich auf das gleiche Problem gestoßen. Ich bin immer mehr an der Einstellung interessiert, immer eine virtuelle Umgebung zu verwenden, daher bestand mein Problem darin, die virtuelle Umgebung mit pip zu installieren, ohne die Verteilung in meinem globalen Verzeichnis oder dem Verzeichnis der Benutzer-Site-Pakete zu installieren. Zu diesem Zweck habe ich Distribute, Pip und Virtualenv manuell heruntergeladen und für jedes Programm "python setup.py install --prefix ~ / .local / python-private" ausgeführt (mit der temporären Einstellung PYTHONPATH = ~ / .local / python-private), damit Setup-Skripte verteilen konnten). Ich habe das virtualenv-Skript in ein anderes Verzeichnis verschoben, das sich in meinem PATH befindet, und es so bearbeitet, dass die Distribute- und virtualenv-Module auf sys.path zu finden sind. Tada: Ich habe nichts in / usr, / usr / local oder in meinem Benutzer-Site-Paket-Verzeichnis installiert, aber ich kann virtualenv überall ausführen, und in diesem virtualenv bekomme ich pip.

Éric Araujo
quelle
2

Ich hatte verschiedene Probleme (siehe unten) bei der Installation aktualisierter SSL-Module, sogar innerhalb einer virtuellen Umgebung, auf älteren Python-Versionen, die vom Betriebssystem bereitgestellt werden. Daher verwende ich sie jetzt pyenv.

pyenv macht die Installation neuer Python-Versionen sehr einfach und unterstützt virtualenvs. Der Einstieg ist viel einfacher als die in anderen Antworten aufgeführten Rezepte für virtualenv:

  • brew install pyenvVerwenden Sie auf einem Mac und unter Linux das pyenv-Installationsprogramm
  • Auf diese Weise erhalten Sie eine integrierte Unterstützung für virtuelle Umgebungen sowie einen Python-Versionswechsel (falls erforderlich).
  • funktioniert gut mit Python 2 oder 3, kann viele Versionen gleichzeitig installiert haben

Dies funktioniert sehr gut, um die "neue Python" -Version und die virtuelle Umgebung von System Python zu isolieren. Da Sie problemlos ein neueres Python verwenden können (nach 2.7.9), sind die SSL-Module bereits aktualisiert, und natürlich sind Sie wie jedes moderne Virtualenv-Setup von den Python-Systemmodulen isoliert.

Ein paar nette Tutorials:

Das pyenv-virtualenvPlugin ist jetzt eingebaut - Typ pyenv commands | grep virtualenvzur Überprüfung. Ich würde das pyenv-virtualenvwrapper-Plugin zunächst nicht verwenden - sehen Sie, wie Sie mit pyenv-virtualenv umgehen, das stärker in pyenv integriert ist, da dies den größten Teil der Funktionen von virtualenvwrapper abdeckt.

pyenvist modelliert rbenv(ein gutes Tool für das Umschalten der Ruby-Version) und seine einzige Abhängigkeit ist Bash.

  • pyenv hat nichts mit dem sehr ähnlich benannten zu pyvenvtun - das ist ein virtuelles Env-Äquivalent, das Teil der neuesten Python 3-Versionen ist und das Umschalten der Python-Version nicht übernimmt

Vorsichtsmaßnahmen

Zwei Warnungen vor Pyenv:

  1. Es funktioniert nur mit einer Bash oder einer ähnlichen Shell - oder genauer gesagt, das pyenv-virtualenv-Plugin mag es nicht dash, das /bin/shauf Ubuntu oder Debian läuft .
  2. Es muss über eine interaktive Anmeldeshell ausgeführt werden (z. B. bash --loginüber ein Terminal), was mit Automatisierungstools wie Ansible nicht immer einfach zu erreichen ist .

Daher eignet sich pyenv am besten für die interaktive Verwendung und weniger für die Erstellung von Skriptservern.

Probleme mit SSL-Modulen

Ein Grund für die Verwendung pyenvist, dass bei der Verwendung älterer, vom System bereitgestellter Python-Versionen häufig Probleme beim Aktualisieren von Python-SSL-Modulen auftreten:

RichVel
quelle
2
  • Sie können dies tun, ohne etwas in Python selbst zu installieren.

  • Sie benötigen weder Sudo noch Privilegien.

  • Sie müssen nicht die neueste Version einer virtualenvTAR-Datei finden

  • Sie müssen die Versionsinformationen nicht in einem Bash-Skript bearbeiten, um die Dinge auf dem neuesten Stand zu halten.

  • Sie brauchen curl/ wgetoder tarinstalliert, noch pipodereasy_install

  • Dies funktioniert sowohl für 2.7 als auch für 3.X.

Speichern Sie Folgendes unter /tmp/initvenv.py:

vom zukünftigen Import print_function

import os, sys, shutil, tempfile, subprocess, tarfile, hashlib

try:
    from urllib2 import urlopen
except ImportError:
    from urllib.request import urlopen

tmp_dir = tempfile.mkdtemp(prefix='initvenv_')
try:
    # read the latest version from PyPI
    f = urlopen("https://pypi.python.org/pypi/virtualenv/")
    # retrieve the .tar.gz file
    tar_found = False
    url = None
    sha256 = None
    for line in f.read().splitlines():
        if isinstance(line, bytes):
            line = line.decode('utf-8')
        if tar_found:
            if 'sha256' in line:
                sha256 = line.split('data-clipboard-text')[1].split('"')[1]
                break
            continue
        if not tar_found and 'tar.gz">' not in line:
            continue
        tar_found = True
        for url in line.split('"'):
            if url.startswith('https'):
                break
    else:
        print('tar.gz not found')
        sys.exit(1)
    file_name = url.rsplit('/', 1)[1]
    print(file_name)
    os.chdir(tmp_dir)
    data = urlopen(url).read()
    data_sha256 = hashlib.sha256(data).hexdigest()
    if sha256 != data_sha256:
        print('sha256 not correct')
        print(sha256)
        print(data_sha256)
        sys.exit(1)
    with open(file_name, 'wb') as fp:
        fp.write(data)
    tar = tarfile.open(file_name)
    tar.extractall()
    tar.close()
    os.chdir(file_name.replace('.tar.gz', ''))
    print(subprocess.check_output([sys.executable, 'virtualenv.py'] +
                                  [sys.argv[1]]).decode('utf-8'), end='')
    if len(sys.argv) > 2:
        print(subprocess.check_output([
            os.path.join(sys.argv[1], 'bin', 'pip'), 'install', 'virtualenv'] +

            sys.argv[2:]).decode('utf-8'), end='')
except:
    raise
finally:
    shutil.rmtree(tmp_dir)  # always clean up

und benutze es als

python_binary_to_use_in_venv /tmp/initvenv.py your_venv_name [optional packages]

zB (wenn Sie wirklich die distributeKompatibilitätsschicht für benötigen setuptools)

python /tmp/initvenv.py venv distribute

Bitte beachten Sie, dass Sie bei älteren Python-Versionen möglicherweise InsecurePlatformWarnings¹ erhalten.

Sobald Sie Ihre virtuelle Umgebung (z. B. Name venv) haben, können Sie eine andere virtuelle Umgebung einrichten, indem Sie Folgendes verwenden virtualenv:

venv/bin/virtualenv venv2

virtualenvwrapper

Ich empfehle , nach einem einmaligen Setup auch einen Blick auf virtualenvwrapper zu werfen :

% /opt/python/2.7.10/bin/python /tmp/initvenv.py venv virtualenvwrapper

und Aktivierung (kann über Ihr Anmeldeskript erfolgen):

% source venv/bin/virtualenvwrapper.sh

Sie können Dinge tun wie:

% mktmpenv 
New python executable in tmp-17bdc3054a46b2b/bin/python
Installing setuptools, pip, wheel...done.
This is a temporary environment. It will be deleted when you run 'deactivate'.
(tmp-17bdc3054a46b2b)% 

¹ Ich habe keinen Weg gefunden, die Warnung zu unterdrücken. Es könnte in pipund / oder gelöst werden request, aber die Entwickler verweisen aufeinander als Ursache. Ich erhielt die oft nicht realistische Empfehlung, die von mir verwendete Python-Version auf die neueste Version zu aktualisieren. Ich bin mir sicher, dass dies z. B. meine Linux Mint 17-Installation beschädigen würde. Glücklicherweise werden pipPakete zwischengespeichert, sodass die Warnung nur einmal pro Paketinstallation erstellt wird.

Anthon
quelle
Die Warnung InsecurePlatformWarning(dh Warnung, wenn Python älter als Version 2.7.9 ist) kann behoben werden, indem zusätzliche Pakete pyopenssl, pyasn1, ndg-httpsclient von PyPI installiert werden. (Es unterstützt SSL, das Dekodieren von Zertifikaten und https über PyOpenSSL.) Ohne die richtigen Protokolle ist es wirklich nicht sicher genug, um Code herunterzuladen und auszuführen.
Hynekcer
@hynekcer Ich werde es versuchen. Ich frage mich, warum pip und / oder request nicht von diesen Paketen für geeignete (ältere) Python-Versionen abhängig gemacht werden.
Anthon
0

Auf der offiziellen Virtualenv-Website finden Sie gute Anweisungen. https://pypi.python.org/pypi/virtualenv

Im Grunde , was ich habe, ist zu installieren pipmit sudo easy_install pip, dann verwendet sudo pip install virtualenvdann ein Umfeld geschaffen , mit: virtualenv my_env(nennen Sie es , was Sie wollen), nach , dass ich tat virtualenv --distribute my_env; welches installiert distributeund pipin meinem virtualenv.

Befolgen Sie erneut die Anweisungen auf der virtualenvSeite.

Eine Art Ärger, der von Ruby kommt; P.

Victor S.
quelle
0

Hier ist eine gute Möglichkeit, virtualenvwrapper zu installieren (Update davon ).

Laden Sie virtualenv-1.11.4 herunter (das Neueste finden Sie hier ), entpacken Sie es und öffnen Sie esterminal

# Create a bootstrapenv and activate it:
$ cd ~
$ python <path to unzipped folder>/virtualenv.py bootstrapenv
$ source bootstrapenv/bin/activate

# Install virtualenvwrapper:
$ pip install virtualenvwrapper
$ mkdir -p ~/bootstrapenv/Envs

# append it to file `.bashrc`
$ vi ~/.bashrc
  source ~/bootstrapenv/bin/activate
  export WORKON_HOME=~/bootstrapenv/Envs
  source ~/bootstrapenv/bin/virtualenvwrapper.sh

# run it now.
$ source ~/.bashrc

Das ist es, jetzt können Sie verwenden mkvirtualenv env1, lsvirtualenv..etc

Hinweis: Sie können löschen virtualenv-1.11.4und virtualenv-1.11.4.zipvon Downloads - Ordner.

suhailvs
quelle
0

Die gute Nachricht ist, wenn Sie python3.4 installiert haben, ist pyvenv bereits installiert. Also nur

pyvenv project_dir
source project_dir/bin/activate
python --version   
python 3.4.*

In dieser virtuellen Umgebung können Sie Pip verwenden, um Module für dieses Projekt zu installieren.

Lassen Sie diese virtuelle Umgebung einfach

deactivate
Maoyang
quelle