Використання Python 3 у virtualenv


778

Використовуючи 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?
червня

Відповіді:


1385

просто біжи

virtualenv -p python3 envname

Оновлення після редагування ОП:

У версії віртуалента OP, як описано тут, виникла помилка . Проблему виправили за допомогою запуску:

pip install --upgrade virtualenv

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

2
чи можливо просто змінити інтерпретатор пітону поточного середовища, а не створити нове середовище?
Чарлі Паркер

На Raspbian Jessie працював "virtualenv --no-site-пакети python3.4". --distribute застарілий і -p не здається необхідним, оскільки virtualenv використовує python3.
alkopop79

Чому це , що після запуску virtualenv -p python3 my_virtual_env, python3доступний із зовнішнього віртуального середовища також?
Bishwas Mishra

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

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опції він принаймні створює венвр із сценаріями активації / деактивації правильно.
monkut

3
Хтось знає, як активувати python3.6 -m venv <venvname>. У створеному каталозі немає сценаріїв, а також "активація" у bin / subdir.
Shayne

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прапор для проектів Джанго.


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, але не знав, чи це гарна ідея, чи якщо моя система заплутається, яку версію пітона я використовую
Чарлі Паркер

Працює як шарм в 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)

це найкраща відповідь тут
Collier

14

У мене було те саме ERRORповідомлення. Рішення tbrisker не спрацювало в моєму випадку. Натомість це вирішило питання:

$ python3 -m venv .env

13

Це все, що вам потрібно для запуску віртуального середовища в 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

Тепер активуйте віртуальну програму env:

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 тепер рекомендується для створення віртуальних середовищ.

Для Windows, щоб ініціювати 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 code з його розширенням python, ви можете зіткнутися з проблемою з його pylint, який вказує на глобальну установку. У цьому випадку pylint не зможе побачити модулі, встановлені у вашому віртуальному середовищі, і, отже, буде показано помилки під час імпорту.

Ось простий метод пройти це.

cd Workspace\Scripts
.\Activate.ps1
code .

Ми в основному активуємо середовище спочатку, а потім викликаємо vs-код, щоб pylint запускався всередині середовища і міг бачити всі локальні пакети.


Я використовую virtualenvдля щоденного використання віртуальних середовищ ( workonтощо), але для надійного створення нових віртуальних середовищ python3.xце єдиний спосіб, який я виявив, що це працює.
Боббл

6

На додаток до інших відповідей рекомендую перевірити, який екземпляр virtualenv ви виконуєте:

which virtualenv

Якщо це виявиться щось у / usr / local / bin, то можливо - навіть ймовірно, що ви встановили virtualenv (можливо, використовуючи екземпляр easy_tools або pip), не використовуючи менеджер пакунків вашої системи (варити у випадку OP). Це була моя проблема.

Роки тому - коли я був ще більш невідомим - я встановив virtualenv, і це маскувало пакет моєї системи, наданий virtualenv.

Після видалення цього старого, зламаного віртуалену мої проблеми пішли.


6

У python3.6 я спробував python3 -m venv myenv, згідно з документацією, але це зайняло так багато часу. Тож дуже проста та швидка команда: python -m venv yourenv Це працювало для мене на python3.6.


5

На Mac я повинен був зробити наступне, щоб змусити його працювати.

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

Для того, щоб знайти , де саме потрібна версія пітона вибрати певний пункт which python2.7або which python3.5або which python3.6, а потім замінити про--python=DIRECTORY
Santhosh

3

Якщо ви встановите python3 ( brew install python3) разом із virtualenv burrito , то можете це зробити mkvirtualenv -p $(which python3) env_name

Звичайно, я знаю, що virtualenv burrito - це просто обгортка, але це мені добре служило протягом багатьох років, зменшуючи деякі криві навчання.


3

virtualenv --python=/usr/local/bin/python3 <VIRTUAL ENV NAME> це додасть шлях python3 для вашого віртуального середовища.



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 -середовище-для-пітона-3 . Він показує кроки для різних платформ, але основні кроки є

  1. Встановіть python3.x (якщо його немає) для вашої платформи
  2. Встановіть python3.x-devel для своєї платформи
  3. Створіть віртуальне середовище в python 3.x (наприклад, $ python3.6 -m venv virenv_test_p3 /)
  4. Активуйте testen Environments для python 3.x (наприклад, джерело virenv_test_p3 / bin / activate)
  5. Встановіть пакети, які ви хочете використовувати у вашому новому віртуальному середовищі python 3 та які підтримуються (наприклад, встановлення файлів Django == 1.11.2)

1

Нижче наведені прості команди можуть створити віртуальну програму 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>


0

Я отримав ту ж помилку через те, що це конфлікт із встановленням miniconda3, тому коли ви вводите "котрий 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

Ці вимоги.txt можна заповнити вручну, якщо ви знаєте бібліотеки / модулі, необхідні для вашої програми у віртуальному середовищі. Якщо у вас програма запущена в іншому середовищі, ви можете автоматично створити залежності, виконавши наступне (cd в папку програми в середовищі, де вона працює):

pip freeze > requirements.txt

Після того, як у вас буде вимога.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.