我正在尝试用python3证明我的工作,而spyder似乎与absolute_import
无关。
出于演示目的,我创建了两个简单的文件。 caller
和callme
呼叫者
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不能解决该问题。
答案 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中将脚本作为包执行。