Python - 导入文件的更改不生效

9
我有一个名为test_file的文件,用于测试另一个名为file的文件。'test_file'在同一目录下还包含一个.txt文件。当我更新file并保存后,选择“更改到编辑器目录...”,然后运行test_file,Enthought似乎没有意识到file已经被更新了。最初我认为每次更新file都必须选择“更改到编辑器目录”选项,所以我这样做了,但是即使在我故意编辑file以便test_file应该打印false的情况下,test_file仍然打印“success”。(是的,我确定它应该打印false,因为我添加了一堆无意义的代码到file中,甚至加入了不应该运行的代码,比如带有完全不正确缩进的return语句)。因此,实际上,Enthought Canopy没有意识到我已经更新了file

然而,如果我保存并退出所有内容,重新打开Enthought,选择“更改到编辑器目录”,然后运行test_file,它会打印正确的结果。

这非常令人沮丧,因为我在意识到这一点之前花了几天时间调试正确的代码。这让我非常担心,因为我不知道我过去测试的是否正确,而且我不希望将来发生这种情况。

这可能是什么原因?(注意:我不知道这是Enthought问题还是Python问题)

2个回答

9
没有看到代码很难说,但我怀疑使用了等同于“import file”的命令导入了file。Python会缓存导入的模块,因此不会更新file中的更改。这是Python的一个特性,与Enthought Canopy无关。
如果是这种情况,可以在test_file中导入后添加调用reload (http://bit.ly/1E97V4n),以显式强制重新加载模块来解决问题。
  import file
  reload(file)

1
同意。有关详细信息,请参阅此知识库文章:https://support.enthought.com/hc/en-us/articles/204469240-IPython-After-editing-a-module-changes-are-not-effective-without-kernel-restart - Jonathan March

4

使用Python 2.x 版本,@pberkes 的答案有效。对于其他版本的Python,您可能需要参考这个回答来自另一个SO帖子。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接