Verwenden von Python 3 in virtualenv

780

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

Ich habe brew install python3es auf meinem Mac installiert. Wie erstelle ich nun eine virtuelle Umgebung, die die neue Version verwendet?

zB sudo virtualenv envPython3

Wenn ich es versuche:

virtualenv -p python3 test

Ich bekomme:

Running virtualenv with interpreter /usr/local/bin/python3
Using base prefix '/usr/local/Cellar/python3/3.4.0_1/Frameworks/Python.framework/Versions/3.4'
New python executable in test/bin/python3.4
Also creating executable in test/bin/python
Failed to import the site module
Traceback (most recent call last):
  File "/Users/user/Documents/workspace/test/test/bin/../lib/python3.4/site.py", line 67, in <module>
    import os
  File "/Users/user/Documents/workspace/test/test/bin/../lib/python3.4/os.py", line 634, in <module>
    from _collections_abc import MutableMapping
ImportError: No module named '_collections_abc'
ERROR: The executable test/bin/python3.4 is not functioning
ERROR: It thinks sys.prefix is '/Users/user/Documents/workspace/test' (should be '/Users/user/Documents/workspace/test/test')
ERROR: virtualenv is not compatible with this system or executable
Prometheus
quelle
1
Haben Sie versucht, nur den Interpreter in Ihrer aktuellen Umgebung zu aktualisieren, oder haben Sie sich entschieden, von vorne zu beginnen?
Charlie Parker
Ist es möglich, python3 nur in einer virtuellen Umgebung zu installieren, ohne das System python (in python2.x) auf dem Mac zu aktualisieren?
Juni

Antworten:

1386

einfach laufen

virtualenv -p python3 envname

Update nach der Bearbeitung des OP:

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

pip install --upgrade virtualenv
tbrisker
quelle
17
Das virtualenv-Upgrade hat funktioniert, aber aus irgendeinem Grund musste ich auch explizit über die ausführbare Python3-Datei mitvirtualenv -p $(which python3) envname
dkamins
2
Ist es möglich, nur den Python-Interpreter der aktuellen Umgebung zu ändern, anstatt eine neue Umgebung zu erstellen?
Charlie Parker
Auf Raspbian funktionierte Jessie 'virtualenv --no-site-packages python3.4'. --distribute ist veraltet und -p scheint nicht notwendig zu sein, da virtualenv python3 verwendet.
alkopop79
Warum ist es , dass nach dem Laufen virtualenv -p python3 my_virtual_env, python3auch die virtuelle Umgebung von außen zugänglich ist?
Bishwas Mishra
@CharlieParker Sie können die folgenden zwei Schritte nacheinander ausgeführt werden : 1. Löschen Sie die bin, lib, include, localund shareVerzeichnisse in Ihrem Stammverzeichnis des Projekts. 2. In Terminal Run: virtualenv -p python3 .Initialisiert eine neue virtuelle Python3-Umgebung im aktuellen Verzeichnis.
Calleniah
251

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

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

pyvenv /path/to/new/virtual/environment

Update für Python 3.6 und neuer:

Wie pawciobiel richtig kommentiert , pyvenvist ab Python 3.6 veraltet und der neue Weg ist:

python3 -m venv /path/to/new/virtual/environment
Geckon
quelle
2
Ich hoffe, Sie haben Recht, da ich gerade virtualenv verlassen habe, um mit pyenv zusammen mit Python 3.5.2 zu arbeiten
Jayesh
1
Ich habe keine Informationen gefunden, die die standortbezogenen Bedenken bestätigen. Der Umzug wurde als Option entfernt. Ist dies jetzt nicht mehr erforderlich? Ist das eine Problemumgehung? oder ist es gerade völlig nutzlos, eine app vorzubereiten?
JM Becker
7
Genau, aber Sie könnten auch ausführen: python3 -m venv /path/v3da pyvenv script ab Python 3.6 veraltet ist.
Pawciobiel
4
Verwenden der neuesten Anaconda Python 3.6 auf dem Mac und python3 -m venv /path/v3Fehler hier. Error: Command '['/path/v3/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exitVermisse ich etwas Mit dieser --without-pipOption wird zumindest das Venv mit den Skripten zum Aktivieren / Deaktivieren korrekt erstellt.
Mönch
3
Jeder weiß, wie man einen Python3.6 -m venv <venvname> aktiviert. Es gibt keine Skripte / im erstellten Verzeichnis und keine "Aktivierung" im bin / Unterverzeichnis.
Shayne
60

