from __future__ import absolute_import
吗?我刚刚意识到,虽然我使用的只是python,但整个项目都在IronPython中。
我正在尝试使用相对导入(而不是附加到sys.path)。这是我的目录结构:
-src
|
-runners
|
-__init__.py
-clippyRunner.py
|
-__init__.py
-clippy.py
-irondb.py
-ironxl.py
现在,在clippyRunner.py中,我想导入clippy,正如您所见,它位于父目录src
中。我所做的就是:
from __future__ import absolute_import
from ...src import clippy
但是这给了我这个错误:
ValueError: Attempted relative import in non-package
我也试过
from ..src import clippy
同样的结果。
我在这里做错了什么?
编辑:我也试过import ..clippy
这只是给了我:SyntaxError: unexpected token '.'
答案 0 :(得分:1)
您的导入已损坏:
from .. import clippy
答案 1 :(得分:1)
您收到的错误消息显示IronPython正在接受语法,但认为您当前没有在程序包中运行代码。
由于您在打印'__main__'
时收到'src.runners.clippyRunner'
而不是__name__
,这告诉我您直接从命令行运行/src/runners/clippyRunner.py
。正如您所见,这打破了相对导入,因为Python不知道模块在包层中的位置。
在CPython中,您可以使用包含python -m src.runners.clippyRunner
包的目录中的命令行src
来处理这种情况,以确保解释器知道受影响模块的正确位置。
我不知道当前版本的IronPython是否具有等效机制(CPython仅在PEP 366包含在2.6版中时才修复)