相对进口的麻烦

时间:2011-02-25 16:00:51

标签: ironpython

编辑:IronPython中有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 '.'

2 个答案:

答案 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版中时才修复)