Ich habe pyenv ausprobiert und es ist sehr praktisch, um Python-Versionen zu wechseln (global, lokal im Ordner oder in der virtuellen Umgebung):

brew install pyenv

Installieren Sie dann die gewünschte Python-Version:

pyenv install 3.5.0

und erstellen Sie einfach virtualenv mit dem Pfad zur benötigten Interpreter-Version:

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

Das war's, überprüfen Sie die Version:

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

Es gibt auch Plugins für pyenv pyenv-virtualenv, aber es hat irgendwie nicht für mich funktioniert.

Johnner
quelle
Es scheint, dass Ihre Methode das Erstellen einer neuen Python-Umgebung erfordert. Kann pyenv mit virtualenv arbeiten und meine Python-Version einfach ändern, wann immer ich möchte?
Charlie Parker
58

Installieren Sie die Voraussetzungen.

sudo apt-get install python3 python3-pip virtualenvwrapper

Erstellen Sie eine Python3-basierte virtuelle Umgebung. Optional --system-site-packagesFlag aktivieren .

mkvirtualenv -p /usr/bin/python3 <venv-name>

In die virtuelle Umgebung einstellen.

workon <venv-name>

Installieren Sie andere Anforderungen mit dem pipPaketmanager.

pip install -r requirements.txt
pip install <package_name>

Wenn Sie an mehreren Python-Projekten gleichzeitig arbeiten, wird normalerweise empfohlen, allgemeine Pakete wie pdbppglobal zu installieren und sie dann in virtuellen Umgebungen wiederzuverwenden.

Die Verwendung dieser Technik spart viel Zeit beim Abrufen und Installieren von Paketen, abgesehen vom minimalen Speicherplatz und der minimalen Netzwerkbandbreite.

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

Django spezifische Anweisungen

Wenn es viele systemweite Python-Pakete gibt, wird empfohlen, das --system-site-packagesFlag nicht zu verwenden, insbesondere während der Entwicklung, da ich festgestellt habe, dass es den Django-Start erheblich verlangsamt. Ich gehe davon aus, dass die Initialisierung der Django-Umgebung das manuelle Scannen und Anhängen aller Site-Pakete aus dem Systempfad ist, was der Grund sein könnte. Auch python manage.py shellwird sehr langsam.

Nach diesem Experiment funktioniert welche Option besser. Es könnte sicher sein, die --system-site-packagesFlagge für Django-Projekte einfach zu überspringen .

Sandeep
quelle
1
Ich habe dies auf OSX angewendet, es hat funktioniert (außer nicht verwendet, apt-getaber brew)
sdkks
38
virtualenv --python=/usr/bin/python3 <name of env>

arbeitete für mich.

Bewithaman
quelle
Ich habe das versucht, aber es wird gesagt The executable python3 (from --python=python3) does not exist, was würden Sie tun? Ich wollte isntall python3 brauen, war mir aber nicht sicher, ob das eine gute Idee war oder ob mein System verwirrt sein würde, welche Python-Version ich verwende
Charlie Parker
Funktioniert wie ein Zauber in Ubuntu 16.04!
Eric Vieira
20

Sie können beim Erstellen der Umgebung eine bestimmte Version von Python angeben .
Es wird in virtualenv.py erwähnt

virtualenv --python=python3.5 envname

In einigen Fällen muss dies der vollständige Pfad zur ausführbaren Datei sein:

virtualenv --python=/Users/username/.pyenv/versions/3.6.0/bin/python3.6 envname

Wie -pfunktioniert

