【问题标题】:Relative imports do not work from imported modules相对导入在导入的模块中不起作用
【发布时间】: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


【解决方案1】:

添加以下代码应该会有所帮助:

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 

【讨论】:

    猜你喜欢
    • 2015-04-30
    • 2022-07-01
    • 2018-01-08
    • 2015-04-12
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    相关资源
    最近更新 更多