Как выйти/выйти/отключить Python virtualenv
Я использую virtualenv и virtualenvwrapper. Я могу переключаться между virtualenv просто отлично, используя команду workon
.
[email protected]:~$ workon env1
(env1)[email protected]:~$ workon env2
(env2)[email protected]:~$ workon env1
(env1)[email protected]:~$
Однако как мне выйти из всех виртуальных машин и снова работать на моей реальной машине? Прямо сейчас, единственный способ вернуться к
[email protected]:~$
это выйти из оболочки и начать новый. Такого рода раздражает. Есть ли команда работать на "ничего", и если да, то что это? Если такой команды не существует, как бы я ее создал?
Ответы
Ответ 1
Обычно, активируя virtualenv, вы получаете функцию оболочки с именем:
$ deactivate
что возвращает вещи в норму.
Я только что специально посмотрел на код для virtualenvwrapper,
и, да, он также поддерживает deactivate
как способ убежать от всех virtualenv.
Если вы пытаетесь покинуть среду 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.
Ответ 2
Я определил alias отработку как противоположность workon:
alias workoff='deactivate'
Легко запомнить:
[[email protected] ~]$ workon django_project
(django_project)[[email protected] ~]$ workoff
[[email protected] ~]$
Ответ 3
$ deactivate
Если это не сработает, попробуйте
$ source deactivate
Любой, кто знает, как работают bash source
, подумает, что нечетные, но некоторые оболочки/рабочие процессы вокруг virtualenv реализуются как комплимент/эквивалент source activate
, YMMV
Ответ 4
для активации виртуальной среды python:
$cd ~/python-venv/
$./bin/activate
для деактивации:
$deactivate
Ответ 5
Вы можете использовать virtualenvwrapper
, чтобы облегчить работу с virtualenv
Установка virtualenvwrapper
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
Ответ 6
Используйте deactivate
.
(my_env) [email protected]:~/my_env$ deactivate
[email protected]:~/my_env$
Обратите внимание, (my_env)
больше нет.
Ответ 7
Я обнаружил, что в среде Miniconda3 мне нужно было запустить:
conda deactivate
Ни deactivate
ни deactivate
source deactivate
спомогли мне.
Ответ 8
Я использую 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
, виртуальная среда автоматически завершается.
Ответ 9
Сама же проблема при работе с установщиком 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%, если он работает по назначению, я, возможно, пропустил что-то полностью.