Làm cách nào để hiển thị tên của Virtualenv hiện tại?


19

Tôi đang sử dụng virtualenv, virtualenvwrapper, zsh, oh-my-zsh, terminator, trên Crunchbang.

Tôi đang cố gắng hiển thị tên của hiện tại virtualenvnhư vậy

workon example
(example)... 

Tôi đã thử nhiều giải pháp dường như không hoạt động, đây là tệp .zshrc của tôi , tôi biết sẽ không có vấn đề gì lớn để khắc phục nhưng tôi không thể tìm ra giải pháp phù hợp. Đã lâu rồi kể từ lần cuối tôi sử dụng Linux để phát triển Django, tôi đã quên những gì tôi từng làm.

Ngay bây giờ, tôi thấy username@crunchbang, tôi không thể biết tôi đang sử dụng virtualenv nào.


Tôi tin rằng bạn đang hỏi làm thế nào để thiết lập lời nhắc của mình để nó hiển thị virtualenv bạn đang ở, đúng không?
slm

@slm có chính xác
Lynob

Câu trả lời:


10

Lời nhắc của Shell

Trong virtualenvmôi trường của bạn là một tập tin bin/activate,. Bạn có thể chỉnh sửa tệp này để thay đổi lời nhắc của bạn thành bất cứ điều gì bạn muốn nó trông như thế nào. Cụ thể phần này của tập tin:

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

Biến PS1là một biến đặc biệt kiểm soát dấu nhắc của shell sẽ như thế nào. Thay đổi giá trị của nó sẽ thay đổi virtualenvlời nhắc của bạn :

PS1="(this is my prompt) "

Thí dụ

  1. Tạo một môi trường mẫu.

    $ virtualenv tst-env
  2. Khi bạn đang sử dụng, virtualenvbạn thường lấy nguồn này.

    $ cd $HOME/tst-env
    
    $ source bin/activate
    (tst-env)[saml@grinchy tst-env]$ 
  3. Sau khi thực hiện thay đổi ở trên thành biến PS1trong bin/activatetệp, dấu nhắc của tôi bây giờ là:

    $ source bin/activate
    (tst-env)

Dưới đây là hướng dẫn chính thức về cách làm điều này .


đã thử ngay bây giờ, không sửa nó
Lynob

đây là tập tin kích hoạt của tôi pastebin.com/tZqdr1Yz
Lynob

Điều gì xảy ra khi bạn nguồn activatetập tin? Tập tin của bạn làm việc tốt cho tôi.
slm

Tôi thấy không có đầu ra, vì vậy tôi không thể biết điều gì xảy ra, virtualenvnó đang hoạt động ngoài việc tôi không thấy gì, có thể đó là .zshrcvấn đề hay virtualenvwrappersao? vấn đề này có thể được gỡ lỗi? xin lưu ý tôi có 2 tập tin thực thi virualenv, bình thường virtualenvvirtualenv-2.7điều này là bình thường hay đã virtualenvđược tải xuống hai lần? và đây là cách tôi cài đặt virtualenv và virualenvwrapper trong trường hợp có vấn đềsudo pip install virtualenv
Lynob

@Fischer - Tôi chỉ kiểm tra nó bằng cách sử dụng zshvà nó cũng hoạt động với nó, vì vậy đây rất có thể là một env. vấn đề. Chúng ta hãy bỏ qua các thiết lập của 2 virtualenv trong thời điểm hiện tại. Để gỡ lỗi, bạn có thể kích hoạt nó, set -xtrong shell của bạn và sau đó chạy lại source activatelệnh một lần nữa. Bạn sẽ thấy PS1=các dòng nơi lời nhắc đang được thiết lập.
slm

3

Nếu bạn đang sử dụng virtualenvwrapperzshcó một số hook zsh trong ~/.virtualenvs/thư mục của bạn mà bạn có thể sử dụng để tùy chỉnh môi trường của mình. Đây là một chút thông tin liên quan đến những điều này. Bạn có thể buộc một bản cập nhật sẽ cập nhật PS1công việc hiện tại virtualenvvào dấu nhắc shell của bạn bằng cách thêm:

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

để ~/.virtualenvs/postactivate. Để xóa thẻ khi bạn deactivate, hãy thêm:

PS1=$_OLD_VIRTUAL_PS1
builtin export PS1

đến ~/.virtualenvs/postdeactivate

Điều duy nhất (hợp lý) cần phá vỡ điều này là cung cấp nguồn lực ~/.zshrctrong khi làm việc trongvirtualenv


Tôi tin rằng bạn đã hủy kích hoạt tập lệnh có lỗi. cần đọc PS1 = $ _ OLD_VIRTUAL_PS1 dựng sẵn \ export PS1
Greg Hilston

virtualenvwrapper đã làm điều này theo mặc định bây giờ. Trong venv được tạo bởi virtualenvwrapper, tập lệnh bin / activ chứa mã để đặt trước tên venv cho cả hai dấu nhắc zsh và bash!
Erik Westrup

2

Bạn không cần phải chỉnh sửa ~/.zshrc.

Vì bạn đang làm việc với virtualenvwrappernó nên có thể thêm tùy chọn hoặc móc vào $WORKON_HOME/post(de)activatetệp.

Nếu bạn muốn xem chi tiết tham khảo tại đây .

Liên kết trên cho phép tôi làm tiếp theo:

Trong trường hợp của tôi $WORKON_HOME=~/Envsvì tôi đã sửa đổi đường dẫn này khi tôi cài đặt virtualenvwrapper; Nếu bạn không có bạn nên có thư mục ~/.virtualenvs.

  1. Mở tệp postactivatenằm ở$WORKON_HOME

  2. Thêm các dòng sau:

    PS1="$_OLD_VIRTUAL_PS1"
    _OLD_RPROMPT="$RPROMPT"
    RPROMPT="%{${fg_bold[white]}%}(env: %{${fg[green]}%}`basename \"$VIRTUAL_ENV\"`%{${fg_bold[white]}%})%{${reset_color}%} $RPROMPT"
  3. Lưu và thưởng thức!

    Bạn sẽ có được một cái gì đó như thế này: làm xong

  4. (TÙY CHỌN) Nếu bạn muốn, bạn có thể chỉnh sửa postdeactivatetệp để thêm dòng này:

    RPROMPT="$_OLD_RPROMPT"

Điều này dường như được sao chép từ tài liệu chính thức
Tom Hale

0

Tôi chỉ kiểm tra nó trên Ubuntu 14.04 và tôi cũng gặp vấn đề tương tự. Để sửa lỗi, hãy thêm nó vào .zshrc của bạn

source /usr/share/virtualenvwrapper/virtualenvwrapper.sh

hoặc chạy cái này trong terminal

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

Trong Mac OS XI phải làm

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

0

Nếu bạn biết chủ đề đang được sử dụng, bạn có thể thêm một hàm để truy xuất tên cơ sở VIRTUAL_ENV đã kích hoạt và sử dụng nó trong biến PROMPT trong tệp chủ đề * .zsh nằm ở ~ / .oh-my-zsh / Themes / và điều đó nên làm các mẹo!

Đối với tôi, đó là chủ đề 'oh-my-zsh' mặc định, tức là 'robbyrussels' đã được định cấu hình.

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

Thêm mã trên tạo ra kết quả dưới đây:

nhập mô tả hình ảnh ở đây

(kunkka.com) là virtualenv mà tôi vừa tắt.

Sau khi chỉnh sửa tệp chủ đề, đừng quên nguồn tệp .zshrc.

-> source ~/.zshrc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.