Spyder 不处理相关进口

Spyder not handling relative imports

我正在尝试 python3 证明我的工作,而 spyder 似乎对 absolute_import 有问题。

出于演示目的,我创建了两个简单的文件。 callercallme

来电者

from __future__ import absolute_import
from .callme import helloWorld

def runme(msg):
    helloWorld(msg)


if __name__ == "__main__":

    runme('It worked!')

给我打电话

def helloWorld(msg):      
    print("helloWorld's message is '{}'".format(msg))


if __name__ == "__main__":

    helloWorld('Hi')

尝试从 spyder 运行 caller 时出现以下错误:

ValueError: Attempted relative import in non-package

运行 来自 ipython 通过 anaconda 提示符 (python 2) 或来自 jupyter notebook (运行ning python3 或 python 2) 两者都正常工作。

有关如何修复 spyder 的行为以使其正确识别的想法absolute_import?

尝试过的 Spyder 版本:

更新

通过 conda update spyder 更新 spyder(现在是 3.3.2 版)没有解决问题。

如果您 运行 python caller.py 在系统终端中,您将得到与您发布的完全相同的错误,即

ValueError: Attempted relative import in non-package

所以这不是 Spyder 的问题(因为当您使用 Run > Run 执行文件时,Spyder 运行 的东西类似于 python caller.py),但是相对导入的工作方式.

请参阅此答案以获得正确的解释:

本质上,您不能在脚本中使用相对导入。


注意:有一个解决方法可以避免此错误,如以下答案所述:

但是,我们无法在 Spyder 中将脚本作为一个包执行,抱歉。