Spyder不处理相对进口

时间:2018-12-05 18:19:36

标签: 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')

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

ValueError: Attempted relative import in non-package

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

关于如何纠正间谍行为的想法,以便它正确识别absolute_import

尝试了Spyder版本:

  • 3.2.4 Windows 10上的Python 2.7.14 64位,Qt 5.6.2,PyQt5 5.6

  • 3.3.2 Python 2.7.14 64位| Qt 5.6.2 | PyQt5 5.6 | Windows 10

更新

通过conda update spyder(现在为3.3.2版)更新spyder不能解决该问题。

1 个答案:

答案 0 :(得分:1)

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

ValueError: Attempted relative import in non-package

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

请参阅此答案以获取适当的说明:

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

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


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

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

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