879 Stimmen

Verwendung von Python 3 in virtualenv

Mit virtualenv führe ich meine Projekte mit der Standardversion von Python (2.7) aus. Bei einem Projekt muss ich jedoch Python 3.4 verwenden.

Ich habe brew install python3 benutzt, um es auf meinem Mac zu installieren. Wie erstelle ich jetzt ein virtualenv, das die neue Version verwendet?

z.B. sudo virtualenv envPython3

Wenn ich versuche:

virtualenv -p python3 test

bekomme ich:

Virtualenv wird ausgeführt mit Interpreter /usr/local/bin/python3
Grundprefix verwenden '/usr/local/Cellar/python3/3.4.0_1/Frameworks/Python.framework/Versions/3.4'
Neues Python-Ausführbares in test/bin/python3.4
Auch Ausführbares in test/bin/python erstellen
Fehler beim Importieren des Site-Moduls
Traceback (zuletzt aufgerufener Anruf):
  Datei "/Users/user/Documents/workspace/test/test/bin/../lib/python3.4/site.py", Zeile 67, in 
    import os
  Datei "/Users/user/Documents/workspace/test/test/bin/../lib/python3.4/os.py", Zeile 634, in 
    von _collections_abc import MutableMapping
ImportError: Kein Modul namens '_collections_abc'
FEHLER: Das Ausführbare test/bin/python3.4 funktioniert nicht
FEHLER: Es nimmt an, dass sys.prefix '/Users/user/Documents/workspace/test' ist (sollte '/Users/user/Documents/workspace/test/test' sein)
FEHLER: Virtualenv ist nicht mit diesem System oder Ausführbaren kompatibel

1498voto

tbrisker Punkte 15528

Einfach ausführen

virtualenv -p python3 envname

Update nach OP's Bearbeitung:

Es gab einen Fehler in der Version von virtualenv des OP, wie hier beschrieben. Das Problem wurde behoben, indem Folgendes ausgeführt wurde:

pip install --upgrade virtualenv

299voto

geckon Punkte 7888

Python 3 bietet eine integrierte Unterstützung für virtuelle Umgebungen - venv. Es könnte besser sein, das stattdessen zu verwenden. Mit Verweis auf die Dokumentation:

Die Erstellung von virtuellen Umgebungen erfolgt durch Ausführen des pyvenv-Skripts:

pyvenv /pfad/zum/neuen/virtuellen/umgebung

Aktualisierung für Python 3.6 und neuer:

Wie pawciobiel korrekt kommentiert hat, ist pyvenv veraltet ab Python 3.6 und der neue Weg ist:

python3 -m venv /pfad/zum/neuen/virtuellen/umgebung

66voto

Johnner Punkte 3375

Ich habe pyenv ausprobiert und es ist sehr praktisch zum Wechseln von Python-Versionen (global, lokal im Ordner oder im Virtualenv):

brew install pyenv

dann die gewünschte Python-Version installieren:

pyenv install 3.5.0

und einfach ein Virtualenv mit dem Pfad zur benötigten Interpreter-Version erstellen:

virtualenv -p /Users/johnny/.pyenv/versions/3.5.0/bin/python3.5 myenv

Das war es, überprüfe die Version:

. ./myenv/bin/activate && python -V

Es gibt auch ein Plugin für pyenv pyenv-virtualenv, aber es hat bei mir irgendwie nicht funktioniert.

62voto

Sandeep Punkte 26349

Installieren Sie die Voraussetzungen.

sudo apt-get install python3 python3-pip virtualenvwrapper

Erstellen Sie eine virtuelle Umgebung basierend auf Python3. Aktivieren Sie optional die Flagge --system-site-packages.

mkvirtualenv -p /usr/bin/python3 

Wechseln Sie in die virtuelle Umgebung.

workon 

Installieren Sie andere Anforderungen mit dem Paketmanager pip.

pip install -r requirements.txt
pip install 

Wenn Sie gleichzeitig an mehreren Python-Projekten arbeiten, wird in der Regel empfohlen, gemeinsame Pakete wie pdbpp global zu installieren und sie dann in virtuellen Umgebungen wiederzuverwenden.

Diese Technik spart viel Zeit beim Abrufen und Installieren von Paketen, verbraucht minimalen Festplattenspeicher und Netzwerkbandbreite.

sudo -H pip3 -v install pdbpp
mkvirtualenv -p $(which python3) --system-site-packages 

Django-spezifische Anweisungen

Wenn es viele systemweite Python-Pakete gibt, wird empfohlen, insbesondere während der Entwicklung keine --system-site-packages Flagge zu verwenden, da ich festgestellt habe, dass dies den Start von Django stark verlangsamt. Ich vermute, dass die Initialisierung der Django-Umgebung manuell alle Site-Pakete aus dem Systempfad durchsucht und hinzufügt, was der Grund sein könnte. Selbst python manage.py shell wird sehr langsam.

Dennoch experimentieren Sie damit, welche Option besser funktioniert. Es könnte sicherer sein, die --system-site-packages Flagge für Django-Projekte zu überspringen.

44voto

bewithaman Punkte 778
virtualenv --python=/usr/bin/python3 

hat bei mir funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X