spyder - Spyder 不处理相对进口
问题描述
我正在尝试用 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')
尝试caller
从 spyder 运行时,出现以下错误:
ValueError: Attempted relative import in non-package
通过 anaconda 提示符(python 2)或 jupyter notebook(运行 python3 或 python2)从 ipython 运行都可以正常工作。
关于如何修复 spyder 的行为以便正确识别的想法absolute_import
?
尝试过的 Spyder 版本:
3.2.4 Python 2.7.14 64 位、Qt 5.6.2、Windows 10 上的 PyQt5 5.6
3.3.2 Python 2.7.14 64 位 | Qt 5.6.2 | PyQt5 5.6 | 视窗 10
更新
通过(现在是 3.3.2 版)更新 spyderconda update 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 中将脚本作为包执行,抱歉。
推荐阅读
- c# - 为什么这个 ASP.NET Core 代码不能在远程主机上运行
- java - 一个变量可以在单个语句中递增多少次?
- makefile - 无法将标志传递给 Makefile 以编译我的代码
- android - 更新 Azure Maps for Android 中元素的位置
- c# - TinyMCE 图像上传。限制文件类型
- angular - 如何为 Angular App 实现多个登录屏幕
- android - 如何在android上读取游戏内存
- django - 如何在 django 中使用单个翻译文件?
- java - JScience:创建一个定义为多个变量组合的单元
- javascript - 如果需要第一个承诺解决结果的元素,如何解决第二个承诺?