python:列出包中的模块

时间:2010-03-29 08:29:38

标签: python import module packages

我有一个包含几个模块的包,每个模块都有一个类(或几个类)。我需要获取包中所有模块的列表。在python中有这个API吗?

这是文件结构:

\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 API,即 - 没有列出包文件夹中的所有文件?

由于 AK

2 个答案:

答案 0 :(得分:1)

一种特殊方法是列出目录中的文件,使用__import__动态导入每个文件,然后列出生成的模块的类。

答案 1 :(得分: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 """