Bagaimana cara menampilkan nama Virtualenv saat ini?

19

Saya menggunakan virtualenv, virtualenvwrapper, zsh, oh-my-zsh, terminator, di Crunchbang.

Saya mencoba untuk menampilkan nama arus virtualenvseperti ini

workon example
(example)... 

Saya sudah mencoba banyak solusi yang sepertinya tidak berhasil, ini file .zshrc saya , saya tahu ini bukan masalah besar untuk memperbaikinya tetapi saya tidak dapat menemukan solusi yang tepat. Sudah lama sejak terakhir kali saya menggunakan Linux untuk pengembangan Django, saya lupa apa yang dulu saya lakukan.

Saat ini, saya mengerti username@crunchbang, saya tidak tahu mana virtualenv yang saya gunakan.

Lynob
sumber
Saya percaya Anda bertanya bagaimana mengatur prompt Anda sehingga itu menunjukkan virtualenv mana Anda berada, benar?
slm
@slm ya persis
Lynob

Jawaban:

10

Prompt Shell

Di dalam virtualenvlingkungan Anda ada file bin/activate,. Anda dapat mengedit file ini untuk mengubah prompt Anda menjadi apa pun yang Anda inginkan. Khususnya bagian file ini:

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

Variabel PS1adalah variabel khusus yang mengontrol tampilan prompt shell. Mengubah nilainya akan mengubah virtualenvpermintaan Anda :

PS1="(this is my prompt) "

Contoh

  1. Buat lingkungan sampel.

    $ virtualenv tst-env
  2. Saat Anda menggunakan, virtualenvAnda biasanya mencari file ini.

    $ cd $HOME/tst-env
    
    $ source bin/activate
    (tst-env)[saml@grinchy tst-env]$ 
  3. Setelah membuat perubahan di atas ke variabel PS1dalam bin/activatefile prompt saya sekarang ini:

    $ source bin/activate
    (tst-env)

Berikut adalah petunjuk resmi tentang cara melakukan ini .

slm
sumber
mencobanya sekarang, tidak memperbaikinya
Lynob
inilah file saya yang aktifkan pastebin.com/tZqdr1Yz
Lynob
Apa yang terjadi ketika Anda sumber activatefile? File Anda berfungsi dengan baik untuk saya.
slm
saya tidak melihat output, jadi saya tidak tahu apa yang terjadi, virtualenvitu berfungsi selain saya tidak melihat apa-apa, mungkin itu .zshrcmasalah atau virtualenvwrapper? dapatkah masalah ini di-debug? harap dicatat saya memiliki 2 file yang dapat dieksekusi virualenv, normal virtualenvdan virtualenv-2.7apakah ini normal atau virtualenvsudah diunduh dua kali? dan ini adalah bagaimana saya menginstal virtualenv dan virualenvwrapper jika itu pentingsudo pip install virtualenv
Lynob
@ Fischer - Saya baru saja memeriksanya menggunakan zshdan bekerja dengan itu juga, jadi ini kemungkinan besar adalah env. isu. Mari kita mengabaikan pengaturan 2 virtualenv untuk saat ini. Untuk men-debug Anda dapat mengaktifkannya set -x,, di shell Anda dan kemudian jalankan kembali source activateperintah itu. Anda akan melihat PS1=garis di mana prompt diatur.
slm
3

Jika Anda menggunakan virtualenvwrapperdan zshada sejumlah kait zsh di ~/.virtualenvs/direktori Anda yang dapat Anda gunakan untuk menyesuaikan lingkungan Anda. Berikut adalah sedikit info tentang ini. Anda dapat memaksa pembaruan untuk PS1yang akan menambah saat ini bekerja virtualenvke prompt shell Anda dengan menambahkan:

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

untuk ~/.virtualenvs/postactivate. Untuk menghapus tag saat Anda deactivate, tambahkan:

PS1=$_OLD_VIRTUAL_PS1
builtin export PS1

untuk ~/.virtualenvs/postdeactivate

Satu-satunya (masuk akal) hal yang harus istirahat ini adalah sumber daya ~/.zshrcsaat bekerja di sebuahvirtualenv

Tom B
sumber
Saya yakin Anda memiliki kesalahan postdeactivate. itu harus membaca PS1 = $ _ OLD_VIRTUAL_PS1 builtin \ export PS1
Greg Hilston
virtualenvwrapper sudah melakukan ini secara default sekarang. Dalam venv yang dibuat oleh virtualenvwrapper, skrip bin / aktifkan berisi kode untuk melakukan pre-pend pada nama venv untuk meminta zsh dan bash!
Erik Westrup
2

Anda tidak perlu mengedit ~/.zshrc.

Karena Anda bekerja dengan virtualenvwrapperitu dimungkinkan untuk menambahkan opsi atau kait ke $WORKON_HOME/post(de)activatefile.

Jika Anda ingin melihat detail lebih lanjut, konsultasikan di sini .

Tautan di atas memungkinkan saya untuk melakukan selanjutnya:

Dalam kasus saya $WORKON_HOME=~/Envskarena saya memodifikasi jalur ini ketika saya menginstal virtualenvwrapper; jika tidak, Anda harus memiliki folder ~/.virtualenvs.

  1. Buka file yang postactivateterletak di$WORKON_HOME

  2. Tambahkan baris ini:

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

    Anda akan mendapatkan sesuatu seperti ini: selesai

  4. (OPTIONAL) Jika mau, Anda dapat mengedit postdeactivatefile untuk menambahkan baris ini:

    RPROMPT="$_OLD_RPROMPT"
Yor Jaggy Castaño
sumber
Ini sepertinya disalin dari dokumentasi resmi
Tom Hale
0

Saya hanya mengujinya di ubuntu 14.04 dan saya memiliki masalah yang sama. Untuk memperbaikinya tambahkan ini ke .zshrc Anda

source /usr/share/virtualenvwrapper/virtualenvwrapper.sh

atau jalankan ini di terminal

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

Di Mac OS XI harus dilakukan

echo source /usr/local/bin/virtualenvwrapper.sh >> ~/.zshrc
Kode Kleber
sumber
0

Jika Anda tahu tema yang sedang digunakan, Anda dapat menambahkan fungsi untuk mengambil nama dasar VIRTUAL_ENV yang diaktifkan dan menggunakannya dalam variabel PROMPT di file * .zsh-theme yang terletak di ~ / .oh-my-zsh / themes / dan itu harus melakukan trik!

Bagi saya itu adalah tema default 'oh-my-zsh' yaitu 'robbyrussels' yang telah dikonfigurasi.

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

Menambahkan kode di atas menghasilkan hasil di bawah ini:

masukkan deskripsi gambar di sini

(kunkka.com) adalah virtualenv yang baru saja saya nonaktifkan.

Setelah mengedit file tema, jangan lupa untuk mencari file .zshrc.

-> source ~/.zshrc
darkdefender27
sumber