__all__
का उपयोग किए बिना, पैकेज में सभी मॉड्यूल के नाम सूचीबद्ध करने का एक सीधा तरीका है?क्या पैकेज में पायथन मॉड्यूल के नाम सूचीबद्ध करने का कोई मानक तरीका है?
, इस पैकेज दिया:
/testpkg
/testpkg/__init__.py
/testpkg/modulea.py
/testpkg/moduleb.py
अगर वहाँ इस तरह कुछ करने के लिए एक मानक या निर्मित तरह से मैं सोच रहा हूँ:
>>> package_contents("testpkg")
['modulea', 'moduleb']
मैनुअल दृष्टिकोण होगा पैकेज की निर्देशिका को खोजने के लिए मॉड्यूल खोज पथ के माध्यम से पुनरावृत्त करने के लिए। तब कोई उस निर्देशिका में सभी फाइलों को सूचीबद्ध कर सकता है, विशिष्ट नामित पीई/पीईसी/पीओओ फाइलों को फ़िल्टर कर सकता है, एक्सटेंशन को पट्टी कर सकता है, और उस सूची को वापस कर सकता है। लेकिन यह मॉड्यूल आयात तंत्र पहले से ही आंतरिक रूप से कुछ करने के लिए एक उचित मात्रा में काम की तरह लगता है। क्या वह कार्यक्षमता कहीं भी उजागर हुई है?
मैं 'और मॉड्यूल! = "__init__.py" को अंतिम' if 'में जोड़ूंगा, क्योंकि __init__.py वास्तव में पैकेज का हिस्सा नहीं है। और .pyo एक और मान्य विस्तार है। इसके अलावा, imp.find_module का उपयोग करना वास्तव में एक अच्छा विचार है; मुझे लगता है कि यह सही जवाब है। – DNS
मैं असहमत हूं - आप सीधे __init__ आयात कर सकते हैं, तो यह विशेष मामला क्यों है? यह निश्चित रूप से नियमों को तोड़ने के लिए पर्याप्त नहीं है। ;-) – cdleary
आपको शायद अपनी हाथ से लिखित सूची के बजाय 'imp.get_suffixes()' का उपयोग करना चाहिए। – itsadok