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


781

Используя 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

1
Вы пытались обновить только переводчик в вашей текущей среде, или вы просто решили начать с нуля?
Чарли Паркер

Можно ли установить python3 только в виртуальной среде без обновления системного python (сохраняя в python2.x) на Mac?
Июнь

Ответы:


1388

просто беги

virtualenv -p python3 envname

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

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

pip install --upgrade virtualenv

17
Обновление virtualenv работало, но по какой-то причине я также должен был четко указать исполняемый файл python3 сvirtualenv -p $(which python3) envname
dkamins,

2
Можно ли просто изменить интерпретатор Python текущей среды, а не создавать новую среду?
Чарли Паркер

На Распбиане работала Джесси 'virtualenv --no-site-packages python3.4'. --distribute устарела и -p не кажется необходимым, так как virtualenv использует python3.
alkopop79

Почему это , что после запуска virtualenv -p python3 my_virtual_env, python3доступен из внешней виртуальной среды также?
Бишвис Мишра

@CharlieParker Вы можете выполнить следующие два шага в последовательности: 1. Удалить С bin, lib,include , localи shareкаталоги в корневом каталоге вашего проекта. 2. В терминальном запуске: virtualenv -p python3 .который инициализирует новый Python3 virtualenv в текущем каталоге.
Calleniah

251

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

2
Я надеюсь, что вы правы, так как я только что оставил virtualenv для работы с pyenv вместе с python 3.5.2
Jayesh

1
Я не нашел никакой информации, подтверждающей проблемы, связанные с местоположением, перемещаемый объект был удален как опция .... это теперь не нужно? это обходной путь? или просто сейчас совершенно бесполезно готовить приложение?
Дж. М. Беккер

7
Точно, но вы также можете запустить: python3 -m venv /path/v3так как сценарий pyvenv устарел на Python 3.6.
pawciobiel

4
используя последнюю версию 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 с правильно активировать / деактивировать скрипты.
Monkut

3
Кто-нибудь знает, как активировать python3.6 -m venv <venvname>. В созданном каталоге нет ни скриптов /, ни «активации» в bin / subdir.
Шейн

60

Я пробовал 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, но он как-то не работает для меня.


похоже, что ваш метод требует создания новой среды Python. Может ли pyenv работать с virtualenv и просто менять мою версию Python, когда захочу?
Чарли Паркер

58

Установить предпосылки.

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>

Джанго конкретные инструкции

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

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


1
Я применил это к OSX, оно работало (за исключением того, что не использовал, apt-getно brew)
sdkks

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

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


Я попробовал это, но мне сказали The executable python3 (from --python=python3) does not exist, что бы вы сделали? Я хотел заварить isntall python3, но не был уверен, что это хорошая идея или моя система запутается в том, какую версию Python я использую
Чарли Паркер

Работает как шарм в Ubuntu 16.04!
Эрик Виейра

20

Вы можете указать конкретную версию 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)

это лучший ответ здесь
Кольер

14

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

$ python3 -m venv .env

13

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

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

pip3 install virtualenv 

Теперь запустите:

virtualenv -p python3 <env name> 

Иногда происходит virtualenvсбой cmd , если это так, используйте это:

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

Или:

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

Теперь беги

which python

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

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

deactivate 

8

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 запускался внутри среды и мог видеть все локальные пакеты.


Я использую virtualenvдля повседневного использования виртуальных сред ( workonи т. Д.), Но для надежного создания новых виртуальных сред python3.xэто единственный способ, который я нашел, что работает.
Bobble

6

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

which virtualenv

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

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

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


6

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


5

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

mkvirtualenv --python=/usr/bin/python3 YourEnvNameHere

Чтобы точно узнать, где находится желаемая версия Python, используйте местоположение which python2.7или which python3.5или which python3.6, а затем замените about--python=DIRECTORY
Santhosh

3

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

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




2

Для тех, у кого возникли проблемы при работе с 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

1

Я перепробовал все вышеперечисленное, все равно не получилось. Таким образом, как грубая сила, я просто переустановил анаконду, переустановил 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$ 

1

Я хотел сохранить 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 / activ)
  5. Установите пакеты, которые вы хотите использовать в вашей новой виртуальной среде Python 3 и которые поддерживаются (например, pip install Django == 1.11.2)

1

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

apt-get install python3-venv

python3.5 -m venv <your env name>

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

python3.6 -m venv <your env name>


0

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


0

В командной строке 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

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

pip freeze > requirements.txt

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

pip install -r requirements.txt

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

python --version

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

Python 3.7.2
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.