在模块中获取模块 - Python

时间:2017-06-20 21:15:39

标签: python python-import python-module

我有这个结构:

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]

然后以dinamycally方式导入它们。

有没有办法解决这个问题?

修改

我从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包中文件的名称,这只是一个例子。我怎样才能找到它们?

2 个答案:

答案 0 :(得分:1)

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

示例:

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

    在示例2中,您只能通过name_of_module.ClassName

  3. 调用类

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

    另外,我建议只导入您使用的类/模块,这就是我推荐的原因

    from module import Class 
    

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

答案 1 :(得分:1)

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

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]))