如何在动态加载的模块中静态导入模块
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
解决了问题。
我正在为我的应用程序动态加载过滤器。现在我希望能够扩展现有过滤器:
在我的 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
解决了问题。