Comment afficher le nom du Virtualenv actuel?

20

J'utilise virtualenv, virtualenvwrapper, zsh, oh-my-zsh, terminaison, sur Crunchbang.

J'essaie d'afficher le nom du courant virtualenvcomme ça

workon example
(example)... 

J'ai essayé de nombreuses solutions, aucune ne semble fonctionner, voici mon fichier .zshrc , je sais que ce n'est pas grave de le réparer mais je ne trouve pas la bonne solution. Cela fait longtemps que la dernière fois que j'ai utilisé Linux pour le développement de Django, j'ai oublié ce que je faisais.

En ce moment, je vois username@crunchbang, je ne peux pas dire quel virtualenv j'utilise.

Lynob
la source
Je crois que vous demandez comment définir votre invite pour qu'elle montre dans quel virtualenv vous êtes, n'est-ce pas?
slm
@slm oui exactement
Lynob

Réponses:

11

Invite de Shell

A l' intérieur de votre virtualenvenvironnement est un fichier, bin/activate. Vous pouvez modifier ce fichier pour changer votre invite en ce que vous voulez qu'il ressemble. Plus précisément cette section du fichier:

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

La variable PS1est une variable spéciale qui contrôle à quoi ressemblera l'invite d'un shell. Changer sa valeur changera votre virtualenvinvite:

PS1="(this is my prompt) "

Exemple

  1. Créez un exemple d'environnement.

    $ virtualenv tst-env
  2. Lorsque vous utilisez, virtualenvvous sourcez généralement ce fichier.

    $ cd $HOME/tst-env
    
    $ source bin/activate
    (tst-env)[saml@grinchy tst-env]$ 
  3. Après avoir apporté la modification ci-dessus à la variable PS1dans le bin/activatefichier, mon invite est maintenant la suivante:

    $ source bin/activate
    (tst-env)

Voici les instructions officielles sur la façon de procéder .

slm
la source
l'ai essayé maintenant, je ne l'ai pas
résolu
voici mon fichier d'activation pastebin.com/tZqdr1Yz
Lynob
Que se passe-t-il lorsque vous sourcez le activatefichier? Votre dossier a bien fonctionné pour moi.
slm
je ne vois aucune sortie, donc je ne peux pas dire ce qui se passe, cela virtualenvfonctionne à part ça je ne vois rien, c'est peut-être un .zshrcproblème ou virtualenvwrapper? ce problème peut-il être débogué? s'il vous plaît noter que j'ai 2 fichiers exécutables virualenv, la normale virtualenvet virtualenv-2.7est-ce normal ou a virtualenvété téléchargé deux fois? et voici comment j'ai installé virtualenv et virualenvwrapper au cas où cela sudo pip install virtualenv
importerait
@Fischer - Je viens de le vérifier en utilisant zshet cela fonctionne aussi, donc c'est très probablement un env. problème. Ignorons pour l'instant les 2 configurations de virtualenv. Pour déboguer, vous pouvez l'activer set -xdans votre shell, puis réexécuter la source activatecommande. Vous devriez voir des PS1=lignes où l'invite est définie.
slm
3

Si vous utilisez virtualenvwrapperet zshqu'il existe un certain nombre de crochets zsh dans votre ~/.virtualenvs/répertoire que vous pouvez utiliser pour personnaliser vos environnements. Voici quelques informations à ce sujet. Vous pouvez forcer une mise à jour PS1qui ajoutera le travail en cours virtualenvà votre invite shell en ajoutant:

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

à ~/.virtualenvs/postactivate. Pour supprimer la balise lorsque vous deactivateajoutez:

PS1=$_OLD_VIRTUAL_PS1
builtin export PS1

à ~/.virtualenvs/postdeactivate

La seule chose (plausible) qui devrait briser cela est le financement ~/.zshrctout en travaillant dans unvirtualenv

Tom B
la source
Je pense que votre script post-désactivation a une erreur. il devrait lire PS1 = $ _ OLD_VIRTUAL_PS1 builtin \ export PS1
Greg Hilston
virtualenvwrapper le fait déjà par défaut maintenant. Dans venv créé par virtualenvwrapper, le script bin / activate contient du code pour ajouter le nom de venv aux invites zsh et bash!
Erik Westrup
2

Vous n'êtes pas obligé de modifier votre ~/.zshrc.

Puisque vous travaillez avec, virtualenvwrapperil est possible d'ajouter des options ou des crochets aux $WORKON_HOME/post(de)activatefichiers.

Si vous souhaitez voir plus de détails, consultez ici .

Le lien ci-dessus me permet de faire ensuite:

Dans mon cas, $WORKON_HOME=~/Envscar j'ai modifié ce chemin lorsque j'ai installé virtualenvwrapper; sinon, vous devriez avoir le dossier ~/.virtualenvs.

  1. Ouvrez le fichier postactivatesitué dans$WORKON_HOME

  2. Ajoutez ces lignes:

    PS1="$_OLD_VIRTUAL_PS1"
    _OLD_RPROMPT="$RPROMPT"
    RPROMPT="%{${fg_bold[white]}%}(env: %{${fg[green]}%}`basename \"$VIRTUAL_ENV\"`%{${fg_bold[white]}%})%{${reset_color}%} $RPROMPT"
  3. Économisez et profitez!

    Vous obtiendrez quelque chose comme ceci: terminé

  4. (FACULTATIF) Si vous le souhaitez, vous pouvez modifier le postdeactivatefichier pour ajouter cette ligne:

    RPROMPT="$_OLD_RPROMPT"
Yor Jaggy Castaño
la source
Cela semble être copié de la documentation officielle
Tom Hale
0

Je viens de le tester sur Ubuntu 14.04 et j'ai eu le même problème. Pour le corriger, ajoutez ceci à votre .zshrc

source /usr/share/virtualenvwrapper/virtualenvwrapper.sh

ou exécutez ceci dans le terminal

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

Dans Mac OS XI devait faire

echo source /usr/local/bin/virtualenvwrapper.sh >> ~/.zshrc
Code Kleber
la source
0

Si vous connaissez le thème utilisé, vous pouvez ajouter une fonction pour récupérer le nom de base VIRTUAL_ENV activé et l'utiliser dans la variable PROMPT du fichier * .zsh-theme situé à ~ / .oh-my-zsh / themes / et ça devrait faire l'affaire!

Pour moi, c'était le thème par défaut «oh-my-zsh», c'est-à-dire «robbyrussels», qui était configuré.

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)'

L'ajout du code ci-dessus a généré le résultat ci-dessous:

entrez la description de l'image ici

(kunkka.com) est le virtualenv que je viens de désactiver.

Après avoir modifié le fichier de thème, n'oubliez pas de source le fichier .zshrc.

-> source ~/.zshrc
darkdefender27
la source