项目内部的相对导入导致" SystemError:父模块''未加载,无法执行相对导入"

时间:2016-07-15 14:13:51

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

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

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 *,它仅用于测试(尝试导入配置)。

2 个答案:

答案 0 :(得分:4)

相对导入只能在模块本身导入的地方使用。在交互式会话中运行该命令没有父模块。此外,当前目录是隐式搜索(因此被视为包),因此该目录中的交互式解释器中的import a将没有父模块。

因此,要进行测试,请将PYTHONPATH设置为项目的根目录(作为临时措施),然后从另一个目录(例如主目录)执行from modules import a。然后,a模块可以执行from ..config import *,然后才能执行EFDataReader<T>

答案 1 :(得分:0)

您可以通过以下方式克服此错误:

  1. 项目模块目录中创建__init__.py
  2. 项目
  3. 的父目录中运行 python -m project.modules.a

    有关详细信息,请参阅ImportError: attempted relative import with no known parent package