Wie erstelle ich ein Virtualenv mit Python3.3 in Ubuntu?

46

Ich verwende Precise Pangolin amd64. Ich habe Python 3.3 von ppa: fkrull / deadsnakes installiert.

Jetzt möchte ich tatsächlich nutzen diese neue Python - Version in einem virtualenv. Aber wie kann ich das machen? Ich erhalte folgenden Fehler:

$ virtualenv --no-site-packages --distribute -p /usr/bin/python3.3 ~/.virtualenvs/pywork3
Running virtualenv with interpreter /usr/bin/python3.3
The --no-site-packages flag is deprecated; it is now the default behavior.
New python executable in /home2/USERNAME/.virtualenvs/pywork3/bin/python3.3
Also creating executable in /home2/USERNAME/.virtualenvs/pywork3/bin/python
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/site.py", line 73, in <module>
    __boot()
  File "/usr/local/lib/python2.7/site-packages/site.py", line 2, in __boot
    import sys, imp, os, os.path   
ImportError: No module named 'imp'
ERROR: The executable /home2/USERNAME/.virtualenvs/pywork3/bin/python3.3 is not functioning
ERROR: It thinks sys.prefix is '/home2/USERNAME/.virtualenvs' (should be '/home2/USERNAME/.virtualenvs/pywork3')
ERROR: virtualenv is not compatible with this system or executable

Wenn ich stattdessen explizit python3.3virtualenv aufrufe, erhalte ich die folgende Fehlermeldung:

$ python3.3 /usr/bin/virtualenv --no-site-packages --distribute -p /usr/bin/python3.3 ~/.virtualenvs/pywork3
Traceback (most recent call last):
  File "/usr/bin/virtualenv", line 2, in <module>
    import virtualenv
ImportError: No module named 'virtualenv'

Ich stecke fest. Jede Hilfe wird sehr geschätzt!

BEARBEITEN: Nach dem Hinweis von @thefourtheye habe ich mein lokales site-packagesVerzeichnis gelöscht ( praktisch nur gelöscht site.py). Jetzt komme ich noch einen Schritt weiter, aber virtualenv beschwert sich über ein Fehlen easy_install:

 Error [Errno 2] No such file or directory:   
'/home2/USERNAME/.virtualenvs/pywork3/bin/easy_install' while executing command    
/home2/USERNAME/.virt...rk3/bin/easy_install /usr/share/python-virtualenv/pip-1.1.tar.gz

Ich habe das Paket python3-setuptoolsinstalliert, das die Py3-Version von easy_install installiert.

EDIT2:

Hier ist die ausführliche Ausgabe ohne explizite Übergabe von --distributeund --no-site-packages, da diese beiden Schalter das Standardverhalten meiner virtuellen Umgebung sind :

$ virtualenv --verbose -p /usr/bin/python3.3 ~/.virtualenvs/pywork3
Running virtualenv with interpreter /usr/bin/python3.3
Creating /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3
Symlinking Python bootstrap modules
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/config-3.3m
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/lib-dynload
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/os.py
  Ignoring built-in bootstrap module: posix
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/posixpath.py
  Cannot import bootstrap module: nt
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/ntpath.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/genericpath.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/fnmatch.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/locale.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/encodings
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/codecs.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/stat.py
  Cannot import bootstrap module: UserDict
  Cannot import bootstrap module: copy_reg
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/types.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/re.py
  Cannot import bootstrap module: sre
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/sre_parse.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/sre_constants.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/sre_compile.py
  Ignoring built-in bootstrap module: zlib
  Cannot import bootstrap module: _abcoll
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/warnings.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/linecache.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/abc.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/io.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/_weakrefset.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/copyreg.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/tempfile.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/random.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/__future__.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/collections
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/keyword.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/tarfile.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/shutil.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/struct.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/copy.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/base64.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/bisect.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/_dummy_thread.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/hashlib.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/heapq.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/hmac.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/reprlib.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/rlcompleter.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/weakref.py
Creating /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/site-packages
Writing /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/site.py
Writing /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/orig-prefix.txt
Writing /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/no-global-site-packages.txt
Creating parent directories for /home2/USERNAME/.virtualenvs/pywork3/include
Symlinking /home2/USERNAME/.virtualenvs/pywork3/include/python3.3m
Creating /home2/USERNAME/.virtualenvs/pywork3/bin
New python executable in /home2/USERNAME/.virtualenvs/pywork3/bin/python3.3
Changed mode of /home2/USERNAME/.virtualenvs/pywork3/bin/python3.3 to 0o755
Also creating executable in /home2/USERNAME/.virtualenvs/pywork3/bin/python
Changed mode of /home2/USERNAME/.virtualenvs/pywork3/bin/python to 0o755
Testing executable with /home2/USERNAME/.virtualenvs/pywork3/bin/python3.3 -c "
import sys
prefix = sys.prefix
if sys.version_info[0] == 3:
    prefix = prefix.encode('utf8')
