วิธีการแสดงชื่อของ Virtualenv ปัจจุบัน?


20

ฉันใช้virtualenv, virtualenvwrapper, zsh, oh-my-zsh, เทอร์มิบน Crunchbang

ฉันพยายามแสดงชื่อของกระแสvirtualenvเช่นนั้น

workon example
(example)... 

ฉันลองใช้วิธีแก้ปัญหาหลายอย่างแล้วดูเหมือนว่าจะไม่ทำงานนี่คือไฟล์. zshrc ของฉันฉันรู้ว่ามันไม่ใช่เรื่องใหญ่ที่จะแก้ไข แต่ฉันไม่สามารถหาโซลูชันที่เหมาะสมได้ เป็นเวลานานแล้วนับตั้งแต่ครั้งสุดท้ายที่ฉันใช้ Linux สำหรับการพัฒนา Django ฉันลืมสิ่งที่ฉันเคยทำ

ตอนนี้ฉันเห็นusername@crunchbangแล้วฉันไม่สามารถบอกได้ว่า virtualenv ที่ฉันใช้อยู่


ฉันเชื่อว่าคุณกำลังถามวิธีตั้งค่าพรอมต์ของคุณเพื่อให้มันแสดงว่าคุณอยู่ใน virtualenv ใดถูกต้องไหม?
slm

@slm ใช่แน่นอน
Lynob

คำตอบ:


11

พรอมต์ของเชลล์

ภายในvirtualenvสภาพแวดล้อมของคุณคือไฟล์bin/activate. คุณสามารถแก้ไขไฟล์นี้เพื่อเปลี่ยนพรอมต์ของคุณเป็นแบบที่คุณต้องการ เฉพาะส่วนนี้ของไฟล์:

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

ตัวแปรPS1เป็นตัวแปรพิเศษที่ควบคุมลักษณะของพรอมต์ของเชลล์ การเปลี่ยนค่าจะเปลี่ยนvirtualenvพรอมต์ของคุณ:

PS1="(this is my prompt) "

ตัวอย่าง

  1. สร้างสภาพแวดล้อมตัวอย่าง

    $ virtualenv tst-env
  2. เมื่อคุณใช้งานโดยvirtualenvทั่วไปคุณต้องระบุแหล่งที่มาของไฟล์นี้

    $ cd $HOME/tst-env
    
    $ source bin/activate
    (tst-env)[saml@grinchy tst-env]$ 
  3. หลังจากทำการเปลี่ยนแปลงข้างต้นเป็นตัวแปรPS1ในbin/activateไฟล์พรอมต์ของฉันตอนนี้:

    $ source bin/activate
    (tst-env)

ต่อไปนี้เป็นคำแนะนำอย่างเป็นทางการเกี่ยวกับวิธีการทำเช่นนี้


ลองแล้วไม่สามารถแก้ไขได้
Lynob

นี่คือไฟล์การเปิดใช้งานของฉันpastebin.com/tZqdr1Yz
Lynob

จะเกิดอะไรขึ้นเมื่อคุณส่งactivateไฟล์มา ไฟล์ของคุณทำงานได้ดีสำหรับฉัน
slm

ฉันเห็นการส่งออกไม่ได้ดังนั้นฉันไม่สามารถบอกสิ่งที่เกิดขึ้นvirtualenvคือการทำงานอื่น ๆ กว่าที่ฉันเห็นอะไรบางทีมันอาจจะเป็น.zshrcปัญหาหรือvirtualenvwrapper? สามารถแก้ปัญหานี้ได้หรือไม่ โปรดทราบว่าฉันมี 2 ไฟล์ที่รันได้ virualenv เป็นปกติvirtualenvและvirtualenv-2.7เป็นปกติหรือvirtualenvดาวน์โหลดสองครั้งหรือไม่ และนี่คือวิธี i ติดตั้ง virtualenv และ virualenvwrapper ในกรณีที่มันเป็นเรื่องสำคัญsudo pip install virtualenv
Lynob

@ ฟิชเชอร์ - ฉันเพิ่งตรวจสอบโดยใช้สองครั้งและมันก็ใช้zshงานได้เช่นกันดังนั้นนี่น่าจะเป็น env ปัญหา. ลองเพิกเฉยต่อการตั้งค่าของ virtualenv ทั้งสองในขณะนี้ ในการดีบักคุณสามารถเปิดใช้งานได้set -xในเชลล์แล้วเรียกใช้source activateคำสั่งอีกครั้ง คุณควรเห็นPS1=บรรทัดที่มีการตั้งค่าพรอมต์
slm

3

