Công cụ phù hợp cho công việc này là pkgutil.walk_packages.
Để liệt kê tất cả các mô-đun trên hệ thống của bạn:
import pkgutil
for importer, modname, ispkg in pkgutil.walk_packages(path=None, onerror=lambda x: None):
print(modname)
Lưu ý rằng walk_packages nhập tất cả các gói con, nhưng không nhập các mô-đun con.
Nếu bạn muốn liệt kê tất cả các mô-đun con của một gói nhất định thì bạn có thể sử dụng một cái gì đó như sau:
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 chỉ liệt kê các mô-đun sâu một cấp. walk_packages nhận tất cả các mô-đun con. Trong trường hợp scipy, ví dụ: walk_packages trả về
scipy.stats.stats
trong khi iter_modules chỉ trả về
scipy.stats
Tài liệu trên pkgutil ( http://docs.python.org/library/pkgutil.html ) không liệt kê tất cả các hàm thú vị được định nghĩa trong /usr/lib/python2.6/pkgutil.py.
Có lẽ điều này có nghĩa là các chức năng không phải là một phần của giao diện "công khai" và có thể thay đổi.
Tuy nhiên, ít nhất kể từ Python 2.6 (và có lẽ là các phiên bản trước đó?) Pkgutil đi kèm với phương thức walk_packages mà đệ quy duyệt qua tất cả các mô-đun có sẵn.