ओएसएक्स पर पाइथन 2.7.3 10.8.2क्यों/usr/bin/env का उपयोग मेरे पायथन आयात को तोड़ता है?
मैं वर्तमान में एक स्क्रिप्ट लिख रहा हूं जो मार्कडाउन मॉड्यूल आयात करता है। मैंने पोर्टेबिलिटी के लिए #!/usr/bin/env python
शेबांग का इस्तेमाल किया। जब मैं इसे सीधे खोल में के माध्यम से ./myscript.py arg1
जब मैं एक (प्रवेश) खोल के बाहर से स्क्रिप्ट चलाने AppleScript do shell script "/path/to/myscript.py " & quoted form of arg1
के माध्यम से चलाने के लिए, उदाहरण के लिए स्क्रिप्ट ठीक चलता है, यह
myscript.py", line 8, in <module>
import markdown
ImportError: No module named markdown
के साथ विफल रहा है कि लगता है यह शेबैंग के साथ एक समस्या हो सकती है, इसलिए मैंने शेबांग को अपने पायथन स्थान #!/usr/local/bin/python
में बदल दिया और सुनिश्चित किया कि स्क्रिप्ट ठीक काम करती है।
तो मेरे सवाल का दुगना:
- क्यों
/usr/bin/env python
मेरी आयात को तोड़ने का उपयोग कर रहा है? /usr/local/bin/python
का उपयोग किए बिना मैं इस समस्या से कैसे बच सकता हूं?
मुझे नहीं लगता कि यह गैर-लॉगिन खोल का उपयोग करने के रूप में '/ usr/bin/env python' का उपयोग कर रहा है। मुझे लगता है कि '/ usr/local/bin' ऐसे शैल में 'पथ' पर नहीं है, या कम से कम '/ usr/bin' से पहले नहीं है, जो बताएगा कि बाद में' पायथन 'क्यों चुना जाता है। क्या आप अपनी बैश कॉन्फ़िगरेशन फ़ाइलों में 'पथ' बदल रहे हैं? – millimoose
मैंने छोड़ा एक टिड्बिट यह है कि '#!/Usr/bin/env python' और '#!/Usr/local/bin/python' दोनों टेक्स्ट वर्ंगलर में पूरी तरह से काम कर रहे थे, और टर्मिनल में चलने पर दोनों ने मुझे समान परिणाम दिए। यह केवल ऐप्पलस्क्रिप्ट से इसे बुला रहा था जिसने त्रुटि उत्पन्न की (रॉड्रिगो सही है)। जबकि टेक्स्टवंगलर और टर्मिनल दोनों ने मुझे समान परिणाम दिए, मैं 'डेल शेल स्क्रिप्ट' (इको 'आयात sys'; echo 'print sys.path';)/usr/bin/env python "चलाकर अंतर को देखने में सक्षम था। ऐप्पलस्क्रिप्ट संपादक में। 'शैल स्क्रिप्ट करें' जो पायथन "'और भी आसान होता। – n8henrie