我有一个程序,其布局如下:
test\test.py
test\modules\base.py
test\modules\blah.py
我需要按名称加载模块。每个模块都使用相同的方法实现一个类,因此我将它们加载到字典中,以便可以根据需要引用它们。我在尝试进行相对导入时遇到了以下错误。
File "modules/blah.py", line 1, in <module>
from .base import BaseModule
ImportError: attempted relative import with no known parent package
是否可以使用使用importlib导入的代码中的相对导入? 我正在使用Python3。以下是显示此错误的简单示例...
test \ test.py:
#!/usr/bin/env python
import importlib
class Test():
def __init__(self):
spec = importlib.util.spec_from_file_location("blah", "modules/blah.py")
mod = importlib.util.module_from_spec(spec)
spec.loader.exec_module(mod)
def main():
t = Test()
if __name__ == '__main__':
main()
test \ modules \ base.py:
class BaseModule():
modulename = "base"
def __init__(self,name):
print("Initializing module %s" % (self.modulename))
test \ modules \ blah.py:
from .base import BaseModule
class BlahModule(BaseModule):
modulename = "blah"
答案 0 :(得分:0)
添加以下代码应该会有所帮助:
import os
import sys
module_path = "modules/blah.py"
module_dir = os.path.dirname(module_path)
if module_dir not in sys.path:
sys.path.append(module_dir)
# do actual import of module here