2011-08-30 10 views
29

मेरे कंप्यूटरपाइथन 3 के बजाय पायथन 2 (अस्थायी) डिफ़ॉल्ट पायथन के रूप में?

~$ python -V 
Python 3.2.1 

पर लेकिन जब मैं कुछ पायथन प्रोग्राम चलाता हूं तो मुझे समस्याएं आती हैं। मेरा अनुमान है (या कम से कम मैं यह कोशिश करना चाहता हूं) कि कुछ पिछड़े संगतता मुद्दे हैं, और मैं उन पायथन स्क्रिप्ट को

 python2 2.7.2-2 

के साथ चलाने के लिए चाहता हूं जो कि मेरे सिस्टम पर भी स्थापित है लेकिन मुझे नहीं पता कि कैसे इसे (अस्थायी) डिफ़ॉल्ट पायथन के रूप में बनाने के लिए। पायथन स्क्रिप्ट

 #!/usr/bin/env python 

से शुरू होती है और मैं आर्क लिनक्स का उपयोग कर रहा हूं।

+2

आप क्यों नहीं बस कुटिया में परिवर्तन नहीं करते? –

+2

ध्यान रखें कि आर्क लिनक्स पाइथन के बहुत कम वितरकों में से एक है जिसने 'पायथन' को 'पायथन 3' बनाया है। यह पाइथन दुनिया में एक विवादास्पद कदम रहा है। ड्राफ्ट पीईपी 394 (http://www.python.org/dev/peps/pep-0394/) के बारे में चर्चाएं देखें। –

उत्तर

50

आप का उपयोग virtualenv

# Use this to create your temporary python "install" 
# (Assuming that is the correct path to the python interpreter you want to use.) 
virtualenv -p /usr/bin/python2.7 --distribute temp-python 

# Type this command when you want to use your temporary python. 
# While you are using your temporary python you will also have access to a temporary pip, 
# which will keep all packages installed with it separate from your main python install. 
# A shorter version of this command would be ". temp-python/bin/activate" 
source temp-python/bin/activate 

# When you no longer wish to use you temporary python type 
deactivate 

का आनंद लें कर सकते हैं!

+4

धन्यवाद, अच्छा, सरल विचार का उपयोग करूंगा। कभी-कभी एक दूसरे के साथ चलने वाली पाइथन स्क्रिप्ट्स और बड़ी बिल्ड सिस्टम में क्या नहीं है, और उनमें सभी में env पायथन है, इसलिए प्रत्येक फ़ाइल को बदलना एक विकल्प नहीं है। –

+1

डिट्टो। खुले स्रोत पैकेज के बहुत सारे मानते हैं कि अजगर पाइथन 2 को संदर्भित करता है। पैकेज बनाता है, जबकि python2 python को मैप करने के लिए bash या zsh प्राप्त करने का यह एक आसान तरीका है। वर्चुअलएन्व का वर्तमान संस्करण प्रॉम्प्ट को बदलता है, इसलिए जब आप पूरा कर लें तो निष्क्रिय करने के लिए एक अच्छा दृश्य अनुस्मारक होता है। – WeakPointer

9

बस पाइथन के बजाय python2.7 या python2 जैसे कुछ का उपयोग करके स्क्रिप्ट को कॉल करें।

तो:

python2 myscript.py 

के बजाय:

python myscript.py 

तुम क्या वैकल्पिक रूप से कर सकता है सांकेतिक लिंक "अजगर" को बदलने के लिए है/usr/bin जो वर्तमान में एक लिंक के साथ python3 के लिंक में आवश्यक पायथन 2/2.x निष्पादन योग्य के लिए। फिर आप इसे केवल पिन के साथ कॉल कर सकते हैं।

2

स्क्रिप्ट लॉन्च करने के लिए पाइथन कमांड का उपयोग करें, सीधे खोल नहीं। जैसे

python2 /usr/bin/command 

AFAIK यह खराब एनवी दुभाषिया लाइन के साथ स्क्रिप्ट को काम करने की अनुशंसित विधि है।

8

आप नहीं एक "अस्थायी डिफ़ॉल्ट अजगर"

आप 2.7 स्क्रिप्ट

/usr/bin/env python2.7 

साथ शुरू करना चाहते हैं चाहते हैं और अगर आप 3.2 स्क्रिप्ट के साथ शुरू करना चाहते हैं

/usr/bin/env python3.2 

वास्तव में "डिफ़ॉल्ट" पायथन के लिए कोई उपयोग नहीं है। और "अस्थायी डिफ़ॉल्ट" का विचार पूर्ण भ्रम के लिए सिर्फ एक सड़क है।

याद रखें।

स्पष्ट प्रभाव से स्पष्ट है।

+0

डिफ़ॉल्ट स्थापना से, यह 'python27' और' python32' नहीं होगा? – Edwin

+1

@ एडविन: मेरे कंप्यूटर पर नहीं। यह '/ usr/bin/env python2.7' है। –

+5

प्रश्न यह नहीं कहा गया कि पाइथन स्क्रिप्ट उपयोगकर्ता द्वारा बनाई गई हैं: वे तीसरे पक्ष की स्क्रिप्ट हो सकती हैं, और उस स्थिति में हम अपने सभी शेबैंग को बदलना नहीं चाहते हैं, खासकर यदि वे कुछ संस्करण नियंत्रण में हैं और हमारे परिवर्तन मिटा दिए जाएंगे हम स्क्रिप्ट अपडेट करते हैं। ऐसे मामले में हमें वास्तव में किसी तरह अस्थायी रूप से अजगर के रूप में python2 सेट करने की आवश्यकता है। इसका अच्छा उदाहरण Google से nacl sdk है, जो archlinux पर समस्या का कारण बनता है क्योंकि यह पाइथन को python2 होने की अपेक्षा करता है। – Martinsos

6

आप alias python="/usr/bin/python2.7" इस्तेमाल कर सकते हैं:

bash-3.2$ alias 
bash-3.2$ python 
Python 2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> ^D 
bash-3.2$ alias python="/usr/bin/python3.3" 
bash-3.2$ python 
Python 3.3.3 (v3.3.3:c3896275c0f6, Nov 16 2013, 23:39:35) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 
+0

एलियंस को बाल शैल द्वारा विरासत में नहीं मिला है, इसलिए यह केवल पाइथन को कॉल करते समय ही काम करेगा। – gerrard00

7
mkdir ~/bin 
PATH=~/bin:$PATH 
ln -s /usr/bin/python2 ~/bin/python 

, को Python2 का उपयोग कर exit या rm ~/bin/python को रोकने के लिए।

+0

सादा और सरल! वर्चुअलenv की कोई ज़रूरत नहीं है। – lesmana

2

आप virtualenv के साथ कुछ समस्या है, तो

आप इसका इस्तेमाल कर सकते हैं:

sudo ln -sf python2 /usr/bin/python 

और

sudo ln -sf python3 /usr/bin/python 
संबंधित मुद्दे