Использование Python 3 в virtualenv

Используя virtualenv, я запускаю свои проекты с версией Python по умолчанию (2.7). В одном проекте мне нужно использовать Python 3.4.

Я использовал brew install python3, чтобы установить его на свой Mac. Теперь, как мне создать virtualenv, использующий новую версию?

например sudo virtualenv envPython3

Если я попробую:

virtualenv -p python3 test

Я получил:

Running virtualenv with interpreter /usr/local/bin/python3
Using base prefix '/usr/local/Cellar/python3/3.4.0_1/Frameworks/Python.framework/Versions/3.4'
New python executable in test/bin/python3.4
Also creating executable in test/bin/python
Failed to import the site module
Traceback (most recent call last):
  File "/Users/user/Documents/workspace/test/test/bin/../lib/python3.4/site.py", line 67, in <module>
    import os
  File "/Users/user/Documents/workspace/test/test/bin/../lib/python3.4/os.py", line 634, in <module>
    from _collections_abc import MutableMapping
ImportError: No module named '_collections_abc'
ERROR: The executable test/bin/python3.4 is not functioning
ERROR: It thinks sys.prefix is '/Users/user/Documents/workspace/test' (should be '/Users/user/Documents/workspace/test/test')
ERROR: virtualenv is not compatible with this system or executable

person Prometheus    schedule 24.05.2014    source источник
comment
вы пробовали обновлять интерпретатор только в текущей среде или просто решили начать с нуля?   -  person Charlie Parker    schedule 29.08.2016
comment
Можно ли установить python3 только в виртуальной среде без обновления системного python (сохраняющегося в python2.x) на Mac?   -  person Lucien    schedule 16.03.2020


Ответы (22)


просто беги

virtualenv -p python3 envname

Обновление после редактирования OP:

Ошибка в версии virtualenv для OP, как описано здесь. Проблема была устранена запуском:

pip install --upgrade virtualenv
person tbrisker    schedule 24.05.2014
comment
Обновление virtualenv сработало, но по какой-то причине мне также пришлось четко указать исполняемый файл python3 с virtualenv -p $(which python3) envname - person dkamins; 08.11.2014
comment
Можно ли просто изменить интерпретатор python текущей среды, а не создавать новую среду? - person Charlie Parker; 29.08.2016
comment
На Raspbian Jessie работал 'virtualenv --no-site-packages python3.4'. --distribute устарел, а -p не кажется необходимым, поскольку virtualenv использует python3. - person alkopop79; 10.11.2017
comment
Почему после запуска virtualenv -p python3 my_virtual_env, python3 также доступен извне виртуальной среды? - person Bishwas Mishra; 17.04.2018
comment
@CharlieParker Вы можете выполнить следующие два шага последовательно: 1. Удалите каталоги bin, lib, include, local и share в корневом каталоге вашего проекта. 2. При запуске терминала: virtualenv -p python3 ., который инициализирует новый виртуальный сервер Python3 в текущем каталоге. - person Calleniah; 06.01.2019
comment
Для окон я использую: py -3.7 -m venv . - person Omar Gonzales; 04.01.2020
comment
После этого вам нужно использовать cd envname и запустить source ./bin/activate - это запустит виртуальную среду. Используйте deactivate, чтобы выйти из этой виртуальной среды. - person Immersion; 12.03.2020

Python 3 имеет встроенную поддержку виртуальных сред - venv . Возможно, лучше было бы использовать это вместо этого. Ссылаясь на документы:

Создание виртуальных сред выполняется путем выполнения скрипта pyvenv:

pyvenv /path/to/new/virtual/environment

Обновление для Python 3.6 и новее:

Как pawciobiel правильно комментарии, pyvenv устарело начиная с Python 3.6, и новый способ:

python3 -m venv /path/to/new/virtual/environment
person geckon    schedule 14.05.2015
comment
Надеюсь, вы правы, так как я только что оставил virtualenv, чтобы работать с pyenv вместе с python 3.5.2 - person Jayesh; 27.09.2016
comment
Я не нашел никакой информации, подтверждающей опасения, связанные с местоположением, перемещаемый был удален как опция .... теперь это не нужно? их обходной путь? или сейчас совсем бесполезно готовить приложение? - person J. M. Becker; 28.09.2016
comment
Точно, но вы также можете запустить: python3 -m venv /path/v3, поскольку скрипт pyvenv устарел в Python 3.6. - person pawciobiel; 19.11.2016
comment
используя последнюю версию anaconda python 3.6 на Mac, и python3 -m venv /path/v3 ошибки здесь. Error: Command '['/path/v3/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit Я что-то упускаю? С опцией --without-pip он, по крайней мере, правильно создает venv со скриптами активации / деактивации. - person monkut; 06.03.2017
comment
Вы правы, но я думаю, это скорее проблема конфигурации ... не совсем вопрос программирования. - person monkut; 06.03.2017
comment
Кто-нибудь знает, как активировать python3.6 -m venv ‹venvname›. В созданном каталоге нет скриптов / и нет активации в подкаталоге bin /. - person Shayne; 19.09.2017
comment
Venv доступен по умолчанию в Python 3.3 и более поздних версиях и устанавливает pip и setuptools в созданные виртуальные среды в Python 3.4 и более поздних версиях. Packaging.python.org/tutorials/installing-packages/ Просто комментирую, что он доступен до упомянутой версии 3.6. - person Sn3akyP3t3; 10.12.2017
comment
@Shayne Активировать source my_env/bin/activate - person Yogesh Kushwaha; 16.03.2021

