首页 文章

Spyder没有处理相对进口

提问于
浏览
0

我试图python3证明我的工作和spyder似乎有 absolute_import 的问题 .

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

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 回答

  • 1

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

    ValueError: Attempted relative import in non-package
    

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

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

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

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


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

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

    但是,我们没有能力在Spyder中执行脚本作为包,抱歉 .

相关问题