Вопрос

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

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

Однако, как мне выйти из всех виртуальных машин и снова работать на моей реальной машине?Прямо сейчас, это единственный способ, который у меня есть, чтобы вернуться к

me@mymachine:~$ 

заключается в том, чтобы выйти из командной строки и запустить новую.Это немного раздражает.Есть ли команда для работы с "ничем", и если да, то что это такое?Если такой команды не существует, как бы я приступил к ее созданию?

Это было полезно?

Решение

Обычно активация virtualenv дает вам функцию оболочки с именем:

$ deactivate

что возвращает все в норму.

Я только что еще раз внимательно рассмотрел код для virtualenvwrapper, и да, он тоже поддерживает deactivate как способ сбежать из всех виртуальных пространств.

Если вы пытаетесь покинуть Анаконда среде процедура немного другая:выполнить команду из двух слов 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.

Другие советы

Я определил псевдоним отработка как противоположность workon:

alias workoff='deactivate'

Легко вспомнить:

[bobstein@host ~]$ workon django_project
(django_project)[bobstein@host ~]$ workoff
[bobstein@host ~]$
$ deactivate 

Если это не сработает, попробуйте

$ source deactivate

Тот, кто знает, как бить source Works подумают, что это странно, но некоторые оболочки/рабочие процессы вокруг virtualenv реализуются как дополнение/аналог для source activate.ЯММВ

чтобы активировать виртуальную среду Python:

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

чтобы деактивировать:

$deactivate

Я обнаружил, что в среде Miniconda3 мне пришлось запустить:

conda deactivate

Ни один deactivate ни source deactivate работал у меня.

Вы можете использовать virtualenvwrapper чтобы облегчить вам работу с virtualenv

Установка virtualenvwrapper

pip install virtualenvwrapper

Если вы используете стандартную оболочку, откройте ~/.bashrc или ~/.zshrc если вы используете oh-my-zsh.Добавьте эти две строки:

export WORKON_HOME=$HOME/.virtualenvs  
source /usr/local/bin/virtualenvwrapper.sh

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

$ workon myenv
(myenv)$

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

(myenv)$ deactivate

Вот мой руководство, шаг за шагом, как установить virtualenv и virtualenvwrapper

Использовать deactivate.

(my_env) user@user:~/my_env$ deactivate
user@user-Lenovo-E40-80:~/my_env$ 

Примечание, (my_env) ушел.

Поскольку deactivate функция, созданная путем поиска ~/bin/activate не может быть обнаружен обычными способами поиска такой команды в ~/bin, вы можете создать тот, который просто выполняет функцию deactivate.

Проблема в том, что скрипт с именем deactivate содержащий одну команду deactivate вызовет бесконечный цикл, если случайно будет выполнен вне venv.Распространенная ошибка.

Этого можно избежать, просто выполнив deactivate если функция существует (т.е.был создан путем поиска activate).

#!/bin/bash

declare -Ff deactivate  && deactivate

Я использую zsh-автоматическое включение который основан на автоматическое включение.

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

У меня была такая же проблема во время работы над сценарием установщика, я взглянул на то, что бен/activate_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% уверен, что это работает так, как задумано, возможно, я что-то совсем упустил.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top