使用spyder 3.2.4和python。
当我调用i函数(在另一个文件中)时,从我的主脚本调用它my_func(),它使用该函数的“旧版本”。澄清:
如果我更改my_func并保存该文件,则从我的主脚本调用该函数的新版本,但仅当我运行整个主脚本时才使用该函数。
如果我只使用my_func运行这些行(使用运行单元格或运行选定行),则会使用旧版本的my_func(在更改之前)。
我虽然my_func必须“重新导入”(来自myOtherFile import my_func),所以我也尝试运行这些行,但仍旧使用旧版本的函数(未更改)。
我是否误解了某些内容,或者这是一个非常非常严重的错误?如果我关闭spyder并重新启动它可以工作(它使用新版本的功能),但这是一个不可接受的解决方案。
答案 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月发布)中执行此操作。