蟒:在封装内的模块列表(python: list modules within the packag

2019-10-20 18:05发布

我有几个模块的封装,每个模块都具有在其内定义的类(或几类)。 我需要获得包内的所有模块的列表。 是否有这个在python的API?

下面是该文件的结构:

\pkg\
\pkg\__init__.py
\pkg\module1.py -> defines Class1
\pkg\module2.py -> defines Class2
\pkg\module3.py -> defines Class3 and Class31

模块1中,我需要得到PKG内的模块列表,然后再导入这些模块中定义的所有类

更新1:好吧,考虑到答案和注释下面我想通之后,这不是这很容易实现我的需要。 为了让我提出以下工作的代码,所有的模块应事先明确进口。

所以,现在的新概念:如何获得一个封装内的模块列表,而无需加载模块? 使用Python API,即 - 而不列出在包文件夹中的所有文件?

感谢AK

Answer 1:

一个特别的方法是列出目录中的文件,用动态导入每个文件__import__ ,然后列出导致模块的课程。



Answer 2:

好吧,这实际上非常简单:

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 """


文章来源: python: list modules within the package