Jak stworzyć virtualenv z Python3.3 w Ubuntu?

46

Używam Precise Pangolin amd64. Zainstalowałem Python 3.3 z ppa: fkrull / deadsnakes.

Teraz chcę używać tej nowej wersji Pythona w virtualenv. Ale jak mogę to zrobić? Otrzymuję następujący błąd:

$ 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

Jeśli zamiast tego jawnie używam python3.3do wywołania virtualenv, pojawia się ten błąd:

$ 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'

Utknąłem. Każda pomoc jest mile widziana!

EDYCJA: Postępując zgodnie z radą @thefourtheye, wyczyściłem mój site-packageskatalog lokalny (skutecznie tylko usuwając site.py). Teraz idę o krok dalej, ale virtualenv narzeka na brak 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

Zainstalowałem pakiet python3-setuptools, który instaluje wersję easy_install Py3.

EDYCJA 2:

Oto pełne wyjście, bez jawnego przekazania, --distributea --no-site-packagesponieważ te dwa przełączniki są domyślnym zachowaniem mojego virtualenv :

$ 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
źródło
Dla jasności możesz wypróbować to polecenie (z wyjątkiem distribute) virtualenv --no-site-packages -p /usr/bin/python3.3 ~/.virtualenvs/pywork3:?
don.joey
Próbowałem --setuptoolsrównież z, a wynik jest dokładnie taki sam (w tym instalacja dystrybucji).
andreas-h
W 14.04 wszystko działa bezboleśnie.
Antti Haapala

Odpowiedzi:

25
  1. Wykonaj kopię zapasową pakietów witryn.

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

  2. Obetnij ten katalog

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

  3. Teraz spróbuj tego samego

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

  4. Aby zainstalować bez pip

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

EDYCJA: Wygląda na to, że wersja virtualenv (1.7.1.2) i python3.3 nie są kompatybilne. Więc spróbuj tego

  1. Odinstaluj python-virtualenv przy użyciu sudo apt-get remove python-virtualenv

  2. wget http://peak.telecommunity.com/dist/ez_setup.py; sudo python ez_setup.py Spowoduje to zainstalowanie najnowszej wersji easy_install.

  3. sudo easy_install pip

  4. sudo pip install virtualenv

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

thefourtheye
źródło
ciekawe, teraz robię krok dalej, ale wciąż nie do końca. Zobacz moje zaktualizowane pytanie
andreas-h
Przeglądam kod virtualenv. Byłoby pomocne, gdybyś mógł wykonać to samo polecenie ze zwiększoną szczegółowością i pokazać nam pełne wyjście. virtualenv --no-site-packages --distribute -p /usr/bin/python3.3 ~/.virtualenvs/pywork3 --verbose
theourourhehe 11.04.13
rozumiem, zobacz moje zaktualizowane pytanie.
andreas-h
Analizuję od ponad dwóch godzin. Wygląda na to, że dystrybucja nie instaluje skryptów easy_install w katalogu bin. Możemy zainstalować je później ręcznie. Więc po prostu zainstaluj virtualenv, spróbuj zainstalować bez pip, ponieważ zaktualizowałem w odpowiedzi
thefourtheye 11.04.13
1
Zamiast instalować virtualenv ręcznie, po prostu pobrane packge .dev dla Ubuntu zapalony od packages.ubuntu.com/raring/all/python-virtualenv/download i zainstalować go za pomocą dpkg -i. Wygląda na to, że teraz działa. Wielkie dzięki!
andreas-h
58

Python 3.3 ma wbudowane venv.

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

Po prostu biegnij

pyvenv-3.3 /path/to/environment

A następnie, aby go aktywować

source /path/to/environment/bin/activate

Ta wbudowana wersja virtualenv jest znacznie bardziej elastyczna niż ta, do której prawdopodobnie jesteś przyzwyczajony. Na przykład możesz rozszerzyć EnvBuilder, aby robił prawie wszystko, co chcesz. Możesz skopiować przykładową implementację EnvBuilder z linku poniżej i pobawić się nią: http://docs.python.org/3/library/venv.html#an-example-of-extending-envbuilder

Powyższy skrypt prawdopodobnie wykonuje większość tego, czego oczekujemy od virtualenv. Więc jeśli potrzebujesz tylko virtualenv z easy_install i pip, powinieneś być gotowy.

Zobacz zmiany @MarkOfSine poniżej, aby uzyskać wyjaśnienie, jak uruchomić, jeśli nadal jesteś zdezorientowany.


Aby dodać do powyższego i zgodnie z dokumentami:
Na przykład po wykonaniu: pyvenv-3.3 /path/to/my_project/venv
Możesz uruchomić distribute_setup.py, co wydaje się robić różne rzeczy, ale zasadniczo kończy się easy_installw ./my_project/venv/binkatalogu.
Można go następnie użyć do instalacji pipi tym podobnych.

Nie mówi, skąd powinieneś się dostać distribute_setup.py, więc pobrałem z:

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

i za pomocą aktywowanego środowiska:

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

biegł :

python distribute_setup.py

i

easy_install pip

Który następnie zakończył konfigurację środowiska wirtualnego bardziej zintegrowany z virtualenv na python 2.x

Chris
źródło
2
miło - nie wiedziałem o tym ...
andreas-h
1
w rzeczywistości wydaje się, że nie jest to „prawdziwy” virtualenv. Po aktywacji nie jest dostępny ani pip ani easy_install.
andreas-h
@ andreas-h Musisz je zainstalować samodzielnie. To nie oznacza, że ​​to nie jest „prawdziwe”.
Chris
1
@ andreas-h Ponadto jest zaprojektowany tak, abyś mógł stworzyć skrypt, aby dodać wszystko, co chcesz sam .. zobacz docs.python.org/3/library/…
Chris
Gdy terminal będzie krzyczał na temat niewłaściwych uprawnień podczas instalacji pip, sprawdź, czy używasz prawidłowego pliku binarnego easy_install. Możesz wybrać plik binarny w virtualenv jawnie przez ./venv/bin/easy_install pip.
OrangeTux,
49

To łatwiejsze niż się wydaje:

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

naprawdę działa :)

Cem Yildiz
źródło
5
To powinna być poprawna odpowiedź
micgeronimo,
Tak ! To było bardzo proste! Dzięki. @Cem Yildiz
Fahad Ahammed
9

Robisz to zbyt skomplikowane. Jeśli jest uwzględniony python3, po prostu utwórz go za pomocą:

python3 -m venv

Możesz nawet utworzyć alias, jeśli chcesz

alias virtualenv3='python3 -m venv'

W zależności od komputera może być konieczne określenie interpretera:

alias virtualenv3='python3 -m venv -p python3'
txomon
źródło
1
Pakiet python3-venvjest także potrzebny, przynajmniej w Ubuntu 14.04.
gioele
Dla mnie (także 14.04) pakiet został wywołany python3.4-venv.
tobek
również w wersji 18.04
fanny
2

Kroki, które zadziałały dla mnie: w systemie Mac OSX 10.9.5

  1. Pobierz i zainstaluj Python-3.4.3 ręcznie .

    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. Utwórz virtualenv.

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

Uwaga:
virtualenv -p <path to python3> py3envnie działa:

Error due to zlib
BRD
źródło
Działa to również dobrze na Debianie 7 (wheezy). Kolejny P3PATH
rubo77
Dla użytkowników dystrybucyjnych opartych na Debianie w kontenerze, upewnij się, że zainstalowałeś libssl-devi zlib1g-devaby Python został skompilowany z _ssl.so zlib.so
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
źródło