Wie zeige ich den Namen der aktuellen Virtualenv an?

19

Ich verwende virtualenv, virtualenvwrapper, zsh, oh-my-zsh, Terminator, auf Crunchbang.

Ich versuche, den Namen des Stroms virtualenvso anzuzeigen

workon example
(example)... 

Ich habe viele Lösungen ausprobiert, keine scheint zu funktionieren. Hier ist meine .zshrc- Datei. Ich weiß, dass es keine große Sache ist, sie zu beheben, aber ich kann nicht die richtige Lösung finden. Es ist lange her, dass ich Linux das letzte Mal für die Django-Entwicklung verwendet habe. Ich habe vergessen, was ich früher getan habe.

Im Moment username@crunchbangkann ich nicht sagen, welches Virtualenv ich verwende.

Lynob
quelle
Ich glaube, Sie fragen, wie Sie Ihre Eingabeaufforderung so einstellen sollen, dass angezeigt wird, in welcher virtuellen Umgebung Sie sich befinden, richtig?
SLM
@ slm ja genau
Lynob

Antworten:

10

Shells Eingabeaufforderung

In Ihrer virtualenvUmgebung befindet sich eine Datei bin/activate. Sie können diese Datei bearbeiten, um die Eingabeaufforderung so zu ändern, wie Sie es möchten. Insbesondere dieser Abschnitt der Datei:

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

Die Variable PS1ist eine spezielle Variable, die steuert, wie die Eingabeaufforderung einer Shell aussehen soll. Durch Ändern des Werts wird Ihre virtualenvEingabeaufforderung geändert :

PS1="(this is my prompt) "

Beispiel

  1. Erstellen Sie eine Beispielumgebung.

    $ virtualenv tst-env
  2. Bei der Verwendung wird virtualenvdiese Datei normalerweise als Quelle verwendet.

    $ cd $HOME/tst-env
    
    $ source bin/activate
    (tst-env)[saml@grinchy tst-env]$ 
  3. Nach der obigen Änderung der Variablen PS1in der bin/activateDatei lautet meine Eingabeaufforderung nun:

    $ source bin/activate
    (tst-env)

Hier finden Sie die offiziellen Anweisungen dazu .

slm
quelle
habe es jetzt versucht, es nicht
behoben
hier ist meine activate Datei pastebin.com/tZqdr1Yz
Lynob
Was passiert, wenn Sie die activateDatei als Quelle angeben? Ihre Datei hat für mich gut funktioniert.
SLM
Ich sehe keine Ausgabe, daher kann ich nicht sagen, was passiert. Das virtualenvfunktioniert, außer dass ich nichts sehe. Vielleicht ist es ein .zshrcProblem oder virtualenvwrapper? Kann dieses Problem behoben werden? Bitte beachten Sie, ich habe 2 virualenv ausführbare Dateien, die normale virtualenvund virtualenv-2.7ist dies normal oder wurde virtualenvzweimal heruntergeladen? und so habe ich virtualenv und virualenvwrapper installiert, falls es darauf ankommtsudo pip install virtualenv
Lynob
@ Fischer - Ich habe es nur doppelt mit überprüft zshund es funktioniert auch damit, also ist dies höchstwahrscheinlich ein env. Problem. Lassen Sie uns die Setups von 2 virtualenv vorerst ignorieren. Zum Debuggen können Sie es set -xin Ihrer Shell aktivieren und dann den source activateBefehl erneut ausführen . Sie sollten PS1=Linien sehen , in denen die Eingabeaufforderung festgelegt wird.
SLM
3

Wenn Sie verwenden virtualenvwrapperund zshsich in Ihrem ~/.virtualenvs/Verzeichnis eine Reihe von zsh-Hooks befinden , können Sie Ihre Umgebungen anpassen. Hier ein paar Infos dazu. Sie können ein Update erzwingen PS1, das die aktuelle Arbeit virtualenvIhrer Shell-Eingabeaufforderung voranstellt, indem Sie Folgendes hinzufügen:

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

zu ~/.virtualenvs/postactivate. Um das Tag zu entfernen deactivate, fügen Sie Folgendes hinzu:

PS1=$_OLD_VIRTUAL_PS1
builtin export PS1

zu ~/.virtualenvs/postdeactivate

Das einzige (plausible) Problem, das dies verhindern sollte, ist die Beschaffung ~/.zshrcwährend der Arbeit in einemvirtualenv

Tom B
quelle
Ich glaube, dass Sie nach der Deaktivierung des Skripts einen Fehler haben. es sollte lauten PS1 = $ _ OLD_VIRTUAL_PS1 builtin \ export PS1
Greg Hilston
virtualenvwrapper macht dies jetzt bereits standardmäßig. In venv, das von virtualenvwrapper erstellt wurde, enthält das Skript bin / activate Code, um den Namen venv vor die Eingabeaufforderungen zsh und bash zu setzen!
Erik Westrup
2

Sie müssen Ihre nicht bearbeiten ~/.zshrc.

Da Sie mit arbeiten, ist virtualenvwrapperes möglich, Optionen oder Hooks zu $WORKON_HOME/post(de)activateDateien hinzuzufügen .

Wenn Sie mehr Details sehen möchten, konsultieren Sie hier .

Über den obigen Link kann ich als Nächstes Folgendes tun:

In meinem Fall, $WORKON_HOME=~/Envsweil ich diesen Pfad bei der Installation von virtualenvwrapper geändert habe. Wenn Sie nicht haben, sollten Sie den Ordner haben ~/.virtualenvs.

  1. Öffnen Sie die Datei postactivatein$WORKON_HOME

  2. Fügen Sie diese Zeilen hinzu:

    PS1="$_OLD_VIRTUAL_PS1"
    _OLD_RPROMPT="$RPROMPT"
    RPROMPT="%{${fg_bold[white]}%}(env: %{${fg[green]}%}`basename \"$VIRTUAL_ENV\"`%{${fg_bold[white]}%})%{${reset_color}%} $RPROMPT"
  3. Speichern und genießen!

    Sie erhalten so etwas: getan

  4. (OPTIONAL) Wenn Sie möchten, können Sie die postdeactivateDatei bearbeiten , um diese Zeile hinzuzufügen:

    RPROMPT="$_OLD_RPROMPT"
Ihre Jaggy Castaño
quelle
0

Ich habe es gerade auf Ubuntu 14.04 getestet und ich hatte das gleiche Problem. Um dies zu beheben, fügen Sie dies Ihrem .zshrc hinzu

source /usr/share/virtualenvwrapper/virtualenvwrapper.sh

oder führen Sie dies im Terminal

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

In Mac OS XI musste das gehen

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

Wenn Sie das verwendete Thema kennen, können Sie eine Funktion zum Abrufen des aktivierten VIRTUAL_ENV-Basisnamens hinzufügen und in der PROMPT- Variablen in der * .zsh-Themendatei unter ~ / .oh-my-zsh / themes / verwenden. und das sollte den Trick machen!

Für mich war es das voreingestellte 'oh-my-zsh'-Thema, dh ' robbyrussels ', das konfiguriert wurde.

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

Das Hinzufügen des obigen Codes erzeugte das folgende Ergebnis:

Bildbeschreibung hier eingeben

(kunkka.com) ist das virtualenv, das ich gerade deaktiviert habe.

Vergessen Sie nach dem Bearbeiten der Designdatei nicht, die .zshrc-Datei als Quelle zu verwenden.

-> source ~/.zshrc
darkdefender27
quelle