2011-09-30 12 views
77

तुम मेरी बात समझा सकते हैं क्या अंतर-एम स्विच का उद्देश्य क्या है?

python -m mymod1 mymod2.py args 

और

python mymod1.py mymod2.py args 

यह दोनों ही मामलों mymod1.py कहा जाता है में लगता है और sys.argv बुला के बीच है

['mymod1.py', 'mymod2.py', 'args'] 

तो क्या है -m के लिए स्विच?

+0

अगर मैं गलत हूं तो कृपया मुझे सही करें, लेकिन '-m' डिफ़ॉल्ट लाइब्रेरी पथ में' mymod1' की खोज करता है। उदाहरण: 'पायथन -एम SimpleHTTPServer' काम करता है, जबकि' पायथन SimpleHTTPServer' 'फ़ाइल' SimpleHTTPServer 'नहीं खोल सकता है: [Errno 2] ऐसी कोई फ़ाइल या निर्देशिका'। – Basj

+1

मुझे वास्तव में यहां स्पष्ट उत्तर मिला: https://stackoverflow.com/questions/46319694/what-does-it-mean-to-run-library- मॉड्यूल-as-a-script-with-the-m-option – Casebash

उत्तर

74

PEP 338 की Rationale अनुभाग की पहली पंक्ति कहते हैं:

अजगर 2.4 मॉड्यूल स्क्रिप्ट निष्पादन के लिए पायथन मॉड्यूल नाम स्थान का उपयोग कर स्थित होने देना कमांड लाइन स्विच -m कहते हैं। प्रेरक उदाहरण मानक पुस्तकालय मॉड्यूल जैसे पीडीबी और प्रोफाइल थे, और पायथन 2.4 कार्यान्वयन इस सीमित उद्देश्य के लिए ठीक है।

तो आप पाइथन के खोज पथ में किसी भी मॉड्यूल को इस तरह से निर्दिष्ट कर सकते हैं, न केवल वर्तमान निर्देशिका में फाइलें। आप सही हैं कि python mymod1.py mymod2.py args बिल्कुल वही प्रभाव डालता है। Scope of this proposal अनुभाग राज्यों की प्रथम पंक्ति:

अजगर 2.4 में, मी का उपयोग कर स्थित एक मॉड्यूल बस के रूप में करता है, तो उसके फ़ाइलनाम कमांड लाइन पर प्रदान की गई थी निष्पादित किया जाता है।

-m अधिक के साथ मॉड्यूल जो एक पैकेज, आदि क्या पीईपी 338 के बाकी के बारे में है कि का हिस्सा हैं के साथ काम करने की तरह संभव है। अधिक जानकारी के लिए इसे पढ़ें।

+31

'-m' का मेरा पसंदीदा उपयोग' पायथन -एम SimpleHTTPServer' है। वास्तव में आसान जब मुझे किसी यूएसबी फ्लैश ड्राइव का उपयोग किये बिना कुछ फाइलें साझा करने की आवश्यकता होती है। – arifwn

+6

@arifwn रनिंग पायथन 3 को 'python -m http.server' के रूप में थोड़ा सा अपडेट की आवश्यकता है और यह अभी भी कमाल है! –

+7

टीएल; डीआर: 1) आप 'python -m package.subpackage.module' चला सकते हैं और सामान्य समाधान मशीनरी का उपयोग किया जाएगा, आपको सटीक '.py' फ़ाइल को इंगित करने की आवश्यकता नहीं है। 2) किसी भी कामकाज के बिना चलाने वाले मॉड्यूल से सापेक्ष आयात करना संभव है, क्योंकि इसका पैकेज रास्ते में लोड हो जाएगा। 3) पूर्ण आयात आपकी वर्तमान निर्देशिका पर आधारित होगा, न कि निर्देशिका। '.py' फ़ाइल है (' '' '' sys.path' के सिर पर है, '/ path/to/my' की बजाय, यदि स्क्रिप्ट '/ path/to/my/script.py' पर है)। – clacke

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