2012-10-28 37 views
5

मैं अजगर 2.7 में game लिख रहा हूं, और अपने गेम के विकास पर्यावरण के "बूटस्ट्रैप" को स्क्रिप्ट करना चाहता हूं, और फिर shovel का आह्वान करना चाहता हूं। यदि वर्चुअलएन्वापर का पता नहीं चला है, तो मैं virtualenv bootstrap solution का उपयोग करूंगा। हालांकि अगर वर्चुअलएन्वापर पता चला है, तो मैं इसके बजाय इसका उपयोग करना चाहूंगा।स्क्रिप्टिंग वर्चुअलenvwrapper mkvirtualenv

समस्या यह है कि वर्चुअलएन्वापर इनलाइन शैल फ़ंक्शंस को मेरी बूटस्ट्रैप स्क्रिप्ट द्वारा विरासत में नहीं मिला है। जहां तक ​​मुझे पता है, वह "mkvirtualenv NotOrion" जैसे कुछ चलने का नियम है। के बाद से वातावरण चर "VIRTUALENVWRAPPER_VIRTUALENV" सेट (मेरे मामले में, macports से: /opt/local/bin/virtualenv-2.7) है:

#!/usr/bin/env bash 

# Name your first "bootstrap" environment: 
ENV_NAME=NotOrion 
# Options for your first environment: 
ENV_OPTS='--no-site-packages --distribute' 

unset PYTHONDONTWRITEBYTECODE 

function create_virtualenvwrapper_venv { 
    echo "installing into virtualenvwrapper directory" 
    cd $WORKON_HOME 
    $VIRTUALENVWRAPPER_VIRTUALENV $ENV_OPTS $ENV_NAME 
    cd - 
    #mkvirtualenv $ENV_NAME 
    #workon $ENV_NAME 
} 

function create_standalone_venv { 
    # not run/snipped 
} 

if [ -z "$VIRTUALENVWRAPPER_VIRTUALENV" ]; then 
    create_standalone_venv 
else 
    create_virtualenvwrapper_venv 
fi 

pip install shovel 
shovel help 

मेरे बूटस्ट्रैप स्क्रिप्ट फावड़ा स्थापित करने समाप्त हो जाए, मैं इसे करने के बजाय सीधे उपयोग करने की कोशिश। हालांकि फावड़ा चल (उदाहरण के लिए अंतिम पंक्ति) चेतावनी का उत्पादन:

/Users/me/.virtualenvs/NotOrion/bin/shovel:25: UserWarning: Module argparse was already imported from /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/argparse.pyc, but /Users/me/.virtualenvs/NotOrion/lib/python2.7/site-packages is being added to sys.path 
import pkg_resources 
# normal shovel output snipped 

तो यह संभव है किसी भी तरह एक स्क्रिप्ट से "mkvirtualenv" आह्वान करने के लिए? यदि नहीं, तो क्या मैं अपनी स्क्रिप्ट से कुछ और चला सकता हूं जिसका एक ही प्रभाव है लेकिन चेतावनियां उत्पन्न नहीं करता है?

+0

एक सटीक समस्या, बूटस्ट्रैपिंग स्क्रिप्ट लिखना। धन्यवाद! – cloudrave

उत्तर

11

आपकी स्क्रिप्ट करने के लिए सक्षम होना चाहिए:

# 'which' will print absolute path to virtualenvwrapper.sh 
source `which virtualenvwrapper.sh` 

मैं का उपयोग करें कि कुछ तैनाती स्क्रिप्ट के लिए।

+0

ऐसा लगता है कि मैक्सपोर्ट वर्चुअलनव्वैपर "वर्चुअलenvwrapper.sh" प्रदान नहीं करता है। इसमें अन्य वर्चुअल हैं जैसे "virtualenvwrapper.sh-2.7", ऐसा लगता है कि मैं इस पर भरोसा नहीं कर सकता। – EdwardTeach

+0

आह, हाँ। यदि आप मैकपॉर्ट्स का उपयोग करते हैं तो आप उनके द्वारा किए गए सभी असमर्थित परिवर्तनों से निपटने के लिए फंस गए हैं। यह विशेष रूप से परेशान है क्योंकि इसके लिए कोई कारण नहीं है - एक वर्चुअलनव इंस्टाल पाइथन के कई अलग-अलग संस्करणों को संभाल सकता है (मेरे पास पाइथन 2.5, 2.6, 2.7, 3.2, 3.3, पायपी और ज्योथन के लिए उपयोग किया जाने वाला एक ही इंस्टॉल है) –

+0

यह मुझे मिला मेरी बूटस्ट्रैप स्क्रिप्ट को पूरा करने के लिए ट्रैक पर; मैं ऊपर लापता टुकड़ा पेस्ट करूँगा और इस जवाब को स्वीकार करूंगा। – EdwardTeach

2

ऐसा करने के लिए "मानक" तरीका प्रतीत नहीं होता है। तो मैंने मैन्युअल रूप से विभिन्न संभावित स्थानों में देखा। गन्दा, लेकिन यह एकमात्र तरीका प्रतीत होता है:

function find_virtualenvwrapper { 
    # no consistent way to find 'virtualenvwrapper.sh', so try various methods 
    # is it directly available in the path? 
    virtualenvwrapper_path=$(which virtualenvwrapper.sh) 
    if [ $? -eq 0 ]; then 
     return 
    fi 
    # nope; how about something that looks like it in our path? 
    # http://stackoverflow.com/questions/948008/linux-command-to-list-all-available-commands-and-aliases 
    virtualenvwrapper_cmd=$(compgen -ac | grep -i 'virtualenvwrapper\.sh' | sort | uniq | head -1) 
    if [ -n "$virtualenvwrapper_cmd" ]; then 
     virtualenvwrapper_path=$(which $virtualenvwrapper_cmd) 
     if [ $? -eq 0 ]; then 
     return 
     fi 
    fi 
    # still not; Debubuntu puts it in /etc/bash_completion.d 
    virtualenvwrapper_path='/etc/bash_completion.d/virtualenvwrapper' 
    if [ -e "$virtualenvwrapper_path" ]; then 
     return 
    fi 
    # any other methods to find virtualenvwrapper can be added here 
    echo "unable to find virtualenvwrapper.sh or anything that looks like it" 
    exit 1 
}