parser.add_option(
    '-p', '--python',
    dest='python',
    metavar='PYTHON_EXE',
    help='The Python interpreter to use, e.g., --python=python3.5 will use the python3.5 '
    'interpreter to create the new environment.  The default is the interpreter that '
    'virtualenv was installed with (%s)' % sys.executable)
Kiran Jasvanee
quelle
Dies ist die beste Antwort hier
Collier
14

Ich hatte die gleiche ERRORNachricht. Die Lösung von tbrisker hat in meinem Fall nicht funktioniert. Stattdessen löste dies das Problem:

$ python3 -m venv .env
Aziz Alto
quelle
13

Dies ist alles, was Sie benötigen, um eine virtuelle Umgebung in Python / Python3 auszuführen

Wenn virtualenvnicht installiert, führen Sie zuerst aus

pip3 install virtualenv 

Jetzt ausführen:

virtualenv -p python3 <env name> 

Manchmal virtualenvschlägt der cmd fehl, wenn ja, verwenden Sie Folgendes :

python3 -m virtualenv <env_name>  # you can specify full path instead <env_name> to install the file in a different location other than the current location

Aktivieren Sie nun die virtuelle Umgebung:

source <env_name>/bin/activate

Oder:

source `pwd`/<env_name>/bin/activate

Jetzt renn

which python

Sie sollten den vollständigen Pfad zu Ihrem Verzeichnis und <env_name>/bin/pythonSuffix sehen

Führen Sie Folgendes aus, um die virtuelle Umgebung zu beenden:

deactivate 
Kohn1001
quelle
8

Python verfügt nun über eine eigene Implementierung einer virtuellen Umgebung mit dem Namen "venv". Ich würde vorschlagen, dies anstelle von virtualenv zu verwenden.

Zitat aus venv - docs ,

Veraltet seit Version 3.6: pyvenv war das empfohlene Tool zum Erstellen virtueller Umgebungen für Python 3.3 und 3.4 und ist in Python 3.6 veraltet.

In Version 3.5 geändert: Die Verwendung von venv wird jetzt zum Erstellen virtueller Umgebungen empfohlen.

Öffnen Sie für Windows cmd, um venv für ein Projekt zu starten:

python -m venv "c:\path\to\myenv"

(Ich würde vorschlagen, ein doppeltes Anführungszeichen um den Verzeichnispfad zu verwenden, wenn er Leerzeichen enthält. Beispiel: "C: / My Dox / Spaced Directory / Something")

Sobald venv eingerichtet ist, werden einige neue Ordner in Ihrem Projektverzeichnis angezeigt. Eines davon wäre "Scripts".

Um venv zu aktivieren oder aufzurufen, benötigen Sie:

C:\> <venv>\Scripts\activate.bat

Sie können eine virtuelle Umgebung deaktivieren, indem Sie in Ihrer Shell "Deaktivieren" eingeben. Damit können Sie jetzt Ihre projektspezifischen Bibliotheken installieren, die sich unter dem Ordner "Lib" befinden.

=============================== Bearbeiten 1 ================ ==================== Das unten beschriebene Szenario ist nicht das, was ursprünglich gefragt wurde. Fügen Sie dies nur hinzu, falls jemand vscode mit Python-Erweiterung verwendet

Wenn Sie vs-Code mit seiner Python-Erweiterung verwenden, tritt möglicherweise ein Problem mit seinem Pylint auf, das auf die globale Installation verweist. In diesem Fall kann pylint die in Ihrer virtuellen Umgebung installierten Module nicht sehen und zeigt daher beim Import Fehler an.

Hier ist eine einfache Methode, um darüber hinwegzukommen.

cd Workspace\Scripts
.\Activate.ps1
code .

Grundsätzlich aktivieren wir zuerst die Umgebung und rufen dann vs-code auf, damit pylint in der Umgebung startet und alle lokalen Pakete sehen kann.

Blaze
quelle
Ich verwende virtualenvfür die tägliche Verwendung von virtuellen Umgebungen ( workonusw.), aber für die zuverlässige Erstellung neuer virtueller Umgebungen ist python3.xdies die einzige Möglichkeit, die ich gefunden habe, die funktioniert.
Bobble
6