if hasattr(sys.stdout, 'detach'):
    sys.stdout = sys.stdout.detach()
elif hasattr(sys.stdout, 'buffer'):
    sys.stdout = sys.stdout.buffer
sys.stdout.write(prefix)
"
Got sys.prefix result: '/home2/USERNAME/.virtualenvs/pywork3'
Creating /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/distutils
Writing /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/distutils/__init__.py
Writing /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/distutils/distutils.cfg
Using existing distribute egg: /usr/share/python-virtualenv/distribute-0.6.24.tar.gz
Installing distribute..............................................................................................................................................................................................................................................................................................................................................................................................................done.
Installing existing pip-1.1.tar.gz distribution: /usr/share/python-virtualenv/pip-1.1.tar.gz
Installing pip...
  Error [Errno 2] No such file or directory: '/home2/USERNAME/.virtualenvs/pywork3/bin/easy_install' while executing command /home2/USERNAME/.virt...rk3/bin/easy_install /usr/share/python-virtualenv/pip-1.1.tar.gz
...Installing pip...done.
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 2283, in <module>
    main()
  File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 938, in main
    never_download=options.never_download)
  File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 1054, in create_environment
    install_pip(py_executable, search_dirs=search_dirs, never_download=never_download)
  File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 643, in install_pip
    filter_stdout=_filter_setup)
  File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 976, in call_subprocess
    cwd=cwd, env=env)
  File "/usr/lib/python3.3/subprocess.py", line 818, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.3/subprocess.py", line 1416, in _execute_child
    raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: '/home2/USERNAME/.virtualenvs/pywork3/bin/easy_install'
andreas-h
quelle
Nur der Übersichtlichkeit halber, können Sie diesen Befehl versuchen (ohne distribute): virtualenv --no-site-packages -p /usr/bin/python3.3 ~/.virtualenvs/pywork3?
don.joey
Ich habe es auch mit versucht --setuptools, und das Ergebnis ist genau das gleiche (einschließlich der Installation von Distribute).
Andreas-h
In 14.04 funktioniert alles reibungslos.
Antti Haapala

Antworten:

25
  1. Sichern Sie Ihre Site-Pakete.

    cp -r /usr/local/lib/python2.7/site-packages/ /tmp/site-packages

  2. Schneiden Sie dieses Verzeichnis ab

    rm -rf /usr/local/lib/python2.7/site-packages/

  3. Versuchen Sie es jetzt gleich

    virtualenv --no-site-packages --distribute -p /usr/bin/python3.3 ~/.virtualenvs/pywork3

  4. Ohne Pip zu installieren

    virtualenv --no-site-packages --distribute -p /usr/bin/python3.3 ~/.virtualenvs/pywork3 --no-pip

EDIT: Es sieht so aus, als ob die Versionen von virtualenv (1.7.1.2) und python3.3 nicht kompatibel sind. Also, bitte versuchen Sie dies

  1. Deinstallieren Sie python-virtualenv mit sudo apt-get remove python-virtualenv

  2. wget http://peak.telecommunity.com/dist/ez_setup.py; sudo python ez_setup.py Dadurch wird die neueste Version von easy_install installiert.

  3. sudo easy_install pip

  4. sudo pip install virtualenv

  5. virtualenv --no-site-packages --distribute -p /usr/bin/python3.3 ~/.virtualenvs/pywork3

thefourtheye
quelle
Interessant, jetzt komme ich einen Schritt weiter, aber immer noch nicht den ganzen Weg dorthin. Siehe meine aktualisierte Frage
andreas-h
Ich gehe den VirtualenV-Code durch. Es wäre hilfreich, wenn Sie den gleichen Befehl mit größerer Ausführlichkeit ausführen und uns die vollständige Ausgabe zeigen könnten. virtualenv --no-site-packages --distribute -p /usr/bin/python3.3 ~/.virtualenvs/pywork3 --verbose
thefourtheye
habe es, siehe meine aktualisierte Frage.
Andreas-h
Haben mehr als zwei Stunden lang analysiert. Anscheinend installiert Distribute die easy_install-Skripte nicht im bin-Verzeichnis. Wir können sie später manuell installieren. Also, nur um virtualenv zu installieren, versuchen Sie es ohne Pip, wie ich in der Antwort aktualisiert habe
thefourtheye
1
Anstatt virtualenv manuell zu installieren, habe ich einfach das .dev-Paket für Ubuntu Raring von packages.ubuntu.com/raring/all/python-virtualenv/download heruntergeladen und über installiert dpkg -i. Scheint jetzt zu arbeiten. Danke vielmals!
Andreas-h
58

In Python 3.3 ist venv integriert.

http://docs.python.org/3/library/venv.html#module-venv

Einfach rennen

pyvenv-3.3 /path/to/environment