หากคุณกำลังใช้งานvirtualenvwrapperและzshมี zsh hooks จำนวนมากใน~/.virtualenvs/ไดเรกทอรีของคุณที่คุณสามารถใช้เพื่อกำหนดสภาพแวดล้อมของคุณเอง นี่คือข้อมูลบางส่วนเกี่ยวกับสิ่งเหล่านี้ คุณสามารถบังคับให้มีการอัปเดตPS1ที่จะเพิ่มการทำงานปัจจุบันvirtualenvให้กับเชลล์พรอมต์ของคุณโดยการเพิ่ม:

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

~/.virtualenvs/postactivateไปยัง หากต้องการลบแท็กเมื่อคุณdeactivateเพิ่ม:

PS1=$_OLD_VIRTUAL_PS1
builtin export PS1

ถึง ~/.virtualenvs/postdeactivate

สิ่งเดียวที่เป็นไปได้ (ที่เป็นไปได้) ที่ควรทำลายสิ่งนี้คือการจัดหาทรัพยากรใหม่~/.zshrcในขณะที่ทำงานในvirtualenv


ฉันเชื่อว่าคุณโพสต์ปิดใช้งานสคริปต์มีข้อผิดพลาด มันควรอ่าน PS1 = $ _ OLD_VIRTUAL_PS1 ในตัว \ ส่งออก PS1
Greg Hilston

virtualenvwrapper ทำสิ่งนี้ตามค่าเริ่มต้นแล้ว ใน venv ที่สร้างขึ้นโดย virtualenvwrapper สคริปต์ bin / เปิดใช้งานจะมีรหัสเพื่อ pre-pend ชื่อ venv ไปที่พร้อมท์ทั้ง zsh และ bash!
Erik Westrup

2

~/.zshrcคุณไม่จำเป็นต้องแก้ไข

เนื่องจากคุณกำลังทำงานกับvirtualenvwrapperมันเป็นไปได้ที่จะเพิ่มตัวเลือกหรือขอไปยัง$WORKON_HOME/post(de)activateไฟล์

หากคุณต้องการดูรายละเอียดเพิ่มเติมปรึกษาที่นี่

ลิงก์ด้านบนอนุญาตให้ฉันทำสิ่งต่อไปนี้:

ในกรณีของฉัน$WORKON_HOME=~/Envsเพราะฉันปรับเปลี่ยนเส้นทางนี้เมื่อฉันติดตั้ง virtualenvwrapper ~/.virtualenvsถ้าคุณไม่ได้คุณควรจะมีโฟลเดอร์

  1. เปิดไฟล์ที่postactivateอยู่ใน$WORKON_HOME

  2. เพิ่มบรรทัดเหล่านี้:

    PS1="$_OLD_VIRTUAL_PS1"
    _OLD_RPROMPT="$RPROMPT"
    RPROMPT="%{${fg_bold[white]}%}(env: %{${fg[green]}%}`basename \"$VIRTUAL_ENV\"`%{${fg_bold[white]}%})%{${reset_color}%} $RPROMPT"
  3. บันทึกและสนุก!

    คุณจะได้รับสิ่งนี้: เสร็จแล้ว

  4. (ตัวเลือก) ถ้าคุณต้องการคุณสามารถแก้ไขpostdeactivateไฟล์เพื่อเพิ่มบรรทัดนี้:

    RPROMPT="$_OLD_RPROMPT"

สิ่งนี้ดูเหมือนว่าจะถูกคัดลอกจากเอกสารอย่างเป็นทางการ
Tom Hale

0

ฉันเพิ่งทดสอบบน Ubuntu 14.04 และฉันมีปัญหาเดียวกัน หากต้องการแก้ไขให้เพิ่มส่วนนี้ใน. zshrc ของคุณ

source /usr/share/virtualenvwrapper/virtualenvwrapper.sh

หรือรันสิ่งนี้ในเทอร์มินัล

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

ใน Mac OS XI ต้องทำ

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

0

หากคุณรู้ว่าธีมที่ใช้อยู่คุณสามารถเพิ่มฟังก์ชั่นเพื่อดึงชื่อฐาน VIRTUAL_ENV ที่เปิดใช้งานและใช้ในตัวแปรPROMPTในไฟล์* .zsh-themeซึ่งอยู่ที่ ~ / .oh-my-zsh / themes / และนั่นควรทำเคล็ดลับ!

สำหรับฉันมันเป็นธีมเริ่มต้น 'oh-my-zsh' เช่น'robbyrussels'ซึ่งได้รับการกำหนดค่า

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

การเพิ่มโค้ดด้านบนสร้างผลลัพธ์ด้านล่าง:

ป้อนคำอธิบายรูปภาพที่นี่

(kunkka.com)เป็น virtualenv ที่ฉันเพิ่งปิดการใช้งาน

หลังจากแก้ไขไฟล์ธีมอย่าลืมระบุไฟล์. zshrc

-> source ~/.zshrc
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.