Как выйти/выйти/отключить 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.

Ответ 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%, если он работает по назначению, я, возможно, пропустил что-то полностью.