我试图python3证明我的工作和spyder似乎有 absolute_import
的问题 .
出于演示目的,我创建了两个简单文件 . caller
和 callme
caller
from __future__ import absolute_import
from .callme import helloWorld
def runme(msg):
helloWorld(msg)
if __name__ == "__main__":
runme('It worked!')
callme
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)运行都能正常工作 .
关于如何修复spyder行为以便正确识别 absolute_import
的想法?
Spyder versions tried:
-
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
Update
通过 conda update spyder
(现在的版本3.3.2)更新spyder并没有解决问题 .
1 回答
如果您在系统终端中运行
python caller.py
,则会得到与您发布的错误完全相同的错误,即所以这对Spyder来说不是问题(因为当你使用
Run > Run
执行一个文件时,Spyder运行类似于python caller.py
的东西),但是相对导入的方式是有效的 .请参阅此答案以获得正确的解释:
https://stackoverflow.com/a/11537218/438386
实质上,您不能在脚本中使用相对导入 .
注意:有一种解决方法可以避免此错误,如本答案中所述:
https://stackoverflow.com/a/11536794/438386
但是,我们没有能力在Spyder中执行脚本作为包,抱歉 .