我有这个结构:
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
包中文件的名称,这只是一个例子。我怎样才能找到它们?
答案 0 :(得分:1)
您应该相对于当前文件位置导入
示例:
from sources.source_one import ClassSourceOne
from sources import *
在示例2中,您只能通过name_of_module.ClassName
或者您可以使用动态导入,如下所示: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]))