2011-10-05 14 views
11

लघु प्रश्न
पर 32bit मोड में virtualenv के साथ गैर प्रणाली अजगर चल रहा है python कॉल, जो किसी विशेष आभासी पर्यावरण से जुड़ा हुआ करने के लिए एक उपसर्ग जोड़ने के लिए/virtualenvwrapper यह संभव है virtualenv का उपयोग?ओएस एक्स

पृष्ठभूमि
मैं एक brew installed अजगर 2.7 का उपयोग कर कई आभासी वातावरण चाहते हैं, लेकिन कुछ 64 बिट मोड और दूसरों 32bit मोड में चल रहा है।

नीचे मेरे ओएस एक्स विकास के लिए विशिष्ट सेटअप है। python कॉल में विशिष्ट उपसर्ग जो मैं जोड़ना चाहता हूं वह arch -i386 है जो 32 बिट मोड के रूप में चलाने के लिए पाइथन को मजबूर करने के लिए है। इसके बाद सबसे महत्वपूर्ण हिस्सा यह है कि इसे workon env32 पर कॉल करने के बाद जोड़ा जाएगा (उदाहरण के रूप में दिखाया गया है)। मुझे पता है कि मैं अपने .bash_profile में उपनाम सेट कर सकता हूं, लेकिन जब भी मैं वर्चुअल वातावरण बना/निकालता हूं तो इसे संशोधित करना होगा।

संपादित
मुद्दों मैं एक साधारण उपनाम का उपयोग के साथ है के बारे में अधिक विस्तार से बता दें वहाँ 1 से अधिक 32 बिट आभासी वातावरण हो सकता है। यह कहा जा रहा है कि workon पर कॉल आदर्श रूप से उपसर्ग को python कॉल में जोड़ देगा ताकि टर्मिनल पर वर्कफ़्लो समान होगा। workon env_x_32 पर कॉल करने के बाद मतलब मैं टर्मिनल का उपयोग करते समय python और arch -i386 का उपयोग करने में सक्षम होगा।

अजगर स्थापना:

> brew install python --framework --universal 

आभासी वातावरण बनाना (पिप, virtualenv स्थापित करने के बाद और virtualenvwrapper):

> mkvirtualenv env_1_64 --no-site-packages 
> mkvirtualenv env_1_32 --no-site-packages 

> mkvirtualenv env_2_64 --no-site-packages 
> mkvirtualenv env_2_32 --no-site-packages 

64 बिट उपयोग:

> workon env_1_64 
> python myscript.py 

> workon env_2_64 
> python my_other_project_script.py 

32 बिट उपयोग: (वर्तमान/गैर आदर्श)

> workon env_1_32 
> arch -i386 python myscript.py 

> workon env_2_32 
> arch -i386 python my_other_project_script.py 

32 बिट उपयोग: (आदर्श)

> workon env_1_32 
> python my_32bit_project.py # Note that the arch -i386 would be transparent 

समाधान
Sean साथ चल रहा है टिप्पणियां:

मैंने 32 बिट के रूप में चलाने वाले वातावरण के लिए सक्रिय/निष्क्रिय करने के अंदर एक उपनाम जोड़ा। अधिक जानकारी के लिए नीचे देखें।

env_1_32: सक्रिय करने स्क्रिप्ट

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

deactivate() { 
    alias python='python' # <---- Added this line 

    # reset old environment variables 
    if [ -n "$_OLD_VIRTUAL_PATH" ] ; then 
     PATH="$_OLD_VIRTUAL_PATH" 
     export PATH 
     unset _OLD_VIRTUAL_PATH 
    fi 

    # ****** Removed Content to keep the post shorter********* 

} 

# unset irrelavent variables 
deactivate nondestructive 

VIRTUAL_ENV="/Users/Adam/.envs/env_1_32" 
export VIRTUAL_ENV 

# 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 

# ****** Removed Content to keep the post shorter********* 

alias python='arch -i386 python' # <---- Added this line to run as 32bit 
+0

कल यह प्रश्न (और उत्तर) मेरे लिए बहुत उपयोगी था, धन्यवाद! हालांकि, आज मैं फिर से अटक गया हूं, क्योंकि मेरे प्रोजेक्ट में कोई शीर्ष स्तर 'main.py' स्क्रिप्ट नहीं है, इसके बजाय setuptools (?) द्वारा उत्पन्न होता है जब मैं 'setup.py install' या 'setup.py मेरे setup.py में 'entry_points' कॉन्फ़िगरेशन का उपयोग करके 'विकसित करें'। इसका मतलब है कि मेरे उपयोगकर्ता के मशीन पर तैनात किए जाने पर 'आर्क' उपनाम डालने के लिए मेरे पास कोई जगह नहीं है। मैं इसके बारे में एक अलग सवाल पूछ सकता हूं। –

उत्तर

6

अपने सक्रिय स्क्रिप्ट के लिए एक उपनाम जोड़ने से, और अपने virtualenv प्रत्येक प्रकार आप उपयोग करना चाहते हैं को सक्रिय।

$ cd env32 
$ echo "alias python='arch -i386 python'" >> bin/activate 
$ source bin/activate 
$ python myscript.py 
+0

मैं हमेशा वर्चुअलनव विकल्प का उपयोग करने का सुझाव देता हूं --no-site-packages जब आपका वर्चुअलएन्ग बनाते हैं। –

+0

सामान्य रूप से मैं करता हूं। यह सटीक उदाहरण मैं wxPython (ब्रूड संस्करण में स्थापित) का उपयोग कर रहा हूं, इसलिए मुझे वास्तव में इसकी साइट पैकेज की आवश्यकता है। –

+0

अपने प्रश्न के जवाब में मेरा संपादन देखें। –