Как создать virtualenv с Python3.3 в Ubuntu?

46

Я использую Precise Pangolin amd64. Я установил Python 3.3 из ppa: fkrull / deadsnakes.

Теперь я хочу использовать эту новую версию Python в virtualenv. Но как я могу это сделать? Я получаю следующую ошибку:

$ 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

Если вместо этого я явно использую python3.3для вызова virtualenv, я получаю эту ошибку:

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

Я застрял. Любая помощь с благодарностью!

РЕДАКТИРОВАТЬ: Следуя совету @thefourtheye, я очистил свой локальный site-packagesкаталог (фактически только удаление site.py). Теперь я на шаг впереди, но virtualenv жалуется на пропажу 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

Я установил пакет python3-setuptools, который устанавливает версию easy_install для Py3.

EDIT2:

Вот подробный вывод без явной передачи --distributeи --no-site-packages, поскольку эти два параметра являются поведением по умолчанию для моего 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'
андреас-ч
источник
Ради ясности, вы можете попробовать эту команду (исключая distribute) virtualenv --no-site-packages -p /usr/bin/python3.3 ~/.virtualenvs/pywork3:?
don.joey
Я тоже пробовал --setuptools, и результат точно такой же (включая установку дистрибутива).
Андреас-ч
В 14.04 все работает безболезненно.
Антти Хаапала

Ответы:

25
  1. Сделайте резервную копию сайтов-пакетов.

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

  2. Обрезать этот каталог

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

  3. Теперь попробуй то же самое

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

  4. Для установки без пипса

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

РЕДАКТИРОВАТЬ: Похоже, версии virtualenv (1.7.1.2) и python3.3 не совместимы. Пожалуйста, попробуйте это

  1. Удалите python-virtualenv с помощью sudo apt-get remove python-virtualenv

  2. wget http://peak.telecommunity.com/dist/ez_setup.py; sudo python ez_setup.py Это установит последнюю версию 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
источник
Интересно, теперь я на шаг впереди, но все еще не до конца. Смотрите мой обновленный вопрос
andreas-h
Я иду через кодекс virtualenv. Было бы полезно, если бы вы могли выполнить ту же команду с повышенной степенью детализации и показать нам полный вывод. virtualenv --no-site-packages --distribute -p /usr/bin/python3.3 ~/.virtualenvs/pywork3 --verbose
thefourtheye
понял, см. мой обновленный вопрос.
Андреас-ч
Проанализировали более двух часов. Похоже, что дистрибутив не устанавливает скрипты easy_install в директорию bin. Мы можем установить их вручную позже. Так что просто для установки virtualenv попробуйте установить без пипа, как я обновил в ответе
thefourtheye
1
Вместо того, чтобы устанавливать virtualenv вручную, я просто скачал пакет .dev для Ubuntu Raring с packages.ubuntu.com/raring/all/python-virtualenv/download и установил его через dpkg -i. Кажется, сейчас работает. Большое спасибо!
Андреас-ч
58

В Python 3.3 есть встроенный venv.

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

Просто беги

pyvenv-3.3 /path/to/environment

А потом активировать

source /path/to/environment/bin/activate

Эта встроенная версия virtualenv гораздо более гибкая, чем вы, вероятно, привыкли. Например, вы можете расширить EnvBuilder, чтобы делать практически все, что вы хотите. Вы можете скопировать пример реализации EnvBuilder по ссылке ниже и поэкспериментировать с ней: http://docs.python.org/3/library/venv.html#an-example-of-extending-envbuilder

Этот скрипт, скорее всего, делает большую часть того, что мы ожидаем получить от virtualenv. Так что, если вам просто нужен virtualenv с easy_install и pip, вам следует идти вперед.

Посмотрите правки @MarkOfSine ниже для разъяснения того, как начать работать, если вы все еще в замешательстве.


Чтобы добавить к вышесказанному, и в соответствии с документами:
Например, после выполнения: pyvenv-3.3 /path/to/my_project/venv
Вы можете запустить distribute_setup.py, который, кажется, делает разные вещи, но по сути вы в конечном итоге easy_installв вашем ./my_project/venv/binкаталоге.
Это может быть использовано для установки pipи тому подобное.

Там не сказано, откуда вы должны получить distribute_setup.py, поэтому я скачал с:

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

и используя активированную среду:

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

побежал:

python distribute_setup.py

а также

easy_install pip

Который затем завершил настройку виртуальной среды, более встроенной с virtualenv на Python 2.x

Крис
источник
2
хороший - я не знал об этом ...
andreas-h
1
на самом деле, это, кажется, не «настоящий» virtualenv. После активации нет ни pip, ни easy_install.
Андреас-ч
@ andreas-h Вам нужно установить их самостоятельно. Это не делает его не "реальным".
Крис
1
@ andreas-h Кроме того, он спроектирован так, что вы можете создать сценарий для добавления всего, что захотите сами, см. docs.python.org/3/library/…
Крис
Когда ваш терминал продолжает кричать о неправильных разрешениях при установке pip, проверьте, используете ли вы правильный бинарный файл easy_install. Вы можете выбрать двоичный файл в virtualenv явно с помощью ./venv/bin/easy_install pip.
OrangeTux
49

Это проще, чем кажется

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

действительно работает :)

Джем Йилдиз
источник
5
Это должен быть правильный ответ
micgeronimo
Да уж ! Это было супер легко! Спасибо чувак. @Cem Yildiz
Фахад Ахаммед
9

Вы делаете это слишком сложно. Если он включен python3, просто создайте его с помощью:

python3 -m venv

Вы даже можете создать псевдоним, если хотите

alias virtualenv3='python3 -m venv'

В зависимости от машины вам может потребоваться указать интерпретатор:

alias virtualenv3='python3 -m venv -p python3'
txomon
источник
1
Пакет python3-venvтакже необходим, по крайней мере, в Ubuntu 14.04.
gioele
Для меня (тоже 14.04) пакет был назван python3.4-venv.
тобек
на версии 18.04 тоже
фанни
2

Шаги, которые работали для меня: на MAC OSX 10.9.5

  1. Загрузите и установите Python-3.4.3 вручную .

    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. Создать виртуал.

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

Примечание:
virtualenv -p <path to python3> py3envне работает:

Error due to zlib
BRD
источник
Это также хорошо работает на Debian 7 (wheezy). Просто еще один P3PATH
rubo77
Для основан дистрибутив Debian в-контейнере пользователей, убедитесь , что установить libssl-devи zlib1g-devтак , что питон скомпилирован с _ssl.so zlib.so
Nehal J Вани
1
On Ubuntu 14.04 

sudo apt-get install python3-pip

sudo pip install virtualenv

virtualenv-3.4 --no-site-packages venv
L3nn
источник