Как выйти из venv
Перейти к содержимому

Как выйти из venv

  • автор:

Установка и использование virtualenv в Python

virtualenv — это инструмент для создания изолированной среды Python. У такой среды есть отдельна установка python, при ее использовании загруженные библиотеки недоступны другим. Можно сделать так, чтобы у этой среды не было доступа к глобальным библиотекам.

Virtualenv — простой и рекомендованный способ настройки среды Python.

Отличия virtualenv и venv

Venv — это пакет, который идет по умолчанию с Python 3.3+. В версии Python 2 его нет.

Virtualenv — более продвинутая библиотека. По ссылке можно ознакомиться с основными отличиями.

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

Установка virtualenv с помощью pip

Для установки virtualenv с Python нужно использовать pip. Желательно предварительно обновить этот инструмент.

python -m pip install --upgrade pip

Или используйте python3 , если python ссылается на 2 версию.

После обновления можно установить и virtualenv:

pip install virtualenv # или pip3

Создание виртуальной среды

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

~$ cd test ~/test$

2. Создайте виртуальную среду, при необходимости указав конкретную версию Python. Следующая команда создает virtualenv с именем venv_name и использует флаг -p , чтобы указать полный путь к версии Python:

virtualenv -p /usr/bin/python venv_name # или virtualenv venv_name

Назвать среду можно как угодно

После выполнения команды вы увидите логи:

Running virtualenv with interpreter /usr/bin/python Already using interpreter /usr/bin/python Using base prefix '/usr' New python executable in /home/username/test/venv_name/bin/python Installing setuptools, pip, wheel. done.

Эта команда создает локальную копию среды. Работая с ней, важно не забывать об активации, чтобы использовались нужные версии конкретных инструментов и пакетов.

