इस काम के लिए सही उपकरण pkgutil.walk_packages है।
अपने सिस्टम के सभी मॉड्यूलों को सूचीबद्ध करने के लिए:
import pkgutil
for importer, modname, ispkg in pkgutil.walk_packages(path=None, onerror=lambda x: None):
print(modname)
इस बात से अवगत रहें कि walk_packages सभी उप-पैकेजों का आयात करता है, लेकिन सबमॉड्यूल्स का नहीं।
यदि आप एक निश्चित पैकेज के सभी सबमॉडल्स को सूचीबद्ध करना चाहते हैं तो आप कुछ इस तरह का उपयोग कर सकते हैं:
import pkgutil
import scipy
package=scipy
for importer, modname, ispkg in pkgutil.walk_packages(path=package.__path__,
prefix=package.__name__+'.',
onerror=lambda x: None):
print(modname)
iter_modules केवल उन मॉड्यूल को सूचीबद्ध करता है जो एक-स्तरीय गहरे हैं। walk_packages में सभी सबमॉड्यूल मिलते हैं। डरपोक के मामले में, उदाहरण के लिए, walk_packages रिटर्न
scipy.stats.stats
जबकि iter_modules ही लौटते हैं
scipy.stats
Pkgutil ( http://docs.python.org/library/pkgutil.html ) पर प्रलेखन /usr/lib/python2.6/pkgutil.py में परिभाषित सभी दिलचस्प कार्यों को सूचीबद्ध नहीं करता है।
शायद इसका मतलब यह है कि फ़ंक्शन "सार्वजनिक" इंटरफ़ेस का हिस्सा नहीं हैं और परिवर्तन के अधीन हैं।
हालांकि, कम से कम पाइथन 2.6 (और शायद पहले के संस्करणों?) के रूप में pkgutil एक walk_packages विधि के साथ आता है जो कि उपलब्ध सभी मॉड्यूल के माध्यम से पुनरावृत्ति करता है।