获取模块中的模块 - Python

Get modules in a module - Python

我有这个结构:

project/
    sources/
        __init__.py
        source_one.py
        source_teo.py
    main.py

然后在main.py

import sources

# Here I'd like to get a list with [source_one, source_two]

然后动态导入它们。

有什么办法可以得到这个吗?

编辑

我从 dir(sources) 得到的:

如果我这样做 import sources 我得到 ['__author__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']

如果我这样做 from sources import * 我得到 ['__author__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']

如果我这样做 from sources import source_one 我得到 ['__author__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'source_one']

但是,我不知道sources包中的文件名,这只是一个例子。我怎样才能找到它们?

您应该相对于当前文件位置导入

示例:

  1. from sources.source_one import ClassSourceOne
  2. from sources import *

    例2中,只能通过name_of_module.ClassName

  3. 调用类

或者您可以使用动态导入,如下所示:import dynamicly from package

此外,我建议只导入您使用的 classes/modules,这就是我推荐

的原因
from module import Class 

并且不使用 import * 所以它也导入所有模块依赖项

这是一种技巧 ;) 但有效:

import os
fileslist = os.listdir("sources")
for item in fileslist:
    if item.endswith("py") and item != "__init__.py":
        exec ("from sources.%s import *" %(item.split('.')[0]))