Если при установке возникла ошибка setuptools pip failed with error code 1` error , используйте следующую команду, чтобы решить проблему:

pip install --upgrade setuptools # или pip3

3. Для активации новой виртуальной среды используйте команду:

source venv_name/bin/activate

После этого название текущей среды отобразится слева от символа ввода: (venv_name) username@desctop:~/test$

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

Деактивации virtualenv

После завершения работы деактивировать виртуальную среду можно с помощью команды deactivate .

Введите ее и приставка venv_name пропадет. Вы вернетесь к использованию глобально версии python.

Удаление виртуальной среды

Для удаления виртуальной среды достаточно просто удалить папку проекта. Для этого используется следующая команда:

rm -rf venv_name

Решение популярных ошибок

Ошибки при создании virtualenv. При попытке создать virtualenv с Python 3.7 могут возникнуть следующие ошибки.

AttributeError: module 'importlib._bootstrap' has no attribute 'SourceFileLoader' OSError: Command /home/username/venv/bin/python3 -c "import sys, pip; sys. d\"] + sys.argv[1:]))" setuptools pip failed with error code 1

Для их исправления нужно добавить следующую строку в .bash_profile.

export LC_ALL="en_US.UTF-8"

Использование полного пути к виртуальной среде. Может быть такое, что при использовании команды virtualenv будет использована не та версия. Для решения проблемы нужно лишь задать полные пути как к virtualenv, так и к Python в системе.

А получить их можно с помощью этой команды:

/home/username/opt/python-3.8.0/bin/virtualenv -p /home/username/opt/python-3.8.0/bin/python3 venv

Как выйти / выйти / отключить Python virtualenv

Я использую virtualenv и virtualenvwrapper. Я могу переключаться между virtualenv просто отлично, используя команду workon.

me@mymachine:~$ workon env1 (env1)me@mymachine:~$ workon env2 (env2)me@mymachine:~$ workon env1 (env1)me@mymachine:~$ 

Однако, как я могу выйти из всех виртуальных машин и снова запустить свою настоящую машину? Прямо сейчас, единственный способ вернуться к

me@mymachine:~$ 

— выйти из оболочки и запустить новую. Это раздражает. Есть ли команда на работу «ничего», и если да, то что это? Если такой команды не существует, как мне ее создать?

Apreche 13 июнь 2009, в 13:18
Поделиться

Есть команда для работы на «ничего» — она отображает все ваши доступные виртуальные среды, что довольно изящно. Просто введите «workon» без аргументов и нажмите Enter. Команда для выхода — «деактивировать», как показано ниже.

Dannid 07 окт. 2014, в 20:47
Поделиться:
virtualenv
virtualenvwrapper

8 ответов

Лучший ответ

Обычно активация virtualenv дает вам функцию оболочки с именем:

$ deactivate 

который возвращает все в норму.

Изменить 1

Я только что посмотрел еще раз на код для virtualenvwrapper, и, да, он тоже поддерживает deactivate как способ избежать всех виртуальных файлов.

Изменить 2

Если вы пытаетесь покинуть среду Anaconda, процедура немного другая: запустите команду с двумя словами source deactivate , поскольку они реализуют деактивацию с помощью автономного script.

bash-4.3$ deactivate pyenv-virtualenv: deactivate must be sourced. Run 'source deactivate' instead of 'deactivate' bash-4.3$ source deactivate pyenv-virtualenv: no virtualenv has been activated. 

Brandon Rhodes 13 июнь 2009, в 14:47
Поделиться
Мой virtualenv не имеет команды деактивации
Prof. Falken 06 фев. 2013, в 16:44

Команда «деактивировать» не является ни двоичным файлом, ни сценарием, который вы «используете»; это псевдоним оболочки, который динамически определяется в вашей текущей оболочке скриптом «активации».

Brandon Rhodes 06 фев. 2013, в 22:28
@Apreche Тем временем (почти четыре года спустя) это, кажется, было добавлено к документации.
gertvdijk 14 март 2013, в 14:26

Было бы гораздо более интуитивно понятным, если бы это называлось «workoff» или «unworkon». Или если «workon» назывался «активировать». Слава Богу за псевдоним.

kkurian 18 июнь 2013, в 17:54

@kkurian — вы должны предложить, чтобы на трекер проблем для virtualenvwrapper и, возможно, Даг Хеллманн рассмотрел бы это! Обратите внимание, что для тех, кто может прочесть эти комментарии позже, эта workon НЕ является нативной командой virtualenv (о чем идет речь в первоначальном вопросе), а является командой virtualenvwrapper !

Brandon Rhodes 29 июнь 2013, в 23:42
@BrandonRhodes, если быть точным, это не псевдоним, это функция
igor 17 сен. 2013, в 15:00

Угадайте, как называется действительная команда virtualenv внутри «workon»? . (предупреждение о спойлере) . . (предупреждение о спойлере) . . (предупреждение о спойлере) . . (предупреждение о спойлере) . активировать!

FutureNerd 20 март 2014, в 05:18

Типичный пример того, как простые команды могут потребовать много времени для их выяснения. ТАК круто!

Rajkumar Rajendran 26 июнь 2016, в 05:22
Показать ещё 6 комментариев

Я определил alias отработку как противоположность workon:

alias workoff='deactivate' 
[bobstein@host ~]$ workon django_project (django_project)[bobstein@host ~]$ workoff [bobstein@host ~]$ 

BobStein-VisiBone 14 янв. 2015, в 17:00
Поделиться
В каком файле? .bashrc ?
seyed 08 июнь 2015, в 17:59
@seyed да, см. этот ответ для примера псевдонима в ~/.bashrc
Bob Stein 08 июнь 2015, в 19:37
Мне нравится этот псевдоним. Напоминает мне о ребенке каратэ (waxon; waxoff)
C0deH4cker 02 окт. 2016, в 01:59
Потрясающие ! Мне действительно это нравится 😉
Yasser Sinjab 01 март 2017, в 13:33
Показать ещё 2 комментария

для активации виртуальной среды python:

$cd ~/python-venv/ $./bin/activate 
$deactivate 

Amitesh Ranjan 26 нояб. 2015, в 08:38
Поделиться
В терминале на OS X10.11.1 я, кажется, должен использовать: $source activate
Eric Milliot-Martinez 05 дек. 2015, в 19:15

Мне не нужен источник. Я $cd /to/dir/i/want/my/virtualenv/installed затем $virtualenv name_i_want_for_it затем $. name_i_want_for_it/bin/activate virtualenv мне все еще кажется немного $. name_i_want_for_it/bin/activate . Нужно быть улучшенным .

uchuugaka 28 дек. 2015, в 08:32
«источник» совпадает с «.» команда .. любой может быть использован для получения файла
Corey Goldberg 10 янв. 2017, в 18:12
Показать ещё 1 комментарий

$ deactivate 

Если это не сработает, попробуйте

$ source deactivate 

Любой, кто знает, как работают bash source , подумает, что нечетные, но некоторые оболочки/рабочие процессы вокруг virtualenv реализуются как комплимент/эквивалент source activate , YMMV

Abdul 12 апр. 2015, в 07:49
Поделиться

deactivate — это функция, которая создается при создании файла activate . Ваше предложение source deactivate вообще не имеет смысла, так как нет файла с именем deactivate

Anthon 12 апр. 2015, в 08:14

Это не заслуживает отрицательных голосов. См. Редактирование выбранного ответа: источник деактивирован для среды анаконды.

Doug Bradshaw 13 нояб. 2015, в 19:52

Он «заслуживает» downvotes для не отвечающих стандартам качества ответа SO. Это больше комментарий, чем ответ. Но из-за 79 репутации постера мы должны быть милыми и давать хорошие отзывы.

Bruno Bronosky 17 март 2017, в 15:22

@Abdul Я продемонстрировал, как вы можете улучшить качество своего ответа в редакции 2, на stackoverflow.com/posts/29586756/revisions

Bruno Bronosky 17 март 2017, в 15:30

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

bgenchel 28 фев. 2018, в 06:26
@Anthon Однако, «деактивация источника» работает для меня, но «деактивация» не работает
Statham 08 апр. 2018, в 08:20
@ Statham вы используете этот нестандартный установщик Anaconda?
Anthon 08 апр. 2018, в 10:16

@Anthon да, у меня есть и anaconda2, и anaconda3 на моем компьютере, поэтому я должен запустить это, и, возможно, в этом причина

Statham 09 апр. 2018, в 08:01
Показать ещё 6 комментариев

Вы можете использовать virtualenvwrapper , чтобы облегчить работу с virtualenv

pip install virtualenvwrapper 

Если вы используете стандартную оболочку, откройте ~/.bashrc или ~/.zshrc , если вы используете oh-my-zsh. Добавьте две строки:

export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh 

Чтобы активировать существующий virtualenv, используйте команду workon:

$ workon myenv (myenv)$ 

Чтобы отключить ваш virtualenv:

(myenv)$ deactivate 

Вот мой tutorial, шаг за шагом в том, как установить virtualenv и virtualenvwrapper

levi 01 сен. 2016, в 07:09
Поделиться
Я вижу небольшую разницу по сравнению со встроенным в virtualenv
Nam G VU 08 сен. 2016, в 11:35
@NamGVU Обратите внимание на workon команду, она работает из любого каталога.
igaurav 28 сен. 2016, в 07:44
ОП уже использует virtualenvwrapper , нет?
Radon Rosborough 09 янв. 2018, в 21:40
Не работает на самом деле. deactivate: command not found.
Schütze 27 март 2018, в 08:17

Как упомянуто в комментарии другого поста (а у Stackoverflow нет практического способа указать на него), вы не можете использовать deactivate в сценарии оболочки без предварительного поиска сценария, который определяет эту функцию (в этом случае эта команда не будет найдена. .. ошибка)

Mariano Ruiz 25 фев. 2019, в 14:33
Показать ещё 3 комментария

(my_env) basant @basant: ~/EonTraining/my_env $деактивировать

basant @basant-Lenovo-E40-80: ~/EonTraining/my_env $

Basant Rules 03 сен. 2017, в 06:50
Поделиться

Я использую zsh-autoenv, который основан на autoenv.

zsh-autoenv автоматически источники (известные/белые списки) .autoenv.zsh файлы, обычно используемые в корневые каталоги проекта. Он обрабатывает «enter» и оставляет «события, вложенность и блокирование переменных (перезапись и восстановление).

; cd dtree Switching to virtual environment: Development tree utiles ;dtree(feature/task24|✓); cat .autoenv.zsh # Autoenv. echo -n "Switching to virtual environment: " printf "\e[38;5;93m%s\e[0m\n" "Development tree utiles" workon dtree # eof dtree(feature/task24|✓); cat .autoenv_leave.zsh deactivate 

Поэтому, когда я покидаю каталог dtree , виртуальная среда автоматически завершается.

Sardathrion 14 фев. 2017, в 12:48
Поделиться

Сама же проблема при работе с установщиком script, я взглянул на то, что сделал bin/activate_this.py и отменил его.

#! /usr/bin/python # -*- coding: utf-8 -*- import os import sys # path to virtualenv venv_path = os.path.join('/home', 'sixdays', '.virtualenvs', 'test32') # Save old values old_os_path = os.environ['PATH'] old_sys_path = list(sys.path) old_sys_prefix = sys.prefix def deactivate(): # Change back by setting values to starting values os.environ['PATH'] = old_os_path sys.prefix = old_sys_prefix sys.path[:0] = old_sys_path # Activate the virtualenvironment activate_this = os.path.join(venv_path, 'bin/activate_this.py') execfile(activate_this, dict(__file__=activate_this)) # Print list of pip packages for virtualenv for example purpose import pip print str(pip.get_installed_distributions()) # Unload pip module del pip # deactive/switch back to initial interpreter deactivate() # print list of initial environment pip packages for example purpose import pip print str(pip.get_installed_distributions()) 

Не уверен, что 100%, если он работает по назначению, я, возможно, пропустил что-то полностью.

SixDays 11 дек. 2014, в 19:13
Поделиться

если деактивация сбрасывает значение пути среды, системного пути, приглашения по умолчанию, тогда ваша функция деактивации — хороший подход. Мне нравится твой сценарий. Уже дано +1.

Ramkumar D 06 июнь 2016, в 08:00

Ещё вопросы

  • 0 Переход через неограниченные вложенные массивы
  • 1 Код Python 3.5 / 3.6 в зависимости от порядка вставки dict
  • 0 Первый пункт в моем выпадающем списке выделен
  • 1 Как я могу сохранить hourOfDay и минуты из timePickerDialog, чтобы сравнить его с какой-то другой переменной?
  • 1 Как слушать один из его компонентов JButton?
  • 1 Объяснение ссылки на массив
  • 0 Как реализовать манипуляции с изображениями в Jquery или ASP.Net?
  • 1 Передача примитивного Типа в качестве параметра из XAML
  • 0 Вызов URL-адреса неблокирующим способом на веб-странице
  • 0 MYSQL Query — Использование оператора Select в предложении Where
  • 1 Проблема задержки в нескольких графиках, SVG или HTML5 Canvas?
  • 1 Как офлайн произнести английское слово в программировании Android?
  • 0 Datepicker не превышает текущую дату
  • 0 Проблема запроса PHP PDO возвращается как object => «queryString»
  • 0 Как обновить только текст кнопки в компонентах jologery ui
  • 0 C ++ по модулю для выравнивания моих данных
  • 1 C # Сделать фон формы прозрачным (для отображения фона .png с полупрозрачными пикселями)
  • 0 Получить несколько атрибутов из одного узла
  • 0 Интерфейс Laravel
  • 1 Autowire a Set, определенный как в Spring
  • 1 In-App Billing, показывать локализованную цену в тексте
  • 0 почему событие нажатия кнопки не срабатывает в угловых JS?
  • 0 Использование QRegExValidator для QLineEdit
  • 0 Таблица отношений не обновляется, когда я вставляю записи
  • 1 Предзаказ дерева обхода копия папки
  • 0 карусель css thumb останавливается на 0
  • 0 как получить разницу во времени между двумя в php
  • 0 ng-attr не меняется на true
  • 1 После перевода реселлервью перестает слушать сенсорные события
  • 0 CSS Toggle Anchor от URL
  • 1 Недостижимая проблема с блоком Catch
  • 1 Изменение локали во время выполнения, не затрагивающее фрагменты
  • 0 ошибка: ожидаемый неквалифицированный идентификатор при использовании форсированного мьютекса
  • 0 Хранить индексы геометрии
  • 1 Сериализация ответа xml для модификации с SimpleXML в kotlin
  • 0 Apache conf для nginx conf, чтобы избежать CORS
  • 0 Числа 3, 5 и 7 не отображаются как простые
  • 0 jQPlot Дата на оси X Интервал тика не работает
  • 0 Как сравнить две даты?
  • 1 как динамически добавлять данные в datatable (Gridview)
  • 1 Не удается найти элемент с помощью селектора CSS с Selenium на Python
  • 1 Прогнозирование отсутствия активности клиентов
  • 0 Передача массива из JQuery в PHP через POST
  • 0 Присоединиться по user_id в Symfony
  • 0 Sum () возвращает неверное значение при объединении нескольких таблиц
  • 1 Android Retrofit2 / RxJava2 / Room — Простая обработка данных
  • 0 Пользовательские домены для одного сайта
  • 1 ввод заменить символы при наборе текста?
  • 0 push () в глубокий массив
  • 1 Руководство по GStreamer для Android не удалось построить

Python Virtualenv Linux Mint. Работает не корректно

По порядку
1. Устанавливаю через Terminal виртуальное окружение virtualenv v
2. Активирую его в папке source v/bin/activate
3. Активация срабатывает, в терминале как и положено отображается (v)
Но не работает само окружение. При команде pip3 freeze он показывает все пакеты установленные на pip3 и при установки например pip3 install numpy пакет ставится глобально. Окружение создаётся только под pip а не под pip3 . В гугл нашёл следующий вариант: установить окружение таким образом:
virtualenv -p /usr/bin/python3.6 venv . В таком случае окружение устанавливается для pip3 но не смотря на то что pip3 freeze показывает только те пакеты которые я ставил в окружение, при запуске скрипта он их не видит. Подскажите как выйти из проблемы.

Отслеживать

задан 26 мар 2019 в 19:22

269 1 1 золотой знак 4 4 серебряных знака 16 16 бронзовых знаков

ОС Linux. Ставил sudo pip3 install virtualenv

26 мар 2019 в 20:26

Покажите точную последовательность действий от создания virtualenv (вариант с -p является правильным, если что) до неудачного запуска скрипта с numpy — копированием текста из терминала или хотя бы скриншотом

venv Python

Изображение баннера

Модуль venv поддерживает создание облегченных “виртуальных сред”, каждая из которых имеет свой собственный независимый набор пакетов Python, установленных в каталогах их сайтов.

Виртуальная среда создается поверх существующей установки Python, известной как “базовый” Python виртуальной среды, и при желании может быть изолирована от пакетов в базовой среде, поэтому доступны только те, которые явно установлены в виртуальной среде.

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

Смотрите PEP 405 для получения дополнительной информации о виртуальных средах Python.

Установка

Входит в состав Python3 поэтому обычно не требует установки.

Если вы работаете в WSL типа Debian / Ubuntu установить можно с помощью

sudo apt install python3.10-venv

Создать

Чтобы создать новое окружение выполните

python3 -m venv venv

Вместо venv можете придумать своё имя для окружения.

Обычно для мелких проектов никто не парится и просто в папке с проектом создает окружение venv — у такого подхода есть как плюсы так и минусы.

Если вы работаете в WSL то создавая окружение нужно использовать ту же версию Python, для котороый вы установили venv. Например

sudo python3.10 -m venv ubuntu_venv

Активировать

В Linux чтобы перейти в окружение выполните

Деактивировать

Чтобы выйти из виртуального окружения выполните

Выбор версии Python для окружения

Чтобы создать окружение с определённой версией Python используйте команду с указанием версии.

Чтобы это сработало нужно иметь установленный Python данной версии

python3.9 -m venv your_env

Сохранить requirements

python -m pip freeze > requirements.txt

Установить из requirements.txt

python -m pip install -r .\requirements.txt

Проверка активации

Название окружения может и не появиться в скобках в приглашении терминала.

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

python >>> import sys >>> sys.prefix ‘/home/andrei/pytest/venv’ >>> sys.base_prefix ‘/home/andrei/.pyenv/versions/3.9.5’

python >>> import sys >>> sys.prefix ‘C:\Users\Andrei\Documents\Projects\venv’ >>> sys.base_prefix ‘C:\Users\Andrei\AppData\Local\Programs\Python\Python310’

Если sys.prefix отличается от sys.base_prefix значит используется Python из виртуального окружения.

Если вы запускаете скрипт в Pycharm изучите вывод терминала

Process finished with exit code 0

— это путь до использованного Python

Если бы я запустил скрипт не из виртуального окружения вместо этого пути был бы путь

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *