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.