Я пробовал pyenv, и это очень удобно для переключения версий Python (глобальная, локальная в папке или в virtualenv):

brew install pyenv

затем установите нужную версию Python:

pyenv install 3.5.0

и просто создайте virtualenv с путем к необходимой версии интерпретатора:

virtualenv -p /Users/johnny/.pyenv/versions/3.5.0/bin/python3.5 myenv

Вот и все, проверьте версию:

. ./myenv/bin/activate && python -V

Есть также плагин для pyenv pyenv-virtualenv, но у меня он почему-то не сработал.

person Johnner    schedule 19.09.2015
comment
похоже, что ваш метод требует создания новой среды Python. Может ли pyenv работать с virtualenv и просто изменять мою версию python, когда я захочу? - person Charlie Parker; 29.08.2016

Установите необходимые компоненты.

sudo apt-get install python3 python3-pip virtualenvwrapper

Создайте виртуальную среду на основе Python3. При желании включите флаг --system-site-packages.

mkvirtualenv -p /usr/bin/python3 <venv-name>

Установите в виртуальную среду.

workon <venv-name>

Установите другие требования с помощью pip диспетчера пакетов.

pip install -r requirements.txt
pip install <package_name>

При одновременной работе над несколькими проектами Python обычно рекомендуется устанавливать общие пакеты, такие как pdbpp, глобально, а затем повторно использовать их в virtualenvs.

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

sudo -H pip3 -v install pdbpp
mkvirtualenv -p $(which python3) --system-site-packages <venv-name>

Специальные инструкции Django

Если существует много общесистемных пакетов python, рекомендуется не использовать флаг --system-site-packages, особенно во время разработки, поскольку я заметил, что он сильно замедляет запуск Django. Я предполагаю, что инициализация среды Django вручную сканирует и добавляет все пакеты сайта из системного пути, что может быть причиной. Даже python manage.py shell становится очень медленным.

Сказав тот эксперимент, какой вариант работает лучше. Может быть безопасно просто пропустить --system-site-packages флаг для проектов Django.

person Sandeep    schedule 19.03.2016
comment
Я применил это к OSX, это сработало (за исключением того, что не использовал apt-get, а brew) - person ; 31.10.2017

virtualenv --python=/usr/bin/python3 <name of env>

работал у меня.

person bewithaman    schedule 22.12.2015
comment
Я пробовал это, но мне сказали The executable python3 (from --python=python3) does not exist, что бы вы сделали? Я хотел сварить не весь python3, но не был уверен, хорошая ли это идея или моя система запутается в том, какую версию python я использую. - person Charlie Parker; 29.08.2016
comment
Прекрасно работает в Ubuntu 16.04! - person Eric Vieira; 10.01.2017

Вы можете указать конкретную версию Python при создании среды.
Она упоминается в virtualenv.py

virtualenv --python=python3.5 envname

В некоторых случаях это должен быть полный путь к исполняемому файлу:

virtualenv --python=/Users/username/.pyenv/versions/3.6.0/bin/python3.6 envname

Как -p работает

parser.add_option(
    '-p', '--python',
    dest='python',
    metavar='PYTHON_EXE',
    help='The Python interpreter to use, e.g., --python=python3.5 will use the python3.5 '
    'interpreter to create the new environment.  The default is the interpreter that '
    'virtualenv was installed with (%s)' % sys.executable)
person Kiran Jasvanee    schedule 08.02.2018
comment
это лучший ответ здесь - person Collier; 11.04.2020

Это все, что вам нужно, чтобы запустить виртуальную среду в python / python3.

Сначала, если virtualenv не установлен, запустите

pip3 install virtualenv 

Теперь беги:

virtualenv -p python3 <env name> 

Иногда cmd virtualenv дает сбой, в таком случае используйте следующее:

python3 -m virtualenv <env_name>  # you can specify full path instead <env_name> to install the file in a different location other than the current location