Zusätzlich zu den anderen Antworten empfehle ich zu überprüfen, welche Instanz von virtualenv Sie ausführen:

which virtualenv

Wenn dies in / usr / local / bin auftaucht, ist es möglich - sogar wahrscheinlich -, dass Sie virtualenv installiert haben (möglicherweise mit einer Instanz von easy_tools oder pip), ohne den Paketmanager Ihres Systems zu verwenden (im Fall von OP brauen). Das war mein Problem.

Vor Jahren - als ich noch ignoranter war - hatte ich virtualenv installiert und es maskierte das vom Paket bereitgestellte virtualenv meines Systems.

Nachdem ich diese alte, kaputte virtuelle Umgebung entfernt hatte, verschwanden meine Probleme.

Salbei
quelle
6

In Python3.6 habe ich es python3 -m venv myenvgemäß der Dokumentation versucht , aber es hat so lange gedauert . Der sehr einfache und schnelle Befehl lautet also: python -m venv yourenv Es hat bei Python3.6 für mich funktioniert.

Sujeet Agrahari
quelle
5

Auf dem Mac musste ich Folgendes tun, damit es funktioniert.

mkvirtualenv --python=/usr/bin/python3 YourEnvNameHere
Stryker
quelle
Um genau zu finden, wo sich Ihre gewünschte Python-Version befindet, verwenden Sie which python2.7oder which python3.5oder which python3.6, und ersetzen Sie dann das about--python=DIRECTORY
Santhosh
3

Wenn Sie python3 ( brew install python3) zusammen mit virtualenv burrito installieren , können Sie dies tun mkvirtualenv -p $(which python3) env_name

Natürlich weiß ich, dass virtueller Burrito nur ein Wrapper ist, aber er hat mir über die Jahre gute Dienste geleistet und einige Lernkurven reduziert.

Antonius
quelle
3

virtualenv --python=/usr/local/bin/python3 <VIRTUAL ENV NAME>Dadurch wird der Python3- Pfad für Ihre virtuelle Umgebung hinzugefügt .

Hardik Gajjar
quelle
2

Es hat bei mir funktioniert

virtualenv --no-site-packages --distribute -p /usr/bin/python3 ~/.virtualenvs/py3
Dadaso Zanzane
quelle
2

Für diejenigen, die Probleme bei der Arbeit mit Anaconda3 (Python 3) haben.

Du könntest benutzen

conda create -n name_of_your_virtualenv python=python_version 

So aktivieren Sie die Umgebung (Linux, MacOS)

source activate name_of_your_virtualenv

Für Windows

activate name_of_your_virtualenv
jkhosla
quelle
1

Ich habe alle oben genannten Dinge ausprobiert, es hat immer noch nicht funktioniert. Als Brute Force habe ich einfach die Anaconda neu installiert, die virtuelle Umgebung neu installiert ... und es hat funktioniert.

Amans-MacBook-Pro:~ amanmadan$ pip install virtualenv
You are using pip version 6.1.1, however version 8.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting virtualenv
  Downloading virtualenv-15.0.3-py2.py3-none-any.whl (3.5MB)
    100% |████████████████████████████████| 3.5MB 114kB/s 
Installing collected packages: virtualenv
Successfully installed virtualenv-15.0.3
Amans-MacBook-Pro:python amanmadan$ virtualenv my_env
New python executable in /Users/amanmadan/Documents/HadoopStuff/python/my_env/bin/python
Installing setuptools, pip, wheel...done.
Amans-MacBook-Pro:python amanmadan$ 
Aman Madan
quelle
1

Ich wollte Python 2.7.5 als Standardversion unter Centos 7 beibehalten, habe aber Python 3.6.1 in einer virtuellen Umgebung, die neben anderen virtuellen Umgebungen in Python 2.x ausgeführt wird

