Как выйти/деактивировать виртуальное окружение Python?
Я использую virtualenv и virtualenvwrapper. Я могу без проблем переключаться между виртуальными окружениями с помощью команды workon
.
me@mymachine:~$ workon env1
(env1)me@mymachine:~$ workon env2
(env2)me@mymachine:~$ workon env1
(env1)me@mymachine:~$
Как мне выйти из всех виртуальных окружений и вернуться к системному окружению? В данный момент единственный способ, которым я могу вернуться к me@mymachine:~$
, — это выйти из оболочки и запустить новую. Это довольно неудобно. Существует ли команда для работы "в никуда", и если да, то какова она? Если такой команды нет, как мне создать такую команду?
4 ответ(ов)
Чтобы активировать виртуальную среду Python, выполните следующие команды в терминале:
$ cd ~/python-venv/
$ source bin/activate
Для деактивации виртуальной среды используйте:
$ deactivate
Обратите внимание, что для активации используется команда source
, а не просто ./bin/activate
.
Чтобы активировать виртуальную среду в MacOS Ventura, выполните следующие команды в терминале:
sudo chmod -R 755 ./venv/bin
source venv/bin/activate
Чтобы деактивировать виртуальную среду, просто введите команду:
deactivate
Не забудьте, что chmod -R 755
задает права доступа к файлам внутри каталога venv/bin
, что может понадобиться, если у вас возникли проблемы с правами доступа.
Команда 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
без указания имени среды.
Использование функции 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!
В чем разница между venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv и другими?
Как удалить все пакеты, установленные через pip?
Как обновить pip изнутри виртуального окружения?
Почему используется string.join(list), а не list.join(string)?
Создание словаря с помощью генератора словарей