Und dann, um es zu aktivieren

source /path/to/environment/bin/activate

Diese integrierte Version von virtualenv ist viel flexibler als Sie es wahrscheinlich gewohnt sind. Beispielsweise können Sie EnvBuilder so erweitern, dass Sie so ziemlich alles tun, was Sie wollen. Sie können eine Beispielimplementierung von EnvBuilder über den folgenden Link kopieren und damit herumspielen: http://docs.python.org/3/library/venv.html#an-example-of-extending-envbuilder

Das obige Skript macht wahrscheinlich das meiste, was wir von virtualenv erwarten. Wenn Sie also nur ein virtuelles Env mit easy_install und pip benötigen, sollten Sie bereit sein.

In den folgenden Änderungen von @MarkOfSine erfahren Sie , wie Sie loslegen können , wenn Sie immer noch verwirrt sind.


Um dies zu ergänzen und wie in den Dokumenten beschrieben:
Zum Beispiel nach der Ausführung: pyvenv-3.3 /path/to/my_project/venv
Sie können ausführen distribute_setup.py, was verschiedene Dinge zu tun scheint, aber im Grunde landen Sie easy_installin Ihrem ./my_project/venv/binVerzeichnis.
Dies kann dann zum Installieren pipund dergleichen verwendet werden.

Es steht nicht fest, woher Sie es nehmen sollen distribute_setup.py, also habe ich es heruntergeladen von:

http://python-distribute.org/distribute_setup.py

und unter Verwendung der aktivierten Umgebung:

cd /path/to/my_project
source venv/bin/activate

lief:

python distribute_setup.py

und

easy_install pip

Womit dann die Einrichtung der virtuellen Umgebung mehr inline mit virtualenv auf Python 2.x abgeschlossen ist

Chris
quelle
2
nett - ich war mir dessen nicht bewusst ...
andreas-h
1
eigentlich scheint dies kein "reales" virtualenv zu sein. Nach der Aktivierung ist weder pip noch easy_install verfügbar.
andreas-h
@ andreas-h Diese müssen Sie selbst installieren. Das macht es nicht "echt".
Chris
1
@ andreas-h Außerdem ist es so konzipiert, dass Sie ein Skript erstellen können, mit dem Sie alles selbst hinzufügen können, was Sie möchten. Siehe docs.python.org/3/library/…
Chris,
Wenn Ihr Terminal bei der Installation von pip immer wieder nach falschen Berechtigungen fragt, prüfen Sie, ob Sie die richtige Binärdatei von easy_install verwenden. Sie können die Binärdatei in der virtuellen Umgebung explizit durch auswählen ./venv/bin/easy_install pip.
OrangeTux
49

Es ist einfacher als es scheint:

virtualenv -p /usr/bin/python3 yourenv
source yourenv/bin/activate
pip install package-name

funktioniert wirklich :)

Cem Yildiz
quelle
5
Das sollte die richtige Antwort sein
micgeronimo
Ja! Das war super einfach! Danke, Mann. @Cem Yildiz
Fahad Ahammed
8

Du machst das viel zu kompliziert. Wenn es in enthalten ist python3, erstellen Sie es einfach mit:

python3 -m venv

Sie können sogar einen Alias ​​erstellen, wenn Sie möchten

alias virtualenv3='python3 -m venv'

Je nach Computer müssen Sie möglicherweise den Interpreter angeben:

alias virtualenv3='python3 -m venv -p python3'
txomon
quelle
Das Paket python3-venvwird auch benötigt, zumindest unter Ubuntu 14.04.
Gioele
Für mich (auch am 14.04) hieß das Paket python3.4-venv.
Tobek
2

Die Schritte, die bei mir funktionierten: Unter MAC OSX 10.9.5

  1. Laden Sie Python-3.4.3 manuell herunter und installieren Sie es .

    P3PATH=/Users/$USER/Python3
    mkdir -p $P3PATH
    cd $P3PATH
    tar -zxvf Python-3.4.3.tgz
    ./configure --prefix=$P3PATH/Python-3.4.3
    make; make install
    
  2. Erstellen Sie eine virtuelle Umgebung.

    $P3PATH/Python-3.4.3/bin/pyvenv py3env
    source py3env/bin/activate
    

Hinweis:
virtualenv -p <path to python3> py3envhat nicht funktioniert:

Error due to zlib
BRD
quelle
Dies funktioniert auch gut unter Debian 7 (wheezy). Nur ein weiterer P3PATH
rubo77
Für die Debian - basierten Distribution in-a-Container Benutzer, stellen Sie sicher, zu installieren libssl-devund zlib1g-devso , dass Python mit _ssl.so zlib.so zusammengestellt
Nehal J Wani
1
On Ubuntu 14.04 

sudo apt-get install python3-pip

sudo pip install virtualenv

virtualenv-3.4 --no-site-packages venv
L3nn
quelle