如何在动态加载的模块中静态导入模块

How to import a module statically within a dynamically loaded module

我正在为我的应用程序动态加载过滤器。现在我希望能够扩展现有过滤器:

在我的 Main.py 我做的是:

spec = importlib.util.spec_from_file_location(filter, file)
inst = importlib.util.module_from_spec(spec)
spec.loader.exec_module(inst)

我有一个名为 varianceFilter.py 的文件可以正常加载和运行:

varianceFilter.py:

def run(images):
    #do something
    return result

现在我想像这样重用和扩展这个过滤器:

testFilter.py:

import varianceFilter as vf

def run(images):
    ret = vf.run(images)
    #do something with ret 
    return ret

然而,一旦我尝试导入 varianceFilter.py 异常

No module named 'varianceFilter'

被抛出。这两个文件都在同一个目录中。 我做错了什么?

编辑:

我的目录结构是:

main.py 
filters/varianceFilter.py
filters/testFilter.py

在主目录中创建 varianceFilter 副本后,testFilter.py 工作正常。

添加空文件

filters/__init__.py

并将 testFilter.py 中的导入语句更改为

import filters.varianceFilter as vf 

解决了问题。