【问题标题】:Relative import inside project results in "SystemError: Parent module '' not loaded, cannot perform relative import"项目内的相对导入导致“系统错误:未加载父模块,无法执行相对导入”
【发布时间】:2016-07-15 14:13:50
【问题描述】:

我正在做一个具有以下结构的项目:

project
├── config.py
└── modules
    └── a.py

根据PEP 328 相对导入是可能的。 但是,当我在与 a.py 相同的目录中启动 Python(在 shell 中)并执行以下命令时:

from ..config import *

from ...project import *

我收到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
SystemError: Parent module '' not loaded, cannot perform relative import

我知道不推荐import *,它仅用于测试(尝试导入配置)。

【问题讨论】:

  • 哪一行导致错误?
  • 命令是行。运行 from ..config import *from ...project import * 时出现错误。
  • 我认为您需要在project 目录中创建一个(空的)__init__.py 文件。
  • 我在project 文件夹中添加了一个空的__init__.py 并尝试执行导入,但它产生了同样的错误。除了project 中的__init__.py 文件之外,还尝试在modules 中添加一个空的__init__.py,但仍然导致相同的错误。
  • 好的,那么这可能与您尝试从 Python shell 执行此操作有关。而是尝试从modules 目录中的文件执行此操作。

标签: python python-3.x python-import relative-import


【解决方案1】:

相对导入只能在模块本身被导入的情况下工作。在交互式会话中运行该命令没有父模块。此外,当前目录是隐式搜索的(因此被视为一个包),因此来自该目录中交互式解释器的import a 将没有父模块。

因此,要测试,请将 PYTHONPATH 设置为项目的根目录(作为临时措施),然后从另一个目录(例如您的主目录)执行 from modules import a。然后a 模块可以执行from ..config import *,并且只有这样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-01
    • 2016-02-23
    • 2015-08-01
    • 1970-01-01
    • 2021-12-04
    • 2018-08-05
    • 1970-01-01
    • 2016-03-07
    相关资源
    最近更新 更多