Jak wyświetlić nazwę bieżącego Virtualenv?


20

Używam virtualenv, virtualenvwrapper, zsh, oh-my-zsh, terminator, na CrunchBang.

Próbuję wyświetlić nazwę prądu w ten virtualenvsposób

workon example
(example)... 

Wypróbowałem wiele rozwiązań, które wydają się nie działać, oto mój plik .zshrc. Wiem, że nie ma problemu, aby to naprawić, ale nie mogę znaleźć odpowiedniego rozwiązania. Minęło dużo czasu, odkąd ostatni raz używałem Linuksa do programowania Django, zapomniałem, co robiłem.

W tej chwili nie widzę username@crunchbang, którego wirtualnego używam.


Myślę, że pytasz, jak ustawić monit tak, aby pokazywał, w której wirtualnej jesteś, prawda?
slm

@slm tak dokładnie
Lynob

Odpowiedzi:


11

Podpowiedź Shell

Wewnątrz virtualenvśrodowiska jest plikiem, bin/activate. Możesz edytować ten plik, aby zmienić monit na cokolwiek chcesz. W szczególności ta sekcja pliku:

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

Zmienna PS1jest specjalną zmienną, która kontroluje wygląd zachęty powłoki. Zmiana jego wartości zmieni virtualenvmonit:

PS1="(this is my prompt) "

Przykład

  1. Utwórz przykładowe środowisko.

    $ virtualenv tst-env
  2. Kiedy używasz virtualenv, zwykle źródło tego pliku.

    $ cd $HOME/tst-env
    
    $ source bin/activate
    (tst-env)[saml@grinchy tst-env]$ 
  3. Po wprowadzeniu powyższej zmiany do zmiennej PS1w bin/activatepliku mój monit jest teraz następujący:

    $ source bin/activate
    (tst-env)

Oto oficjalne instrukcje, jak to zrobić .


próbowałem teraz, nie naprawiłem
Lynob

oto mój plik aktywacyjny pastebin.com/tZqdr1Yz
Lynob

Co dzieje się, gdy źródło activatepliku? Twój plik działał dla mnie dobrze.
slm

nie widzę danych wyjściowych, więc nie mogę powiedzieć, co się dzieje, virtualenvdziała inaczej niż nic nie widzę, może to .zshrcproblem lub virtualenvwrapper? czy można rozwiązać ten problem? Uwaga: mam 2 pliki wykonywalne virualenv, normalne virtualenvi czy virtualenv-2.7jest to normalne, czy pobrałem virtualenvdwa razy? i tak zainstalowałem virtualenv i virualenvwrapper na wypadek, gdyby miało to znaczeniesudo pip install virtualenv
Lynob 17.08.13

@Fischer - po prostu dwukrotnie sprawdziłem to za pomocą zshi to też działa, więc najprawdopodobniej jest to env. kwestia. Na razie zignorujmy konfiguracje 2 virtualenv. Aby debugować, możesz włączyć go set -xw swojej powłoce, a następnie ponownie uruchomić source activatepolecenie ponownie. Powinieneś zobaczyć PS1=linie, w których ustawia się monit.
slm

3

Jeśli używasz, virtualenvwrappera zshw ~/.virtualenvs/katalogu znajduje się kilka haków zsh , których możesz użyć do dostosowania środowiska. Oto trochę informacji na ich temat. Możesz wymusić aktualizację PS1, która zastąpi bieżącą pracę virtualenvw wierszu polecenia powłoki, dodając:

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

do ~/.virtualenvs/postactivate. Aby usunąć tag podczas deactivatedodawania:

PS1=$_OLD_VIRTUAL_PS1
builtin export PS1

do ~/.virtualenvs/postdeactivate

Jedyną (prawdopodobną) rzeczą, która powinna to zepsuć, jest pozyskiwanie zasobów ~/.zshrcpodczas pracy wvirtualenv


Uważam, że po dezaktywacji skrypt ma błąd. powinien odczytać PS1 = $ _ OLD_VIRTUAL_PS1 wbudowany \ eksport PS1
Greg Hilston

virtualenvwrapper już teraz robi to domyślnie. W venv utworzonym przez virtualenvwrapper, skrypt bin / aktywuj zawiera kod, który wstępnie podaje nazwę venv do monitu Zsh i Bash!
Erik Westrup,

2

Nie musisz edytować swojego ~/.zshrc.

Ponieważ pracujesz z, możesz virtualenvwrapperdodać opcje lub zaczepy do $WORKON_HOME/post(de)activateplików.

Jeśli chcesz zobaczyć więcej szczegółów, skonsultuj się tutaj .

Powyższy link pozwala mi zrobić dalej:

W moim przypadku, $WORKON_HOME=~/Envsponieważ zmodyfikowałem tę ścieżkę podczas instalacji virtualenvwrapper; jeśli nie, powinieneś mieć folder ~/.virtualenvs.

  1. Otwórz plik postactivateznajdujący się w$WORKON_HOME

  2. Dodaj te linie:

    PS1="$_OLD_VIRTUAL_PS1"
    _OLD_RPROMPT="$RPROMPT"
    RPROMPT="%{${fg_bold[white]}%}(env: %{${fg[green]}%}`basename \"$VIRTUAL_ENV\"`%{${fg_bold[white]}%})%{${reset_color}%} $RPROMPT"
  3. Oszczędzaj i ciesz się!

    Otrzymasz coś takiego: gotowy

  4. (OPCJONALNIE) Jeśli chcesz, możesz edytować postdeactivateplik, aby dodać ten wiersz:

    RPROMPT="$_OLD_RPROMPT"

Wydaje się, że zostało to skopiowane z oficjalnej dokumentacji
Tom Hale

0

Właśnie testowałem to na Ubuntu 14.04 i miałem ten sam problem. Aby to naprawić, dodaj to do .zshrc

source /usr/share/virtualenvwrapper/virtualenvwrapper.sh

lub uruchom to w terminalu

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

W Mac OS XI musiałem to zrobić

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

0

Jeśli znasz używany motyw, możesz dodać funkcję, aby pobrać aktywowaną nazwę podstawową VIRTUAL_ENV i użyć jej w zmiennej PROMPT w pliku * .zsh-theme znajdującym się w ~ / .oh-my-zsh / themes / i to powinno wystarczyć!

Dla mnie był to domyślny motyw „oh-my-zsh”, tj. „Robbyrussels”, który został skonfigurowany.

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

Dodanie powyższego kodu wygenerowało następujący wynik:

wprowadź opis zdjęcia tutaj

(kunkka.com) to virtualenv, który właśnie dezaktywowałem.

Po edycji pliku motywu nie zapomnij o źródłowym pliku .zshrc.

-> source ~/.zshrc
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.