Использование deactivateфункции, предоставляемой сценарием venv, 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!