Как выйти / выйти / отключить Python virtualenv - PullRequest
1306 голосов
/ 13 июня 2009

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

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

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

me@mymachine:~$ 

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

Ответы [ 9 ]

2130 голосов
/ 13 июня 2009

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

$ deactivate

, который возвращает вещи в нормальное состояние.

Редактировать 1

Я только что специально посмотрел на код для virtualenvwrapper, и, да, он тоже поддерживает deactivate как способ убежать от всех virtualenvs.

Редактировать 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.
39 голосов
/ 12 апреля 2015
$ deactivate 

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

$ source deactivate

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

39 голосов
/ 14 января 2015

Я определил псевдоним workoff как противоположность workon:

alias workoff='deactivate'

Легко запомнить:

[bobstein@host ~]$ workon django_project
(django_project)[bobstein@host ~]$ workoff
[bobstein@host ~]$
11 голосов
/ 26 ноября 2015

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

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

для отключения:

$deactivate
2 голосов
/ 03 сентября 2017

Использование deactivate.

(my_env) user@user:~/my_env$ deactivate
user@user-Lenovo-E40-80:~/my_env$ 

Примечание. (my_env) исчезло.

2 голосов
/ 01 сентября 2016

Вы можете использовать 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

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

1 голос
/ 23 апреля 2019

Я обнаружил, что в среде Miniconda3 мне нужно было выполнить:

conda deactivate

Ни deactivate, ни source deactivate не работали для меня.

0 голосов
/ 14 февраля 2017

Я использую 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, виртуальная среда автоматически закрывается.

0 голосов
/ 11 декабря 2014

У меня была та же проблема, когда я работал над сценарием установщика, я взглянул на то, что сделал 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%, если это работает как задумано, возможно, я что-то упустил полностью.

...