python: 列出包内的模块
我有一个包含几个模块的包,每个模块里面都有一个(或几个)类。我想要获取这个包里面所有模块的列表。请问在Python中有没有这样的接口?
这是我的文件结构:
\pkg\
\pkg\__init__.py
\pkg\module1.py -> defines Class1
\pkg\module2.py -> defines Class2
\pkg\module3.py -> defines Class3 and Class31
在module1里面,我需要获取pkg里面的模块列表,然后导入这些模块中定义的所有类。
更新 1:
好吧,经过考虑下面的回答和评论,我发现实现我的需求并没有那么简单。为了让下面我提到的代码正常工作,所有模块必须事先明确导入。
所以现在我有了一个新想法:
如何在不加载模块的情况下获取包里面的模块列表?也就是说,使用Python的接口,而不是列出包文件夹中的所有文件?
谢谢
ak
2 个回答
1
一种临时的做法是先列出目录中的文件,然后用 __import__
动态地导入每个文件,最后再列出这个模块里面的类。
0
好的,这个其实非常简单:
import pkg
sub_modules = (
pkg.__dict__.get(a) for a in dir(pkg)
if isinstance(
pkg.__dict__.get(a), types.ModuleType
)
)
for m in sub_modules:
for c in (
m.__dict__.get(a) for a in dir(m)
if isinstance(m.__dict__.get(a), type(Base))
):
""" c is what I needed """