27

Как выйти/деактивировать виртуальное окружение Python?

13

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

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

Как мне выйти из всех виртуальных окружений и вернуться к системному окружению? В данный момент единственный способ, которым я могу вернуться к me@mymachine:~$, — это выйти из оболочки и запустить новую. Это довольно неудобно. Существует ли команда для работы "в никуда", и если да, то какова она? Если такой команды нет, как мне создать такую команду?

4 ответ(ов)

0

Чтобы активировать виртуальную среду Python, выполните следующие команды в терминале:

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

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

$ deactivate

Обратите внимание, что для активации используется команда source, а не просто ./bin/activate.

0

Чтобы активировать виртуальную среду в MacOS Ventura, выполните следующие команды в терминале:

sudo chmod -R 755 ./venv/bin
source venv/bin/activate

Чтобы деактивировать виртуальную среду, просто введите команду:

deactivate

Не забудьте, что chmod -R 755 задает права доступа к файлам внутри каталога venv/bin, что может понадобиться, если у вас возникли проблемы с правами доступа.

0

Команда deactivate [имя вашей среды] позволяет выйти из вашей python-среды.

Пример для python3.6 на Windows 10 в PowerShell:

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\kyrlon\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:~$

Однако стоит отметить, что команда deactivate в стандартной реализации virtualenv не принимает аргументы. Чтобы выйти из активированной среды, достаточно просто ввести deactivate без указания имени среды.

0

Использование функции deactivate, предоставляемой скриптом activate в виртуальных окружениях (venv), требует доверия к тому, что функция деактивации корректно сбросит все переменные среды на исходные значения. При этом следует учитывать не только первоначальную активацию, но и все переключения, конфигурации или другие действия, которые вы могли выполнить между активацией и деактивацией.

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

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


Для активации:

$ 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!
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь