Использование VirtualEnv с несколькими версиями Python в Windows

У меня есть Python 2.7.6 и 3.4.0 на моей машине. Версия 2.7 у меня на пути. Я хотел бы настроить virtualenv с помощью 3.4. Существует много публикаций на SO и в других местах, в которых предлагается сделать следующее из командной строки:

virtualenv -p c:\python34 myvirtualenv

но это не работает для меня. Сеанс консоли имеет права администратора, а UAC отключен, однако у меня возникает проблема с разрешениями:

F:\virtualenv>virtualenv -p c:\python34 myenv
Running virtualenv with interpreter c:\python34
Traceback (most recent call last):
  File "c:\python27\scripts\virtualenv-script.py", line 9, in <module>
    load_entry_point('virtualenv==1.11', 'console_scripts', 'virtualenv')()
  File "C:\Python27\lib\site-packages\virtualenv.py", line 779, in main
    popen = subprocess.Popen([interpreter, file] + sys.argv[1:], env=env)
  File "C:\Python27\lib\subprocess.py", line 709, in __init__
    errread, errwrite)
  File "C:\Python27\lib\subprocess.py", line 957, in _execute_child
    startupinfo)
WindowsError: [Error 5] Access is denied

Я также попробовал это, в частности, указав версию 3.4 virtualenv, но без изменения пути он завершает выполнение смешанного пакета из 2.7 и 3.4 файлов python.

Единственный способ найти виртуальную среду - это изменить мой путь на 3.4, запустить virtualenv, а затем сбросить мой путь до 2.7, что лишает точку переключения python на virtualenv.

Спасибо

4 ответа

Решение

Лучше:

py -3.4 -m venv c:\path\to\wherever\you\want\it

Если у вас нет py.exe лаунчер (но его надо установить) можно заменить py -3.4 с c:\Python34\python.exe (при условии расположения по умолчанию)


Это работает из-за удобного денди, Windows-версии, супер приятного выбора времени выполнения py.exe

По умолчанию, py.exe будет присутствовать при установке Windows (я думаю, что это идет с 2.7, я знаю, что это происходит с 3+). Когда ты бежишь py тогда он будет искать некоторые переменные среды или вы можете переопределить это с конкретным номером версии (в вашем случае -2.7или же -3.4) Вы можете оставить .4 и он выберет "самый большой" младший номер версии.

Вы также можете использовать его для запуска скриптов Python. Если вы поместите строку хэш-взрыва в верхней части вашего сценария #!python3 и назовите это py myscript.py затем он выберет правильную версию Python для начала, выполнив поиск в первой строке скрипта и выполнив поиск номера версии.

Это круто, потому что вы можете поставить что-то вроде #!/usr/bin/env python3.4 в верхней части вашего скрипта и запустить его в Windows с pyили на Linux, выполнив

$ chmod +x myscript.py
$ ./myscript.py

Довольно полезно.

Под Windows вам нужно запустить:

virtualenv -p c:\python34.exe myvirtualenv

.Exe в конце имеет все значение.

Пришлось поиграть с этим какое-то время, чтобы сделать это правильно. Если бы у вас был установлен Python2.7.9 (Windows 7), он хотел взять последнюю версию Python3. После установки Python3.4.3 я перешел на панель каталогов и создал виртуальную среду foo с помощью этой команды:

virtualenv -p c:\Python34\python.exe foo

Мне потребовалось некоторое время, чтобы понять, что мне нужно установить интерпретатор Python3.4.3 "обычным образом", я изначально думал, что он будет установлен с ИСПОЛЬЗОВАНИЕМ virtualenv. Это было объяснено в этом ответе. Я не трогал pythonpath в Windows после установки Python3.4.3.

Если вышеуказанные меры не работают, попробуйте это (используя venv вместо virtualenv):

python -m venv venvname

(замените python на путь python.exe, если он не указан в настройках пути переменной среды)

Используя GitBash в Windows, у меня возникли некоторые проблемы с тем, чтобы заставить это работать.

У меня был Python 3.6 по пути Windows, но я пытался создать виртуальную среду Python 2.7 для тестирования старого проекта.

В конце концов получил его через:

1. adding the C:\Python27 path to my Windows environment variables 
2. virtualenv -p c:/python27/python.exe venvname

(а до этого мне приходилось ломать голову над добавлением модуля virtualenv)

Вы можете использовать команду virtualenv следующим образом

virtualenv --python=C:\python34\python.exe myvirtualenv

Пример для Python 3.7

virtualenv --python=C:\Users\hp\AppData\Local\Programs\Python\Python37\python.exe myenv
Другие вопросы по тегам