2012-10-22 31 views
5

के माध्यम से नहीं, मैं बस पाइथन के साथ शुरू कर रहा हूं और थोड़ा मार्गदर्शन की आवश्यकता है।टर्मिनल में पायथन मॉड्यूल आयात, लेकिन यूनिक्स शैल

मैं मैक का उपयोग कर रहा हूं, लेकिन मेरे पास python.org के साथ-साथ मूल ऐप्पल इंस्टॉल स्थापित है।

मैं कुछ तृतीय पक्ष मॉड्यूल लोड करने की कोशिश कर रहा हूं। जब मैं आईडीएलई या टर्मिनल के माध्यम से स्क्रिप्ट चलाता हूं, तो सब कुछ ठीक काम करता है। जब मैं इसे सीआरओएन नौकरी के रूप में चलाने की कोशिश करता हूं, तो मुझे एक त्रुटि मिलती है कि यह तीसरे पक्ष के मॉड्यूल को नहीं ढूंढ सकता है।

कुछ पोकिंग के बाद, मुझे विश्वास है कि यह पाइथोनपैट/sys.path है। मैंने अपना रास्ता दिखाने के लिए एक टेस्ट स्क्रिप्ट बनाई। तो जब मैं टर्मिनल विंडो के माध्यम से सीधे शेल स्क्रिप्ट के रूप में चलाता हूं तो मुझे अलग-अलग पथ क्यों मिलते हैं?

मेरे दो प्रश्न हैं:

  1. क्यों वे अलग हैं?
  2. तृतीय पक्ष मॉड्यूल खोजने के लिए मुझे प्रत्यक्ष खोल प्रक्रिया कैसे मिल सकती है?

    ['/Library/Scripts', 
    '/Library/Scripts/$', 
    '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', 
    '/Library/Frameworks/Python.framework/Versions/7.3/lib/python27.zip', 
    '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7', 
    '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/plat-darwin', 
    '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/plat-mac', 
    '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/plat-mac/lib-scriptpackages', 
    '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/lib-tk', 
    '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/lib-old', 
    '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/lib-dynload', 
    '/Library/Python/2.7/site-packages'] 
    

    यहाँ मेरी sys.path उत्पादन जब मैं खोल में इसे चलाने के (इस मामले में मैं एक साथ Apple स्क्रिप्ट में हूँ:

यहाँ मेरी sys.path उत्पादन जब मैं टर्मिनल में इसे चलाने है कदम "खोल स्क्रिप्ट करते हैं"।

"['/Library/Scripts', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC', 
'/Library/Python/2.7/site-packages']" 
+2

आप निश्चित रूप से virtualenv पर गौर करना चाहिए; यह आपको पायथन और प्रोजेक्ट-विशिष्ट पथ चर के विभिन्न संस्करणों को जोड़ने में मदद करेगा। –

उत्तर

4

क्यों वे अलग हैं?

क्योंकि आप दो अलग पायथन दुभाषिया चला रहे हैं, और उनके पास अलग-अलग डिफ़ॉल्ट sys.path मान हैं।

यह उद्देश्य पर है- यह आपको सिस्टम इंस्टॉलेशन को तोड़ने के बिना (या उस इंस्टॉलेशन पर निर्भर ऐप्पल-आपूर्ति किए गए टूल में से किसी भी) के बिना, आपके Python.org स्थापना की मानक (या साइट) लाइब्रेरी को संशोधित करने की अनुमति देता है।

मुझे लगता है कि जब आप एक टर्मिनल में python चलाने के लिए, आप /usr/local/bin/python हो रही है अनुमान लगा रहा हूँ (आप देख सकते हैं कि which python लिखकर) (कि ढांचे के अंदर कहीं न कहीं एक Python.app/Contents/MacOS/python को संभवतः या) है, जो संभवतः /Library/Frameworks/Python.framework/Versions/7.3/bin/python के लिए एक लिंक है । और python.org से वह पायथन, sys.path को /Library/Frameworks/Python.framework/Versions/7.3/ के आसपास सेट करने के लिए संकलित किया गया है।

इस बीच, जब आप लॉन्च सेवा के माध्यम से python चलाते हैं तो शायद /usr/bin/python हो रही है, जो है (उम्मीद) में निर्मित शिम आसपास /System/Library/Frameworks/Python.framework/Versions/2.7/bin/python, जो sys.path के आस-पास /System/Library/Frameworks/Python.framework/Versions/2.7/ स्थापित करने के लिए संकलित किया गया है।

कारण python उन मामलों में अलग अलग बातें करता है कि /usr/local/bin सब पर अपना लॉगिन PATH पर नहीं है, लेकिन अपने ~/.profile (या अन्य) फ़ाइल में एक लाइन द्वारा पथ के सिर में जोड़ा जाता है है। वह फ़ाइल टर्मिनल में खोल सत्रों द्वारा पढ़ी जाती है, लेकिन लॉन्च सेवा सत्रों द्वारा नहीं।

आप सभी के वातावरण में एक ही अजगर का उपयोग करना चाहते हैं, तो आप स्पष्ट रूप से /usr/local/bin/python या /usr/bin/python के बजाय सिर्फ python चला सकते हैं।(आप भी अपनी प्रवेश मार्ग पर /usr/local/bin मिल सकता है, लेकिन यह एक बहुत बुरा विचार है, या यह अपने ~/.profile से बाहर निकलना है, लेकिन यह एक छोटे से असुविधाजनक है।)

एक तरफ ध्यान दें के रूप में, यह एक संकेत है कि आपके अजगर है। संगठन स्थापना बहुत टूटी हुई है:

/Library/Frameworks/Python.framework/Versions/7.3/lib/python27.zip 

कोई पायथन 7.3 नहीं है। मैं दृढ़ता से python.org निर्माण को अनइंस्टॉल करने और पुनर्स्थापित करने पर विचार करता हूं।

या, अधिक बस, इसे अनइंस्टॉल करें और इसकी स्थापना रद्द छोड़ देते हैं, और बस का उपयोग में निर्मित अजगर 2.7। आप एक से अधिक वातावरण चाहते हैं तो कई प्रतिष्ठानों के बजाय virtualenv का उपयोग करें। यदि, उदाहरण के लिए, ऐप्पल आपको 2.7.2 दे रहा है और आपको वास्तव में 2.7.3 की ज़रूरत है, तो आपको दूसरी स्थापना की आवश्यकता है; अन्यथा, आप किसी भी लाभ के लिए चीजों को कठिन बना रहे हैं।

+0

Btw, मुझे विश्वास है कि '7.3' ढांचा संस्करण के ऊपर एक Enthought पायथन ओएस एक्स वितरण, नहीं एक टूटी हुई स्थापना से है। उन्होंने python.org पायथन के साथ सह-अस्तित्व के लिए अपनी स्वयं की ढांचा संस्करण योजना का उपयोग किया। –

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

  • कोई संबंधित समस्या नहीं^_^