Como exibir o nome do Virtualenv atual?

19

Eu estou usando virtualenv, virtualenvwrapper, zsh,oh-my-zsh , terminal, em CrunchBang.

Estou tentando exibir o nome da corrente virtualenvassim

workon example
(example)... 

Eu tentei muitas soluções, nenhuma parece funcionar, aqui está o meu arquivo .zshrc , eu sei que não é grande coisa corrigi-lo, mas não consigo encontrar a solução certa. Faz muito tempo desde a última vez que usei o Linux para desenvolvimento do Django, esqueci o que costumava fazer.

Agora, entendo username@crunchbang, não sei dizer qual virtualenv estou usando.

Lynob
fonte
Eu acredito que você está perguntando como definir seu prompt para que ele mostre em qual virtualenv você está, correto?
slm
@slm sim exatamente
Lynob

Respostas:

10

Prompt do Shell

Dentro do seu virtualenvambiente há um arquivo bin/activate. Você pode editar este arquivo para alterar seu prompt para o que você quiser. Especificamente esta seção do arquivo:

...
else
    PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1"
fi
...

A variável PS1é uma variável especial que controla como será o prompt de um shell. Alterar seu valor alterará seu virtualenvprompt:

PS1="(this is my prompt) "

Exemplo

  1. Crie um ambiente de amostra.

    $ virtualenv tst-env
  2. Quando você está usando, virtualenvnormalmente obtém esse arquivo.

    $ cd $HOME/tst-env
    
    $ source bin/activate
    (tst-env)[saml@grinchy tst-env]$ 
  3. Depois de fazer a alteração acima na variável PS1do bin/activatearquivo, meu prompt agora é o seguinte:

    $ source bin/activate
    (tst-env)

Aqui estão as instruções oficiais sobre como fazer isso .

slm
fonte
tentei agora, não corrigi-lo
Lynob
aqui está o meu arquivo de ativação pastebin.com/tZqdr1Yz
Lynob
O que acontece quando você cria o activatearquivo? Seu arquivo funcionou bem para mim.
Slm
não vejo saída, então não sei dizer o que acontece, o virtualenvestá funcionando além do que não vejo nada, talvez seja .zshrcproblema ou virtualenvwrapper? esse problema pode ser depurado? observe que eu tenho 2 arquivos executáveis ​​virualenv, o normal virtualenve virtualenv-2.7isso é normal ou virtualenvfoi baixado duas vezes? e é assim que eu instalei virtualenv e virualenvwrapper no caso importasudo pip install virtualenv
Lynob
@ Fischer - Eu apenas verifiquei duas vezes usando zshe funciona com isso também, então isso é provavelmente um env. questão. Vamos ignorar as duas configurações do virtualenv por enquanto. Para depurar, você pode habilitá-lo, set -xno seu shell e, em seguida, execute o source activatecomando novamente. Você deve ver as PS1=linhas em que o prompt está sendo definido.
slm
3

Se você estiver usando virtualenvwrappere zshhouver vários ganchos zsh no ~/.virtualenvs/diretório, você poderá usar para personalizar seus ambientes. Aqui estão algumas informações sobre isso. Você pode forçar uma atualização para PS1que prefixe o trabalho atual virtualenvno prompt do shell adicionando:

_OLD_VIRTUAL_PS1=$PS1
PS1="(`basename \"$VIRTUAL_ENV\"`) $PS1"
builtin \export PS1

para ~/.virtualenvs/postactivate. Para remover a marca quando você deactivateadiciona:

PS1=$_OLD_VIRTUAL_PS1
builtin export PS1

para ~/.virtualenvs/postdeactivate

A única coisa (plausível) que deve quebrar isso é contratar recursos ~/.zshrcenquanto trabalha em umvirtualenv

Tom B
fonte
Eu acredito que você está pós-desativado script tem um erro. deve ler-se PS1 = $ _ OLD_VIRTUAL_PS1 builtin \ export PS1
Greg Hilston
O virtualenvwrapper já faz isso por padrão agora. No venv criado por virtualenvwrapper, o script bin / enable contém código para preceder o nome do venv aos prompts zsh e bash!
Erik Westrup
2

Você não precisa editar seu ~/.zshrc .

Como você está trabalhando virtualenvwrapper, é possível adicionar opções ou ganchos ao$WORKON_HOME/post(de)activate arquivos.

Se você quiser ver mais detalhes, consulte aqui .

O link acima permite que eu faça o seguinte:

No meu caso, $WORKON_HOME=~/Envsporque modifiquei esse caminho ao instalar o virtualenvwrapper; Caso contrário, você deve ter a pasta ~/.virtualenvs.

  1. Abra o arquivo postactivatelocalizado em$WORKON_HOME

  2. Adicione estas linhas:

    PS1="$_OLD_VIRTUAL_PS1"
    _OLD_RPROMPT="$RPROMPT"
    RPROMPT="%{${fg_bold[white]}%}(env: %{${fg[green]}%}`basename \"$VIRTUAL_ENV\"`%{${fg_bold[white]}%})%{${reset_color}%} $RPROMPT"
  3. Salve e divirta-se!

    Você obterá algo como isto: feito

  4. (OPCIONAL) Se desejar, você pode editar o postdeactivatearquivo para adicionar esta linha:

    RPROMPT="$_OLD_RPROMPT"
Yor Jaggy Castaño
fonte
Isso parece ter sido copiado da documentação oficial
Tom Hale
0

Acabei de testá-lo no ubuntu 14.04 e tive o mesmo problema. Para corrigi-lo, adicione isso ao seu .zshrc

source /usr/share/virtualenvwrapper/virtualenvwrapper.sh

ou execute isso no terminal

echo source /usr/share/virtualenvwrapper/virtualenvwrapper.sh >> ~/.zshrc

No Mac OS XI tive que fazer

echo source /usr/local/bin/virtualenvwrapper.sh >> ~/.zshrc
Código Kleber
fonte
0

Se você conhece o tema que está sendo usado, pode adicionar uma função para recuperar o nome base VIRTUAL_ENV ativado e usá-lo na variável PROMPT no arquivo de tema * .zsh localizado em ~ / .oh-my-zsh / themes / e isso deve fazer o truque!

Para mim, foi o tema padrão 'oh-my-zsh', ou seja, 'robbyrussels', que foi configurado.

function virtualenv_info {
    [ $VIRTUAL_ENV ] && echo '('`basename $VIRTUAL_ENV`') '
}

local ret_status="%(?:%{$fg_bold[green]%}➜ :%{$fg_bold[red]%}➜ )"
PROMPT='${ret_status} $(virtualenv_info) %{$fg[cyan]%}%c%{$reset_color%} $(git_prompt_info)'

A adição do código acima gerou o resultado abaixo:

insira a descrição da imagem aqui

(kunkka.com) é o virtualenv que acabei de desativar.

Após editar o arquivo do tema, não se esqueça de originar o arquivo .zshrc.

-> source ~/.zshrc
darkdefender27
fonte