Теперь активируйте виртуальную среду:

source <env_name>/bin/activate

Or:

source `pwd`/<env_name>/bin/activate

Теперь беги

which python

Вы должны увидеть полный путь к своему каталогу и суффикс <env_name>/bin/python

Чтобы выйти из virtualenv, запустите:

deactivate 
person Kohn1001    schedule 14.01.2019

У меня было такое же ERROR сообщение. Решение tbrisker не сработало в моем случае. Вместо этого это решило проблему:

$ python3 -m venv .env
person Aziz Alto    schedule 11.09.2017

В дополнение к другим ответам я рекомендую проверить, какой экземпляр virtualenv вы выполняете:

which virtualenv

Если это что-то обнаруживает в / usr / local / bin, то возможно - даже вероятно - что вы установили virtualenv (возможно, используя экземпляр easy_tools или pip) без использования диспетчера пакетов вашей системы (brew в случае OP). Это была моя проблема.

Много лет назад - когда я был еще более невежественным - я установил virtualenv, и он маскировал виртуальный сервер, предоставляемый моей системой.

После удаления этого старого, сломанного virtualenv мои проблемы исчезли.

person sage    schedule 21.06.2015

Теперь Python поставляется с собственной реализацией виртуальной среды под названием «venv». Я бы предложил использовать это вместо virtualenv.

Цитата из venv - docs,

Не рекомендуется с версии 3.6: pyvenv был рекомендованным инструментом для создания виртуальных сред для Python 3.3 и 3.4, а в Python 3.6 не рекомендуется.

Изменено в версии 3.5: Теперь рекомендуется использовать venv для создания виртуальных сред.

Для окон, чтобы запустить venv в каком-либо проекте, откройте cmd:

python -m venv "c:\path\to\myenv"

(Предлагаю использовать двойные кавычки вокруг пути к каталогу, если он содержит пробелы. Пример: «C: / My Dox / Spaced Directory / Something»)

После настройки venv вы увидите несколько новых папок в каталоге вашего проекта. Один из них - «Скрипты».

Для активации или вызова venv вам необходимо:

C:\> <venv>\Scripts\activate.bat

Вы можете деактивировать виртуальную среду, набрав «деактивировать» в своей оболочке. Теперь вы готовы к установке специфичных для вашего проекта библиотек, которые будут находиться в папке «Lib».

================================ Редактировать 1 ================ ==================== Сценарий, который будет обсуждаться ниже, не является тем, о чем изначально просили, просто добавьте его на случай, если кто-то использует vscode с расширением python

В случае, если вы используете код vs с его расширением python, вы можете столкнуться с проблемой с его pylint, который указывает на глобальную установку. В этом случае pylint не сможет видеть модули, установленные в вашей виртуальной среде, и, следовательно, будет показывать ошибки при импорте.

Вот простой способ обойти это.

cd Workspace\Scripts
.\Activate.ps1
code .

По сути, мы сначала активируем среду, а затем вызываем vs-code, чтобы pylint запускался в среде и мог видеть все локальные пакеты.

person Blaze    schedule 16.02.2017
comment
Я использую virtualenv для повседневного использования виртуальных сред (workon и т. Д.), Но для надежного создания новых виртуальных сред в python3.x это единственный способ, который, как я обнаружил, работает. - person Bobble; 12.04.2017

В python3.6 я пробовал python3 -m venv myenv, согласно документации, но это длилось очень долго. Итак, очень простая и быстрая команда python -m venv yourenv Она работала для меня на python3.6.

person Sujeet Agrahari    schedule 09.02.2018

Приведенные ниже простые команды могут создать виртуальный env с версией 3.5.

apt-get install python3-venv

python3.5 -m venv <your env name>

если вы хотите виртуальную версию env как 3.6

python3.6 -m venv <your env name>
person Hariharan AR    schedule 20.11.2019

На Mac мне пришлось сделать следующее, чтобы заставить его работать.

mkvirtualenv --python=/usr/bin/python3 YourEnvNameHere
person Stryker    schedule 07.10.2016
comment
Чтобы точно определить, где находится желаемая версия Python, используйте which python2.7, which python3.5 или which python3.6, затем замените about --python=DIRECTORY - person Santhosh; 08.03.2018

Если вы устанавливаете python3 (brew install python3) вместе с virtualenv burrito, вы можете делать mkvirtualenv -p $(which python3) env_name

Конечно, я знаю, что буррито virtualenv - это всего лишь оболочка, но она хорошо мне служила на протяжении многих лет, сокращая некоторые кривые обучения.

person Antony    schedule 15.01.2016

