TL;DR:func_two
自从启动交互式 shell 以来,
我已经重命名了。启动一个新的 shell 让一切正常。
我学到的是:
我不了解交互式 shell 的所有内部工作原理以及调用 import 时会发生什么,但是在退出并启动新 shell 后,完全相同的 import 调用起作用了。
当我启动 shellfunc_two
时old_func_two
,我决定重命名它,然后我尝试用新名称导入它,但失败了。在挠了挠头并做了一些 google foo 之后,我没有发现任何对我的情况有帮助的东西,并尝试启动一个新的 shell 并且它起作用了!
所以我决定在问这个问题之前做更多的试验,并了解到我可以在启动 shell 后尽可能多地重命名函数,但直到我第一次以某种方式导入文件。
也就是说,一旦我调用,from common_commands import func_one
我就不能再重命名任何函数并用新名称导入它们,因为文件已经被导入。但是,我仍然可以导入old_func_two
. 我还尝试在导入后更改 func_two 的“胆量”,然后再次导入它并保持原来的行为。因此,据我所知,第一次导入文件(不是函数或类,而是整个文件)时,它会被缓存,并且所有未来的导入都在缓存版本上运行,而不是磁盘上的真实文件。
因此,即使您只导入func_one
iefrom common_commands import func_one
然后重命名或更改func_two
然后导入它,您也必须使用原始名称,func_two
并且您也将获得原始功能,即使您之前没有明确导入它。