python: 列出包内的模块

2 投票
2 回答
4912 浏览
提问于 2025-04-15 20:58

我有一个包含几个模块的包,每个模块里面都有一个(或几个)类。我想要获取这个包里面所有模块的列表。请问在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 """

撰写回答