Как выйти / выйти / деактивировать 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:~$
это выйти из оболочки и начать новый. Это немного раздражает. Есть ли команда работать на "ничего", и если да, то что это? Если такой команды не существует, как бы я ее создал?
22 ответа
Обычно, активируя virtualenv, вы получаете функцию оболочки с именем:
$ deactivate
что возвращает вещи в норму.
Редактировать 1
Я только что специально посмотрел на код для virtualenvwrapper,
и да, это тоже поддерживает deactivate
как способ убежать от всех добродетелей.
Редактировать 2
Если вы пытаетесь покинуть среду Anaconda, процедура немного отличается: выполните команду из двух слов source deactivate
так как они реализуют деактивацию, используя автономный скрипт.
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.
$ deactivate
Если это не работает, попробуйте
$ source deactivate
Тот, кто знает, как Bashsource
Работы будут думать, что это странно, но некоторые оболочки / рабочие процессы вокруг virtualenv реализуются как комплимент / аналог source activate
, YMMV
Я определил псевдоним workoff как противоположность workon:
alias workoff='deactivate'
Легко запомнить:
[bobstein@host ~]$ workon django_project
(django_project)[bobstein@host ~]$ workoff
[bobstein@host ~]$
Чтобы активировать виртуальную среду Python:
$cd ~/python-venv/
$./bin/activate
деактивировать:
$deactivate
Бег
deactivate [name of your environment]
может выйти / деактивироваться из вашей среды Python.
Пример с python3.6 Windows 10:
PS C:\Users\kyrlon\Desktop> py -m venv env1
PS C:\Users\kyrlon\Desktop> .\env1\Scripts\activate
(env1) PS C:\Users\kyrlon\Desktop> deactivate env1
PS C:\Users\klongwood3\Desktop> py -m venv env1
Пример с python3.9 в Linux Ubuntu 20.04 LTS Desktop:
kyrlon@pc1:~$ python3 -m venv venv1
kyrlon@pc1:~$ source venv1/bin/activate
(venv1) kyrlon@pc1:~$ deactivate venv1
kyrlon@pc1:~$
В МакОс Вентуре -
активировать -
sudo chmod -R 755 ./venv/bin
source venv/bin/activate
деактивировать -
deactivate
Чтобы активировать виртуальную среду Python:
source venv/bin/activate
Примечание. Здесь "venv" - это ваш
virtualenvironment
имя папки
Чтобы отключить:
`deactivate` or `source deactivate`
Я обнаружил, что в среде Miniconda3 мне нужно было запустить:
conda deactivate
ни deactivate
ни source deactivate
работал на меня.
В моем конкретном случае я перехожу в рабочий каталог
CD /myworkingdirectory
Затем я активирую свой env следующим образом:
my-env/scripts/activate
Из этой же рабочей папки (
/myworkingdirectory
), чтобы отключить, я пробовал это, но ничего не делает:
my-env/scripts/deactivate
Это действительно работает:
deactivate
Ты можешь использовать virtualenvwrapper
чтобы облегчить работу с virtualenv
Установка virtualenvwrapper
pip install virtualenvwrapper
Если вы используете стандартную оболочку, откройте ~/.bashrc
или же ~/.zshrc
если вы используете ой-мой-зш. Добавьте эти две строки:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
Чтобы активировать существующий virtualenv, используйте команду workon:
$ workon myenv
(myenv)$
Для того, чтобы деактивировать ваше virtualenv:
(myenv)$ deactivate
Вот мой учебник, шаг за шагом в том, как установить virtualenv и virtualenvwrapper
С использованием deactivate
функция, предоставленная Venv's activate
скрипт требует, чтобы вы доверяли функции деактивации, чтобы она была правильно запрограммирована для чистого сброса всех переменных среды до того, как они были раньше, принимая во внимание не только исходную активацию, но также любые переключатели, конфигурацию или другую работу, которую вы, возможно, проделали в тем временем.
Вероятно, это нормально, но это представляет новый, ненулевой риск того, что ваша среда впоследствии будет изменена.
Однако для процесса технически невозможно напрямую изменять переменные среды своего родителя, поэтому мы можем использовать отдельную суб-оболочку, чтобы быть абсолютно уверенными в том, чтоvenv
s не оставляют никаких остаточных изменений:
Активировать:
$ bash --init-file PythonVenv/bin/activate
- Это запускает новую оболочку вокруг
venv
. Ваш оригиналbash
оболочка остается неизменной.
Чтобы отключить:
$ exit
ИЛИ [CTRL]
+[D]
- Это выходит из всей оболочки
venv
находится внутри и возвращает вас к исходной оболочке, которая была до того, как сценарий активации внес какие-либо изменения в среду.
Пример:
[user@computer ~]$ echo $VIRTUAL_ENV
No virtualenv!
[user@computer ~]$ bash --init-file PythonVenv/bin/activate
(PythonVenv) [user@computer ~]$ echo $VIRTUAL_ENV
/home/user/PythonVenv
(PythonVenv) [user@computer ~]$ exit
exit
[user@computer ~]$ echo $VIRTUAL_ENV
No virtualenv!
$ conda deactivate
или
$ source deactivate
должно сработать.
Если это не работает, попробуйтеdeactivate [name of your environment]
вместо.
Поскольку deactivate
функция, созданная поиском ~/bin/activate
не может быть обнаружен обычными средствами поиска такой команды в ~/bin
, вы можете создать тот, который просто выполняет функцию deactivate
.
Проблема в том, что сценарий с именем deactivate
содержащая единственную команду deactivate
вызовет бесконечный цикл, если случайно будет выполнен, когда он не находится в venv. Распространенная ошибка.
Этого можно избежать, только выполнив deactivate
если функция существует (т.е. была создана путем поиска activate
).
#!/bin/bash
declare -Ff deactivate && deactivate
если кто-то пытается придумать, как его отключить, если
deactivate
или
source deactivate
не работает, введите:
deactivate <virtual environment name>
работал для меня как шарм!
(my_env) basant@basant:~/EonTraining/my_env$ деактивировать
используйте "деактивировать"
Басант @ Басант-Lenovo-E40-80:~/EonTraining/my_env$
Ушел (my_env);
Я использую zsh-autoenv, который основан на autoenv.
zsh-autoenv автоматически источники (известный / белый список)
.autoenv.zsh
файлы, обычно используемые в корневых каталогах проекта. Он обрабатывает события "вход" и "выход", вложение и сохранение переменных (перезапись и восстановление).
Вот пример:
; 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
каталог, виртуальная среда автоматически закрывается.
В моем случае я смог активировать виртуальную среду, используя
env-name\scripts\activate
и деактивировать его с помощью . Однако после запуска обновления на моем ПК с Windows
deactivate
больше не распознавалась как внутренняя или внешняя команда. То, что я использовал с этого момента, это
env-name\scripts\deactivate
и это решило проблему.
Чтобы отключить Vertualenv, вы можете попробовать:
deactivate
или:
source deactivate
Это очень просто, чтобы деактивировать вашу виртуальную среду
- Если используете Anaconda - используйте
conda deactivate
- Если не используете Anaconda - используйте
source deactivate
Если вы не знаете, как выйти из какой-либо среды Python, я бы просто запустил
bash --norc
поскольку существует риск, что вы пропустили удаление этого кода для входа в некоторую среду Python, которая, например, conda/mamba, уже установлена в вашем компьютере..bashrc
Конда/мамба входит в среду так же, как вы можете запустить bash внутри bash. Установка по умолчанию приводит к активации базовой среды по умолчанию, что сводит меня с ума, так как может сломать много вещей, чтобы выйти из нее, вы просто набираете
mamba deactivate
Но вы можете настроить conda таким образом, чтобы активировать ее только тогда, когда вы ее используете. Затем, если вы, например, наберете
mamba activate env
(env)mamba activate base
(base)mamba activate base
(base)mamba activate xy
Вы фактически будете во вложенной среде(xy)
и(xy) -deactivate-> (base) -deactivate-> (base) -deactivate-> (env) -deactivate-> no conda/mamba
.
Итак, если вы находитесь в какой-то среде, не знаете, насколько она вложена, и хотите получить базовую среду, вы также можете использовать
mamba activate base
У меня была такая же проблема, когда я работал над сценарием установщика, я посмотрел на то, что сделал bin/activ_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%, работает ли он как задумано, возможно, я что-то упустил полностью.
Просто введите следующую команду в командной строке:
deactivate