Ich fand den folgenden Link die beste Lösung für die neueste Python-Version (Python 3.6.1) https://www.digitalocean.com/community/tutorial_series/how-to-install-and-set-up-a-local-programming -Umgebung-für-Python-3 . Es zeigt die Schritte für verschiedene Plattformen, aber die grundlegenden Schritte sind

  1. Installieren Sie python3.x (falls nicht vorhanden) für Ihre Plattform
  2. Installieren Sie python3.x-devel für Ihre Plattform
  3. Erstellen Sie eine virtuelle Umgebung in Python 3.x (zum Beispiel $ python3.6 -m venv virenv_test_p3 /)
  4. Aktivieren Sie die Testumgebung für Python 3.x (zum Beispiel Quelle virenv_test_p3 / bin / enabled)
  5. Installieren Sie die Pakete, die Sie in Ihrer neuen virtuellen Python 3-Umgebung verwenden möchten und die unterstützt werden (z. B. pip install Django == 1.11.2).
Gunnar Sigfusson
quelle
1

Mit den folgenden einfachen Befehlen können Sie eine virtuelle Umgebung mit Version 3.5 erstellen

apt-get install python3-venv

python3.5 -m venv <your env name>

Wenn Sie eine virtuelle Env-Version als 3.6 möchten

python3.6 -m venv <your env name>
Hariharan AR
quelle
1

Für diejenigen unter Ihnen, die pipenv verwenden und eine bestimmte Version installieren möchten:

pipenv install --python 3.6
Vlad Bezden
quelle
0

Ich habe den gleichen Fehler erhalten, weil es sich um einen Konflikt mit der Installation von miniconda3 handelt. Wenn Sie also "which virtualenv" eingeben und miniconda installiert haben und es auf diese Installation verweist, können Sie es entweder entfernen (wenn Sie mich mögen und nicht umgezogen sind noch dazu) oder ändern Sie Ihre Umgebungsvariable so, dass sie auf die gewünschte Installation verweist.

PrincessPea
quelle
0

In der Windows-Befehlszeile hat Folgendes für mich funktioniert. Finden Sie zuerst heraus, wo sich Ihre ausführbaren Python-Dateien befinden:

where python

Dadurch werden die Pfade zu den verschiedenen python.exe auf Ihrem System ausgegeben. Hier waren meine:

C:\Users\carandangc\Anaconda3\python.exe
C:\Python27\python.exe

Für Python3 befand sich dies im ersten Pfad für mich, sodass ich in den Stammordner der Anwendung cdte, in dem ich einen Ordner für eine virtuelle Umgebung erstellen möchte. Dann führe ich Folgendes aus, das den Pfad zu meiner ausführbaren Python3-Datei enthält und meine virtuelle Umgebung "venv" nennt:

virtualenv --python=/Users/carandangc/Anaconda3/python.exe venv

Aktivieren Sie als Nächstes die virtuelle Umgebung:

call venv\Scripts\activate.bat

Installieren Sie abschließend die Abhängigkeiten für diese virtuelle Umgebung:

pip install -r requirements.txt

Diese Anforderung.txt kann manuell ausgefüllt werden, wenn Sie die für Ihre Anwendung in der virtuellen Umgebung erforderlichen Bibliotheken / Module kennen. Wenn die Anwendung in einer anderen Umgebung ausgeführt wurde, können Sie die Abhängigkeiten automatisch erstellen, indem Sie Folgendes ausführen (CD in den Anwendungsordner in der Umgebung, in der sie ausgeführt wird):

pip freeze > requirements.txt

Sobald Sie die Anforderung.txt haben, die Sie eingefroren haben, können Sie die Anforderungen auf einem anderen Computer oder in einer sauberen Umgebung wie folgt installieren (nach CD in den Anwendungsordner):

pip install -r requirements.txt

Führen Sie Folgendes aus, um Ihre Python-Version in der virtuellen Umgebung anzuzeigen:

python --version

Dann voila ... Sie haben Python3 in Ihrer virtuellen Umgebung ausgeführt. Ausgabe für mich:

Python 3.7.2
Carlo Carandang
quelle