¿Cómo mostrar el nombre del Virtualenv actual?

19

Estoy usando virtualenv, virtualenvwrapper, zsh, oh-my-zsh, terminador, en Crunchbang.

Estoy tratando de mostrar el nombre de la corriente virtualenvasí

workon example
(example)... 

He probado muchas soluciones, ninguna parece funcionar, aquí está mi archivo .zshrc , sé que no es gran cosa solucionarlo, pero no puedo encontrar la solución correcta. Ha pasado mucho tiempo desde la última vez que usé Linux para el desarrollo de Django, olvidé lo que solía hacer.

En este momento, veo username@crunchbang, no puedo decir qué virtud estoy usando.

Lynob
fuente
Creo que está preguntando cómo configurar su mensaje para que muestre en qué virtuosa está, ¿correcto?
slm
@slm sí exactamente
Lynob

Respuestas:

10

Aviso de Shell

Dentro de su virtualenventorno es un archivo, bin/activate. Puede editar este archivo para cambiar su solicitud a lo que quiera que se vea. Específicamente esta sección del archivo:

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

La variable PS1es una variable especial que controla cómo se verá el indicador de un shell. Cambiar su valor cambiará su virtualenvsolicitud:

PS1="(this is my prompt) "

Ejemplo

  1. Crea un entorno de muestra.

    $ virtualenv tst-env
  2. Cuando lo usa virtualenv, normalmente obtiene este archivo.

    $ cd $HOME/tst-env
    
    $ source bin/activate
    (tst-env)[saml@grinchy tst-env]$ 
    
  3. Después de hacer el cambio anterior a la variable PS1en el bin/activatearchivo, mi mensaje ahora es esto:

    $ source bin/activate
    (tst-env)
    

Aquí están las instrucciones oficiales sobre cómo hacer esto .

slm
fuente
lo probé ahora, no lo
arreglé
aquí está mi archivo de activación pastebin.com/tZqdr1Yz
Lynob
¿Qué sucede cuando obtienes el activatearchivo? Tu archivo funcionó bien para mí.
slm
No veo salida, así que no puedo decir qué sucede, el virtualenvestá funcionando aparte de eso, no veo nada, ¿tal vez es un .zshrcproblema o virtualenvwrapper? ¿Se puede depurar este problema? tenga en cuenta que tengo 2 archivos ejecutables virualenv, el normal virtualenvy ¿ virtualenv-2.7es esto normal o virtualenvse descargó dos veces? y así es como instalé virtualenv y virualenvwrapper en caso de que sea importantesudo pip install virtualenv
Lynob
@Fischer: solo lo verifiqué dos veces zshy también funciona con eso, por lo que es muy probable que sea un env. problema. Ignoremos las 2 configuraciones de virtualenv por el momento. Para depurar puede habilitarlo set -x, en su shell y luego volver a ejecutar el source activatecomando nuevamente. Debería ver PS1=líneas donde se establece el indicador.
slm
3

Si está utilizando virtualenvwrappery zshhay una serie de ganchos zsh en su ~/.virtualenvs/directorio que puede utilizar para personalizar sus entornos. Aquí hay un poco de información sobre estos. Puede forzar una actualización PS1que antepondrá el trabajo actual virtualenva su indicador de shell agregando:

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

a ~/.virtualenvs/postactivate. Para eliminar la etiqueta cuando usted deactivate, agregue:

PS1=$_OLD_VIRTUAL_PS1
builtin export PS1

a ~/.virtualenvs/postdeactivate

Lo único (plausible) que debería romper esto es la asignación de recursos ~/.zshrcmientras se trabaja en unvirtualenv

Tumba
fuente
Creo que su script posterior a la activación tiene un error. debería leer PS1 = $ _ OLD_VIRTUAL_PS1 incorporado \ exportar PS1
Greg Hilston
virtualenvwrapper ya hace esto por defecto ahora. En venv creado por virtualenvwrapper, la secuencia de comandos bin / activ contiene código para pre-colgar el nombre de venv a las indicaciones de zsh y bash.
Erik Westrup
2

No tienes que editar tu ~/.zshrc.

Dado que está trabajando con virtualenvwrapperél, es posible agregar opciones o enlaces a los $WORKON_HOME/post(de)activatearchivos.

Si quieres ver más detalles consulta aquí .

El enlace de arriba me permite hacer lo siguiente:

En mi caso $WORKON_HOME=~/Envsporque modifiqué esta ruta cuando instalé virtualenvwrapper; si no lo hicieras, deberías tener la carpeta ~/.virtualenvs.

  1. Abra el archivo postactivateubicado en$WORKON_HOME

  2. Agregue estas líneas:

    PS1="$_OLD_VIRTUAL_PS1"
    _OLD_RPROMPT="$RPROMPT"
    RPROMPT="%{${fg_bold[white]}%}(env: %{${fg[green]}%}`basename \"$VIRTUAL_ENV\"`%{${fg_bold[white]}%})%{${reset_color}%} $RPROMPT"
  3. ¡Ahorra y disfruta!

    Obtendrás algo como esto: hecho

  4. (OPCIONAL) Si lo desea, puede editar el postdeactivatearchivo para agregar esta línea:

    RPROMPT="$_OLD_RPROMPT"
Yor Jaggy Castaño
fuente
Esto parece copiarse de la documentación oficial
Tom Hale,
0

Acabo de probarlo en Ubuntu 14.04 y tuve el mismo problema. Para solucionarlo, agregue esto a su .zshrc

source /usr/share/virtualenvwrapper/virtualenvwrapper.sh

o ejecutar esto en la terminal

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

En Mac OS X tuve que hacer

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

Si conoce el tema que se está utilizando, puede agregar una función para recuperar el nombre base VIRTUAL_ENV activado y usarlo en la variable PROMPT en el archivo * .zsh-theme ubicado en ~ / .oh-my-zsh / themes / y eso debería hacer el truco!

Para mí era el tema predeterminado 'oh-my-zsh', es decir, 'robbyrussels' que estaba 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)'

Agregar el código anterior generó el siguiente resultado:

ingrese la descripción de la imagen aquí

(kunkka.com) es el virtualenv que acabo de desactivar.

Después de editar el archivo de tema, no olvides buscar el archivo .zshrc.

-> source ~/.zshrc
darkdefender27
fuente