2009-06-09 18 views
13

मैं अपने सामान्य से एक विशेष वर्चुअलनेव में एक अलग पायथन पाथ चाहता हूं। मैं इसे स्वचालित रूप से कैसे सेट करूं? मुझे एहसास है कि bin/activate फ़ाइल हैक करना संभव है, क्या कोई बेहतर/अधिक मानक तरीका है?वर्चुअलएन्व को सक्रिय/निष्क्रिय करने पर मैं अपने PYTHONPATH को स्वचालित रूप से बदल सकता हूं?

उत्तर

19

यह django-users post शायद आपकी मदद करने जा रहा है। यह add2virtualenv कमांड का उपयोग करने के लिए वर्चुअलएन्व को लपेटने के लिए virtualenvwrapper का उपयोग करने का सुझाव देता है। इस का उपयोग करना, जब वातावरण में सक्रिय है, तो आप सिर्फ कॉल कर सकते हैं:

add2virtualenv directory1 directory2 ... 

वर्तमान वातावरण के लिए अपने PYTHONPATH लिए निर्देशिका जोड़ने के लिए।

यह पर्यावरण स्विच पर स्वाभाविक रूप से पैथ परिवर्तनों को संभालता है। कोई काला जादू की आवश्यकता नहीं है। और voila!

+0

मैं इसे अभी आज़मा रहा हूं, और शायद मैं इसे कुछ दिनों में स्वीकार करूंगा यदि अभी भी कोई अन्य समाधान नहीं है जो अतिरिक्त पैकेजों पर निर्भर नहीं है। – saffsd

+4

यह ध्यान देने योग्य है कि आप अपने वर्चुअलएन्वापर परियोजना फ़ोल्डर में 'पोस्टएक्टिवेट' स्क्रिप्ट को संपादित करके इसे स्वचालित कर सकते हैं। डिफ़ॉल्ट रूप से यह '~/.virtualenvs/myproject/bin/postactivate' में पाया जाता है जहां" myproject "आपके आभासी env का नाम है। –

2

संदर्भ के लिए bin/activate का हैक किया गया संस्करण यहां है। यह PYTHONPATH सही ढंग से सेट करता है, लेकिन परेशान नहीं करता है।


# 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 
संबंधित मुद्दे

 संबंधित मुद्दे