Python spyder:更改另一个文件中的函数不起作用

时间:2017-12-06 12:02:14

标签: python spyder

使用spyder 3.2.4和python。

当我调用i函数(在另一个文件中)时,从我的主脚本调用它my_func(),它使用该函数的“旧版本”。澄清:

如果我更改my_func并保存该文件,则从我的主脚本调用该函数的新版本,但仅当我运行整个主脚本时才使用该函数。

如果我只使用my_func运行这些行(使用运行单元格或运行选定行),则会使用旧版本的my_func(在更改之前)。

我虽然my_func必须“重新导入”(来自myOtherFile import my_func),所以我也尝试运行这些行,但仍旧使用旧版本的函数(未更改)。

我是否误解了某些内容,或者这是一个非常非常严重的错误?如果我关闭spyder并重新启动它可以工作(它使用新版本的功能),但这是一个不可接受的解决方案。

2 个答案:

答案 0 :(得分:1)

此行为与(I)Python解释器处理导入的方式有关。

您可以在此处找到详细解释(可能的解决方案):https://support.enthought.com/hc/en-us/articles/204469240-Jupyter-IPython-After-editing-a-module-changes-are-not-effective-without-kernel-restart

简短回答:
- 重新启动内核
- 或使用importlib.reload(https://docs.python.org/3/library/importlib.html#importlib.reload
- 或使用IPython的自动加载扩展(http://ipython.readthedocs.io/en/stable/config/extensions/autoreload.html

答案 1 :(得分:1)

Spyder维护者在这里)这不是一个错误,它是Python的工作方式。但是,通过使我们的IPython控制台加载%autoreload IPython魔法可以改善正常行为。通过该更改,在保存文件后,您将立即将其上的代码重新加载到您的控制台中。

我们将在 3.2.5 版本(将于2017年12月发布)中执行此操作。