Come visualizzare il nome dell'attuale Virtualenv?


19

Sto utilizzando virtualenv, virtualenvwrapper, zsh, oh-my-zsh, Terminator, il CrunchBang.

Sto cercando di visualizzare il nome della corrente in questo virtualenvmodo

workon example
(example)... 

Ho provato molte soluzioni nessuna sembra funzionare, ecco il mio file .zshrc , so che non è un grosso problema ripararlo, ma non riesco a trovare la soluzione giusta. È passato molto tempo dall'ultima volta che ho usato Linux per lo sviluppo di Django, ho dimenticato cosa facevo.

In questo momento, vedo username@crunchbang, non so dire quale virtualenv sto usando.


Credo che ti stia chiedendo come impostare il tuo prompt in modo che mostri in quale virtualenv sei, giusto?
slm

@slm yes esattamente
Lynob

Risposte:


10

Prompt di Shell

All'interno del vostro virtualenvambiente è un file, bin/activate. È possibile modificare questo file per modificare la richiesta in qualunque cosa si desideri. Nello specifico questa sezione del file:

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

La variabile PS1è una variabile speciale che controlla l'aspetto del prompt di una shell. La modifica del suo valore cambierà la tua virtualenvrichiesta:

PS1="(this is my prompt) "

Esempio

  1. Creare un ambiente di esempio.

    $ virtualenv tst-env
  2. In genere, quando si utilizza virtualenvquesto file.

    $ cd $HOME/tst-env
    
    $ source bin/activate
    (tst-env)[saml@grinchy tst-env]$ 
  3. Dopo aver apportato la modifica sopra alla variabile PS1nel bin/activatefile, il mio prompt ora è questo:

    $ source bin/activate
    (tst-env)

Ecco le istruzioni ufficiali su come farlo .


provato ora, non risolto
Lynob

ecco il mio file di attivazione pastebin.com/tZqdr1Yz
Lynob

Cosa succede quando si esegue l'origine del activatefile? Il tuo file ha funzionato bene per me.
slm

non vedo alcun output, quindi non posso dire cosa succede, virtualenvfunziona diversamente da quello che non vedo nulla, forse è un .zshrcproblema o virtualenvwrapper? è possibile eseguire il debug di questo problema? si prega di notare che ho 2 file eseguibili virualenv, il normale virtualenved virtualenv-2.7è normale o è virtualenvstato scaricato due volte? ed è così che ho installato virtualenv e virualenvwrapper nel caso in cui sia importantesudo pip install virtualenv
Lynob

@Fischer - Ho appena ricontrollato usando zshe funziona anche con quello, quindi è molto probabile che sia un ambiente. problema. Per il momento ignoriamo le 2 configurazioni di virtualenv. Per eseguire il debug è possibile abilitarlo set -xnella shell e rieseguire nuovamente il source activatecomando. Dovresti vedere le PS1=linee in cui viene impostato il prompt.
slm

3

Se stai usando virtualenvwrappere zshci sono un certo numero di hook zsh nella tua ~/.virtualenvs/directory che puoi usare per personalizzare i tuoi ambienti. Ecco alcune informazioni su questi. È possibile forzare un aggiornamento PS1che anteporrà il funzionamento corrente virtualenval prompt della shell aggiungendo:

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

a ~/.virtualenvs/postactivate. Per rimuovere il tag quando deactivateaggiungi:

PS1=$_OLD_VIRTUAL_PS1
builtin export PS1

per ~/.virtualenvs/postdeactivate

L'unica (plausibile) cosa che dovrebbe rompere questo è il ricorso a risorse ~/.zshrcmentre si lavora in avirtualenv


Credo che lo script post-disattivazione abbia un errore. dovrebbe leggere PS1 = $ _ OLD_VIRTUAL_PS1 builtin \ export PS1
Greg Hilston

virtualenvwrapper lo fa già per impostazione predefinita ora. In venv creato da virtualenvwrapper, lo script bin / activ contiene codice che precede il nome venv alle istruzioni zsh e bash!
Erik Westrup l'

2

Non è necessario modificare il tuo ~/.zshrc.

Dato che stai lavorando virtualenvwrapperè possibile aggiungere opzioni o hook ai $WORKON_HOME/post(de)activatefile.

Se vuoi vedere maggiori dettagli consulta qui .

Il link sopra mi permette di fare il prossimo:

Nel mio caso $WORKON_HOME=~/Envsperché ho modificato questo percorso quando ho installato virtualenvwrapper; in caso contrario dovresti avere la cartella ~/.virtualenvs.

  1. Apri il file che si postactivatetrova in$WORKON_HOME

  2. Aggiungi queste righe:

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

    Otterrai qualcosa del genere: fatto

  4. (OPZIONALE) Se lo desideri, puoi modificare il postdeactivatefile per aggiungere questa riga:

    RPROMPT="$_OLD_RPROMPT"

Questo sembra essere copiato dalla documentazione ufficiale
Tom Hale

0

L'ho appena provato su Ubuntu 14.04 e ho avuto lo stesso problema. Per risolverlo aggiungi questo al tuo .zshrc

source /usr/share/virtualenvwrapper/virtualenvwrapper.sh

o eseguilo nel terminale

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

In Mac OS X dovevo farlo

echo source /usr/local/bin/virtualenvwrapper.sh >> ~/.zshrc

0

Se conosci il tema in uso, puoi aggiungere una funzione per recuperare il nome di base VIRTUAL_ENV attivato e usarlo nella variabile PROMPT nel file * .zsh-theme situato in ~ / .oh-my-zsh / themes / e questo dovrebbe fare il trucco!

Per me era il tema predefinito "oh-my-zsh", cioè "robbyrussels", che era configurato.

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'aggiunta del codice sopra ha generato il risultato seguente:

inserisci qui la descrizione dell'immagine

(kunkka.com) è il virtualenv che ho appena disattivato.

Dopo aver modificato il file del tema, non dimenticare di creare il file .zshrc.

-> source ~/.zshrc
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.