首页 > 解决方案 > Spyder 不处理相对进口

问题描述

我正在尝试用 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')

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

ValueError: Attempted relative import in non-package

通过 anaconda 提示符(python 2)或 jupyter notebook(运行 python3 或 python2)从 ipython 运行都可以正常工作。

关于如何修复 spyder 的行为以便正确识别的想法absolute_import

尝试过的 Spyder 版本:

更新

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

标签: spyder

解决方案


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

ValueError: Attempted relative import in non-package

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

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

https://stackoverflow.com/a/11537218/438386

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


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

https://stackoverflow.com/a/11536794/438386

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


推荐阅读