Як створити virtualenv з Python3.3 в Ubuntu?


46

Я запускаю Precision 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'

Я застряг. Будь-яка допомога дуже вдячна!

EDIT: Дотримуючись поради @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, який встановлює версію Py3 easy_install.

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, і результат точно такий же (включаючи встановлення дистрибутива).
andreas-h

У 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. Встановити без pip

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

EDIT: Схоже, версія 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


цікаво, зараз я роблю крок далі, але все ще не весь шлях. Дивіться моє оновлене запитання
andreas-h

Я переглядаю код virtualenv. Було б корисно, якби ви могли виконати ту саму команду із збільшенням багатослівності та показати нам повний результат. virtualenv --no-site-packages --distribute -p /usr/bin/python3.3 ~/.virtualenvs/pywork3 --verbose
thefourtheye

зрозумів, дивіться моє оновлене запитання.
andreas-h

Проводили аналіз більше двох годин. Схоже, що для дистрибутиву не встановлюється сценарій easy_install у каталозі бін. Пізніше ми можемо встановити їх вручну. Тому просто встановіть virtualenv, спробуйте встановити без pip, як я оновив у відповіді
thefourtheye

1
Замість установки virtualenv вручну, я просто скачав .dev Packge для Ubuntu рвуться з packages.ubuntu.com/raring/all/python-virtualenv/download і встановив його з допомогою dpkg -i. Здається, працює зараз. Дуже дякую!
andreas-h

58

У Python 3.3 є вбудований венв.

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
насправді це, здається, не є "справжнім" віртуалем. Після його активації немає ні піп, ні easy_install.
andreas-h

@ andreas-h Ви повинні їх встановити самостійно. Це не робить його не "справжнім".
Кріс

1
@ Андреас-ч Крім того , вона розроблена таким чином , що ви можете створити сценарій , щоб додати всі , що ви хочете себе .. см docs.python.org/3/library / ...
Chris

Коли термінал постійно кричить про неправильні дозволи під час встановлення 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'

1
Пакет python3-venvтакож потрібен, принаймні, на Ubuntu 14.04.
gioele

Для мене (теж 14.04) пакет називали python3.4-venv.
tobek

на версії 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. Створіть virtualenv.

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

Примітка:
virtualenv -p <path to python3> py3envне працювало:

Error due to zlib

Це також добре працює на 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.