Как выйти из или деактивировать Python виртуальное окружение при использовании virtualenvwrapper
Я использую virtualenv и virtualenvwrapper. Я могу переключаться между виртуальными окружениями с помощью команды workon:
me@mymachine:~$ workon env1
(env1)me@mymachine:~$ workon env2
(env2)me@mymachine:~$ workon env1
(env1)me@mymachine:~$
Как выйти из всех виртуальных окружений и вернуться к системному окружению? В настоящее время единственный способ вернуться к me@mymachine:~$ - это выйти из оболочки и запустить новую, что неудобно. Существует ли команда для работы с “ничем” (то есть, деактивации текущего виртуального окружения)? Если такой команды не существует, как я могу её создать?
Чтобы деактивировать виртуальное окружение, созданное с помощью virtualenvwrapper, просто используйте стандартную команду deactivate. Эта команда выйдет из текущего виртуального окружения и вернет вас в системное Python-окружение, удалив префикс виртуального окружения из приглашения командной строки и восстановив исходные переменные окружения PATH и другие.
Содержание
- Базовый метод деактивации
- Альтернативные подходы
- Создание пользовательской команды
- Работа с несколькими окружениями
- Устранение распространенных проблем
Базовый метод деактивации
Самый простой способ выйти из виртуального окружения при использовании virtualenvwrapper — это использовать встроенную команду deactivate:
(env1)me@mymachine:~$ deactivate me@mymachine:~$
При выполнении команды deactivate:
- Ваше приглашение командной строки изменится с
(env1)me@mymachine:~$обратно наme@mymachine:~$ - Интерпретатор Python виртуального окружения больше не будет вашим активным Python
- Переменная окружения
PATHбудет восстановлена в исходное системное состояние - Все переменные окружения, специфичные для виртуального окружения, будут сброшены
Эта команда deactivate автоматически настраивается при активации любого виртуального окружения с помощью virtualenvwrapper, будь то через workon или mkvirtualenv.
Альтернативные подходы
Использование workon без аргументов
Хотя workon в основном используется для переключения между окружениями, вы также можете использовать его для просмотра доступных окружений:
(env1)me@mymachine:~$ workon Available environments: env1 env2 default
Однако это не деактивирует текущее окружение — просто перечислит доступные.
Прямое использование deactivate
Команда deactivate работает независимо от того, как вы активировали окружение:
- Если вы активировали с помощью
workon env1 - Если вы активировали с помощью
source /path/to/venv/bin/activate - Если вы активировали с помощью
mkvirtualenv myenv
Команда во всех случаях одинакова:
(env1)me@mymachine:~$ deactivate me@mymachine:~$
Создание пользовательской команды
Если вы предпочитаете более явную команду, такую как workon none или exitenv, вы можете создать пользовательскую функцию оболочки. Вот как настроить ее в файле конфигурации вашей оболочки (.bashrc, .zshrc и т.д.):
Вариант 1: Простая функция workon none
workon() {
# Если аргументы не предоставлены, показать доступные окружения
if [ $# -eq 0 ]; then
command workon
# Если указано "none", деактивировать текущее окружение
elif [ "$1" = "none" ]; then
deactivate
else
command workon "$@"
fi
}
Вариант 2: Специальная команда exitenv
exitenv() {
if [ -n "$VIRTUAL_ENV" ]; then
deactivate
else
echo "Нет активного виртуального окружения"
fi
}
Вариант 3: Команда workoff
workoff() {
deactivate
}
Чтобы использовать любую из этих пользовательских функций, добавьте их в файл конфигурации вашей оболочки и либо перезапустите оболочку, либо выполните команду source ~/.bashrc (или эквивалентную).
Работа с несколькими окружениями
При работе с несколькими виртуальными окружениями могут возникнуть ситуации, когда вам нужно чисто переключаться между ними:
Переключение между окружениями
# Начнем без активного окружения
me@mymachine:~$ workon env1
(env1)me@mymachine:~$ python --version
Python 3.9.7
# Переключимся на другое окружение
(env1)me@mymachine:~$ workon env2
(env2)me@mymachine:~$ python --version
Python 3.8.10
# Вернемся к системному окружению
(env2)me@mymachine:~$ deactivate
me@mymachine:~$ python --version
Python 3.10.6
Проверка текущего окружения
Вы можете проверить, находитесь ли вы в виртуальном окружении, и каком именно:
# Проверить, установлена ли переменная VIRTUAL_ENV
echo $VIRTUAL_ENV
# Вывод: /home/me/.virtualenvs/env1
# Проверить текущий интерпретатор Python
which python
# Вывод: /home/me/.virtualenvs/env1/bin/python
Устранение распространенных проблем
Команда deactivate не найдена
Если вы получаете ошибку “command not found” для deactivate, это обычно означает:
- Вы на самом деле не находитесь в виртуальном окружении
- Скрипты запуска вашей оболочки не правильно подключили virtualenvwrapper
Проверьте, что вы находитесь в виртуальном окружении, проверив приглашение командной строки или переменную VIRTUAL_ENV.
Приглашение командной строки не меняется после деактивации
Если ваше приглашение все еще показывает (env1) после выполнения deactivate, попробуйте:
- Выполнить
deactivateеще раз - Запустить новый сеанс оболочки
- Проверить переменную окружения
PS1
Переменные окружения сохраняются
Если некоторые переменные окружения остаются установленными после деактивации, вам может потребоваться:
- Проверить, были ли они установлены в скриптах запуска вашей оболочки
- Сбросить их вручную:
unset MY_VAR
Virtualenvwrapper не правильно установлен
Если у вас постоянно возникают проблемы с командами virtualenvwrapper:
- Проверьте установку:
which workon - Убедитесь, что она подключена в файле конфигурации вашей оболочки
- Убедитесь, что она загружена перед использованием любых команд
Заключение
Чтобы выйти из или деактивировать Python-виртуальное окружение при использовании virtualenvwrapper, просто используйте стандартную команду deactivate. Эта встроенная команда корректно выйдет из вашего виртуального окружения и вернет вас в системное Python-окружение. Вам не нужно создавать пользовательские команды, если вы не предпочитаете более явный интерфейс.
Основные моменты:
- Используйте
deactivateдля выхода из любого виртуального окружения - Команда работает независимо от того, как вы активировали окружение
- Ваше приглашение командной строки автоматически обновится, чтобы показать, что вы больше не находитесь в виртуальном окружении
- Вы можете создавать пользовательские функции, если предпочитаете другие имена команд
Освоив команду deactivate, вы сможете эффективно управлять своими виртуальными окружениями, не выходя и не перезапуская сеанс оболочки.