2011-10-12 25 views
11

क्या कोई यह समझा सकता है कि मेरी मशीन पर डिफ़ॉल्ट रूप से python 2.6 कैसे चल रहा है? यह python अंक 2.7 से दिखता है, इसलिए ऐसा लगता है कि which मुझे सही जानकारी नहीं दे रहा है।बैश में, "कौन सा" गलत पथ देता है - पायथन संस्करण

~> python --version 
Python 2.6.5 
~> which python 
/opt/local/bin/python 
~> /opt/local/bin/python --version 
Python 2.7.2 
~> ls -l /opt/local/bin/python 
lrwxr-xr-x 1 root admin 24 12 Oct 16:02 /opt/local/bin/python -> /opt/local/bin/python2.7 

जब मैं कोई त्रुटि उत्पन्न करता हूं, तो मुझे लगता है कि वास्तव में क्या चल रहा है। यह क्यों हो सकता है?

~> python -error-making-argument 
Unknown option: -e 
usage:  /Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python [option] ... [-c cmd | -m mod | file | -] [arg] ... 
Try `python -h' for more information. 

और मैं इसे कैसे ठीक कर सकता हूं?

---- संपादित करें: ----

सुझाव से टिप्पणी में:

~> alias 
alias cp='cp -i' 
alias gcc='gcc -Wall' 
~> type python 
python is /opt/local/bin/python 
+3

क्या Python 2.6.5 संस्करण के लिए aliased है? – GreenMatt

+0

पता लगाने के लिए प्रॉम्प्ट पर 'उपनाम' टाइप करें। – aioobe

+2

'पायथन' के बजाय 'टाइप पायथन' आज़माएं। यह आपको वास्तविक चीज दिखाएगा जो उपनाम और शैल फ़ंक्शंस सहित चलाएगा, जबकि 'कौन सा नहीं है। –

उत्तर

20

बैश $PATH लुकअप को अनुकूलित करने के लिए internal hash table का उपयोग करता है। जब आप एक मौजूदा प्रोग्राम के रूप में एक ही प्रोग्राम के साथ एक नया प्रोग्राम स्थापित करते हैं (python इस मामले में) पहले आपके $PATH में, बैश को इसके बारे में पता नहीं है और पुराने का उपयोग जारी है। which निष्पादन योग्य पूर्ण $PATH इच्छित परिणाम को खोजता है और प्रिंट करता है।

इसे ठीक करने के लिए, hash -d python आदेश चलाएं। यह बैश की हैश तालिका से python हटा देगा और अगली बार जब आप इसे आमंत्रित करेंगे तो इसे पूर्ण $PATH खोजने के लिए मजबूर करेंगे। वैकल्पिक रूप से, आप हैश तालिका को पूरी तरह से साफ़ करने के लिए hash -r भी चला सकते हैं।

type builtin आपको बताएगा कि दिए गए आदेश का अर्थ कैसे दिया जाएगा। यदि यह कहता है कि एक आदेश धोया गया है, तो इसका मतलब है कि बैश निष्पादन योग्य के लिए $PATH खोज को छोड़ने जा रहा है।

+0

एक बग की तरह लगता है जो '$ PATH' चर में बदलता है, हैश तालिका को स्वचालित रूप से साफ़ नहीं करता है। –

+0

बैश के मेरे संस्करण (लिनक्स पर 3.2.25) पर, यह करता है। –

+0

बढ़िया! अंतर्दृष्टि के लिए धन्यवाद! =) –

0

मैं बस अपना .bash_profile जाँच की है, और यह निम्नलिखित का समावेश है:

# Setting PATH for MacPython 2.6 
# The orginal version is saved in .bash_profile.pysave 
PATH="/Library/Frameworks/Python.framework/Versions/2.6/bin:/usr/local/git/bin:${PATH}" 
export PATH 

इस पर टिप्पणी करने से मेरी समस्या ठीक हो गई है।

अगर कोई मुझे बता सकता है कि which और type ने अभी भी गलत जवाब दिए हैं, तो मैं बहुत आभारी हूं, और उन्हें चेक-मार्क दे दूंगा!

आपके सभी मार्गदर्शन के लिए धन्यवाद!

+0

आपके पैथ से इसे हटाए बिना, 'कौन सा पायथन' (या ओएस एक्स समतुल्य)? 'Ls -l/opt/local/bin/python2.7' में से? 'फ़ाइल/ऑप्ट/लोकल/बिन/पायथन 2.7' में से? 'पायथन -v' (लोअरकेस) में से? 'हैश-पाय पायथन' में त्रुटि के साथ 'पायथन' चलाने से पहले और बाद में चलाया जाता है? पायथन पर 'dtrace' का उपयोग करने के लिए? –

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