Estou usando o virtualenv e o virtualenvwrapper. Eu posso alternar entre virtualenv's muito bem usando o workon
comando
me@mymachine:~$ workon env1
(env1)me@mymachine:~$ workon env2
(env2)me@mymachine:~$ workon env1
(env1)me@mymachine:~$
Como saio de todas as máquinas virtuais e trabalho na minha máquina real novamente? No momento, a única maneira de voltar ao assunto me@mymachine:~$
é sair do shell e iniciar um novo. Isso é meio chato. Existe um comando para trabalhar em "nada" e, em caso afirmativo, o que é? Se esse comando não existir, como eu o crio?
python
virtualenv
virtualenvwrapper
Apreche
fonte
fonte
Respostas:
Geralmente, ativar um virtualenv fornece uma função de shell chamada:
o que coloca as coisas de volta ao normal.
Acabei de olhar especificamente novamente para o código
virtualenvwrapper
e, sim, ele também suportadeactivate
como a maneira de escapar de todos os virtualenvs.Se você está tentando sair de um ambiente Anaconda , o comando depende da sua versão do
conda
. Versões recentes (como 4.6) instalam umaconda
função diretamente no seu shell; nesse caso, você executa:Em vez disso, versões mais antigas de conda implementam a desativação usando um script independente:
fonte
virtualenvwrapper
e talvez Doug Hellmann o considerasse! Observe que, para aqueles que podem ler esses comentários mais tarde, esse NÃOworkon
é um comando nativo (que é o objetivo da pergunta original), mas um comando!virtualenv
virtualenvwrapper
Eu defini um alias , workoff , como o oposto de workon :
É fácil lembrar:
fonte
.bashrc
?~/.bashrc
Usar:
Se isso não funcionar, tente
Qualquer um que saiba como o Bash
source
funciona achará estranho, mas alguns wrappers / fluxos de trabalho em torno do virtualenv o implementam como complemento / contrapartesource activate
. Sua milhagem pode variar.fonte
deactivate
é uma função criada quando você origina oactivate
arquivo. Sua sugestão a fazersource deactivate
não faz sentido em tudo, como não há nenhum arquivo chamadodeactivate
Para ativar um ambiente virtual Python:
Para desativar:
fonte
$source activate
$cd /to/dir/i/want/my/virtualenv/installed
, então$virtualenv name_i_want_for_it
, em seguida,$. name_i_want_for_it/bin/activate
virtualenv ainda parece um pouco fora para mim. Precisa ser melhorado ...Eu descobri que quando em um ambiente Miniconda3 eu tinha que executar:
Nem
deactivate
nemsource deactivate
trabalhou para mim.fonte
deactivate
foi paravirtualenv
, esource deactivate
é para antigo condado no Linux.conda deactivate
é uma boa maneira multiplataforma para envs de conda (não virtualenvs)Você pode usar
virtualenvwrapper
para facilitar a maneira como trabalhavirtualenv
.Instalando
virtualenvwrapper
:Se você estiver usando um shell padrão, abra seu
~/.bashrc
ou~/.zshrc
se você usa Oh My Zsh . Adicione estas duas linhas:Para ativar um virtualenv existente, use o comando
workon
:Para desativar seu virtualenv:
Aqui está o meu tutorial , passo a passo sobre como instalar o virtualenv e o virtualenvwrapper.
fonte
workon
comando, ele funciona em qualquer diretório.deactivate
em um script shell sem primeiro procurar o script que define essa função (nesse caso, você terá esse comando não será encontrado .. . erro)Como a
deactivate
função criada pelo sourcing~/bin/activate
não pode ser descoberta pelos meios usuais de procura de um comando desse tipo~/bin
, convém criar um que apenas execute a funçãodeactivate
.O problema é que um script chamado
deactivate
contendo um único comandodeactivate
causará um loop infinito se for executado acidentalmente enquanto não estiver no venv. Um erro comum.Isso pode ser evitado executando apenas
deactivate
se a função existir (isto é, foi criada pelo sourcingactivate
).fonte
Use
deactivate
.Nota,
(my_env)
se foi.fonte
Eu uso o zsh-autoenv, que é baseado no autoenv .
Aqui está um exemplo:
Portanto, quando saio do
dtree
diretório, o ambiente virtual é encerrado automaticamente."Development tree utiles"
é apenas um nome ... Não há nenhum meio oculto de ligação aos Illuminati aqui.fonte
O uso do
deactivate
recurso fornecido peloactivate
script do venv exige que você confie na função de desativação para ser codificada corretamente para redefinir de forma limpa todas as variáveis de ambiente, como eram antes - levando em consideração não apenas a ativação original , mas também quaisquer opções , configurações ou outras opções . trabalho que você pode ter feito enquanto isso.Provavelmente está bem, mas apresenta um risco novo e diferente de deixar seu ambiente modificado posteriormente.
No entanto, não é tecnicamente possível para um processo alterar diretamente as variáveis de ambiente de seu pai, portanto, podemos usar um sub-shell separado para ter certeza absoluta de que nossos
venv
s não deixam nenhuma alteração residual para trás:Ativar:
$ bash --init-file PythonVenv/bin/activate
venv
. Seubash
shell original permanece inalterado.Para desativar:
$ exit
OU[CTRL]
+[D]
venv
em que se encontra e o leva de volta ao shell original antes de o script de ativação fazer alterações no ambiente.Exemplo:
fonte
Eu tive o mesmo problema enquanto trabalhava em um script de instalação. Dei uma olhada no que o bin / enable_this.py fez e o invertei.
Exemplo:
Não tenho 100% de certeza se funciona como pretendido. Eu posso ter perdido algo completamente.
fonte