2009-06-09 29 views

Trả lời

19

django-users post có thể sẽ giúp ích cho bạn rất nhiều. Nó gợi ý sử dụng virtualenvwrapper để bọc virtualenv, sử dụng lệnh add2virtualenv. Sử dụng điều này, khi môi trường hoạt động, bạn chỉ có thể gọi:

add2virtualenv directory1 directory2 ... 

để thêm thư mục vào đường dẫn của bạn cho môi trường hiện tại.

Nó xử lý tự động các thay đổi PATH trên các công tắc môi trường. Không cần ma thuật đen. Et thì đấy!

+0

Tôi đang cố gắng thực hiện việc này ngay bây giờ và có thể tôi sẽ chấp nhận nó sau một vài ngày nếu vẫn không có bất kỳ giải pháp nào khác không phụ thuộc vào các gói bổ sung. – saffsd

+4

Cần lưu ý rằng bạn có thể tự động hóa điều này bằng cách chỉnh sửa tập lệnh 'postactivate' trong thư mục dự án virtualenvwrapper của bạn. Theo mặc định, nó được tìm thấy trong '~/.virtualenvs/myproject/bin/postactivate' trong đó" myproject "là tên của env ảo của bạn. –

2

Đây là phiên bản bị tấn công của bin/activate để tham khảo. Nó đặt PYTHONPATH một cách chính xác, nhưng unsetting không hoạt động.


# This file must be used with "source bin/activate" *from bash* 
# you cannot run it directly 

deactivate() { 
    if [ -n "$_OLD_VIRTUAL_PATH" ] ; then 
     PATH="$_OLD_VIRTUAL_PATH" 
     export PATH 
     unset _OLD_VIRTUAL_PATH 
    fi 

    # This should detect bash and zsh, which have a hash command that must 
    # be called to get it to forget past commands. Without forgetting 
    # past commands the $PATH changes we made may not be respected 
    if [ -n "$BASH" -o -n "$ZSH_VERSION" ] ; then 
     hash -r 
    fi 

    if [ -n "$_OLD_VIRTUAL_PS1" ] ; then 
     PS1="$_OLD_VIRTUAL_PS1" 
     export PS1 
     unset _OLD_VIRTUAL_PS1 
    fi 

    if [ -n "$_OLD_PYTHONPATH" ] ; then 
     PYTHONPATH="$_OLD_PYTHONPATH" 
     export PYTHONPATH 
     unset _OLD_PYTHONPATH 
    fi 

    unset VIRTUAL_ENV 
    if [ ! "$1" = "nondestructive" ] ; then 
    # Self destruct! 
     unset deactivate 
    fi 
} 

# unset irrelavent variables 
deactivate nondestructive 
VIRTUAL_ENV="env_location" # Anonymized 
export VIRTUAL_ENV 

_OLD_VIRTUAL_PATH="$PATH" 
PATH="$VIRTUAL_ENV/bin:$PATH" 
export PATH 

_OLD_VIRTUAL_PS1="$PS1" 
if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then 
    # special case for Aspen magic directories 
    # see http://www.zetadev.com/software/aspen/ 
    PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1" 
else 
    PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1" 
fi 
export PS1 

# This should detect bash and zsh, which have a hash command that must 
# be called to get it to forget past commands. Without forgetting 
# past commands the $PATH changes we made may not be respected 
if [ -n "$BASH" -o -n "$ZSH_VERSION" ] ; then 
    hash -r 
fi 

_OLD_PYTHONPATH="$PYTHONPATH" 
PYTHONPATH="new_pythonpath" #Anonymized 
export PYTHONPATH 
Các vấn đề liên quan