2016-07-15 86 views
3

我的工作具有以下结构的项目:相对进口在“关于SystemError:父模块'没有加载,无法执行相对进口”

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

根据PEP 328相对进口可能。 然而,当我在同一目录中开始的Python(壳)作为a.py并执行以下命令:

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 *不推荐,它只用于测试(试图导入配置)。

+0

哪一行导致错误? – martineau

+0

命令是行。当我运行'from ..config import *'或'from ... project import *'时出现错误。 – Greg

+1

我想你需要在'project'目录中有一个(空的)'__init __。py'文件。 – martineau

回答

4

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

因此,要测试,请将PYTHONPATH设置为项目的根目录(作为临时度量),然后从其他目录(例如您的主目录)执行from modules import aa模块然后可以执行from ..config import *,然后才可以。