virtualenv --python=/usr/local/bin/python3 <VIRTUAL ENV NAME> это добавит путь python3 для вашей виртуальной среды.

person Hardik Gajjar    schedule 14.04.2017

Это сработало для меня

virtualenv --no-site-packages --distribute -p /usr/bin/python3 ~/.virtualenvs/py3
person Dadaso Zanzane    schedule 09.10.2015

Для тех, у кого проблемы при работе с Anaconda3 (Python 3).

Вы могли бы использовать

conda create -n name_of_your_virtualenv python=python_version 

Для активации среды (Linux, MacOS)

source activate name_of_your_virtualenv

Для Windows

activate name_of_your_virtualenv
person jkhosla    schedule 20.05.2017

Я перепробовал все вышеперечисленное, но ничего не вышло. Итак, грубой силой я просто переустановил анаконду, переустановил virtualenv ... и это сработало.

Amans-MacBook-Pro:~ amanmadan$ pip install virtualenv
You are using pip version 6.1.1, however version 8.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting virtualenv
  Downloading virtualenv-15.0.3-py2.py3-none-any.whl (3.5MB)
    100% |████████████████████████████████| 3.5MB 114kB/s 
Installing collected packages: virtualenv
Successfully installed virtualenv-15.0.3
Amans-MacBook-Pro:python amanmadan$ virtualenv my_env
New python executable in /Users/amanmadan/Documents/HadoopStuff/python/my_env/bin/python
Installing setuptools, pip, wheel...done.
Amans-MacBook-Pro:python amanmadan$ 
person Aman Madan    schedule 30.09.2016

Я хотел сохранить python 2.7.5 в качестве версии по умолчанию на Centos 7, но иметь python 3.6.1 в виртуальной среде, работающей вместе с другими виртуальными средами в python 2.x

Я нашел приведенную ниже ссылку - лучшее решение для новейшей версии Python (python 3.6.1) https://www.digitalocean.com/community/tutorial_series/how-to-install-and-set-up-a-local-programming-environment-for-python-3. Он показывает шаги для разных платформ, но основные шаги

  1. Установите python3.x (если его нет) для вашей платформы
  2. Установите python3.x-devel для вашей платформы
  3. Создайте виртуальную среду в python 3.x (например, $ python3.6 -m venv virenv_test_p3 /)
  4. Активируйте тестовую среду для python 3.x (например, источник virenv_test_p3 / bin / activate)
  5. Установите пакеты, которые вы хотите использовать в своей новой виртуальной среде python 3 и которые поддерживаются (например, pip install Django == 1.11.2)
person Gunnar Sigfusson    schedule 28.06.2017

В командной строке Windows у меня сработало следующее. Сначала узнайте, где находятся ваши исполняемые файлы Python:

where python

Это выведет пути к различным python.exe в вашей системе. Вот мои:

C:\Users\carandangc\Anaconda3\python.exe
C:\Python27\python.exe

Итак, для Python3 это было расположено для меня по первому пути, поэтому я перешел в корневую папку приложения, в которой я хочу создать папку виртуальной среды. Затем я запускаю следующее, которое включает путь к моему исполняемому файлу Python3, называя мою виртуальную среду venv:

virtualenv --python=/Users/carandangc/Anaconda3/python.exe venv

Далее активируем виртуальную среду:

call venv\Scripts\activate.bat

Наконец, установите зависимости для этой виртуальной среды:

pip install -r requirements.txt

Этот файл requirements.txt можно заполнить вручную, если вы знаете библиотеки / модули, необходимые для вашего приложения в виртуальной среде. Если у вас было приложение, работающее в другой среде, вы можете автоматически создать зависимости, выполнив следующее (cd в папку приложения в среде, в которой оно работает):

pip freeze > requirements.txt

Затем, когда у вас есть «замороженный» файл requirements.txt, вы можете установить требования на другом компьютере или в чистой среде, выполнив следующие действия (после cd в папку приложения):

pip install -r requirements.txt

Чтобы увидеть свою версию Python в виртуальной среде, запустите:

python --version

Тогда вуаля ... у вас есть Python3, работающий в вашей виртуальной среде. Вывод для меня:

Python 3.7.2
person Carlo Carandang    schedule 25.02.2019

Для тех из вас, кто использует pipenv и хочет установить определенную версию:

pipenv install --python 3.6
person Vlad Bezden    schedule 29.06.2018

У меня такая же ошибка из-за конфликта с установкой miniconda3, поэтому, когда вы вводите «which virtualenv», и если вы установили miniconda, и он указывает на эту установку, вы можете либо удалить ее (если вы, как я, и не перемещались к нему еще) или измените переменную среды так, чтобы она указывала на желаемую установку.

person PrincessPea    schedule 16.08.2017