【发布时间】:2019-03-21 04:18:33
【问题描述】:
我有一个布局如下的程序:
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 导入的代码中使用相对导入? 我正在使用 Python 3。以下是显示此错误的简单示例...
测试\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()
测试\模块\base.py:
class BaseModule():
modulename = "base"
def __init__(self,name):
print("Initializing module %s" % (self.modulename))
测试\模块\blah.py:
from .base import BaseModule
class BlahModule(BaseModule):
modulename = "blah"
【问题讨论】:
-
@Leonid 我不明白 napuzba.com 页面。文件系统中没有显示对演示(/toplevel/project/demos/demo.py)文件夹的引用,并且没有解释演示的来源。该目录似乎被命名为 package,但他们将其称为 demos。它是如何工作的?
标签: python python-3.x python-import