Как выйти / выйти / деактивировать 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скрипт требует, чтобы вы доверяли функции деактивации, чтобы она была правильно запрограммирована для чистого сброса всех переменных среды до того, как они были раньше, принимая во внимание не только исходную активацию, но также любые переключатели, конфигурацию или другую работу, которую вы, возможно, проделали в тем временем.

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

Однако для процесса технически невозможно напрямую изменять переменные среды своего родителя, поэтому мы можем использовать отдельную суб-оболочку, чтобы быть абсолютно уверенными в том, чтоvenvs не оставляют никаких остаточных изменений:


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

$ 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
Другие вопросы по тегам