Spyder 不处理相关进口
Spyder not handling relative imports
我正在尝试 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 notebook (运行ning python3 或 python 2) 两者都正常工作。
有关如何修复 spyder 的行为以使其正确识别的想法absolute_import
?
尝试过的 Spyder 版本:
3.2.4 Python 2.7.14 64 位,Qt 5.6.2,PyQt5 5.6 on Windows 10
3.3.2 Python2.7.14 64 位 | Qt 5.6.2 | PyQt5 5.6 | Windows10
更新
通过 conda update spyder
更新 spyder(现在是 3.3.2 版)没有解决问题。
如果您 运行 python caller.py
在系统终端中,您将得到与您发布的完全相同的错误,即
ValueError: Attempted relative import in non-package
所以这不是 Spyder 的问题(因为当您使用 Run > Run
执行文件时,Spyder 运行 的东西类似于 python caller.py
),但是相对导入的工作方式.
请参阅此答案以获得正确的解释:
本质上,您不能在脚本中使用相对导入。
注意:有一个解决方法可以避免此错误,如以下答案所述:
但是,我们无法在 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')
尝试从 spyder 运行 caller
时出现以下错误:
ValueError: Attempted relative import in non-package
运行 来自 ipython 通过 anaconda 提示符 (python 2) 或来自 jupyter notebook (运行ning python3 或 python 2) 两者都正常工作。
有关如何修复 spyder 的行为以使其正确识别的想法absolute_import
?
尝试过的 Spyder 版本:
3.2.4 Python 2.7.14 64 位,Qt 5.6.2,PyQt5 5.6 on Windows 10
3.3.2 Python2.7.14 64 位 | Qt 5.6.2 | PyQt5 5.6 | Windows10
更新
通过 conda update spyder
更新 spyder(现在是 3.3.2 版)没有解决问题。
如果您 运行 python caller.py
在系统终端中,您将得到与您发布的完全相同的错误,即
ValueError: Attempted relative import in non-package
所以这不是 Spyder 的问题(因为当您使用 Run > Run
执行文件时,Spyder 运行 的东西类似于 python caller.py
),但是相对导入的工作方式.
请参阅此答案以获得正确的解释:
本质上,您不能在脚本中使用相对导入。
注意:有一个解决方法可以避免此错误,如以下答案所述:
但是,我们无法在 Spyder 中将脚本作为一个包执行,抱歉。