在file1.py中:
def foo():
import file2
print "I'm the old file1.py"
file2.bar()
if __name__ == '__main__':
foo()
在file2.py
中print "I'm the old file2.py"
def bar():
print "I'm in the old file2.bar()"
在下面的交互式会话的第5行,在修改file1.py和file2.py后,将old
字的所有三次出现更改为new
,new
代码file2.py仍未使用。
wim@wim-ubuntu:~/sandpit$ ipython
>>> run file1.py
I'm the old file2.py
I'm the old file1.py
I'm in the old file2.bar()
>>> !rm file2.pyc
>>> # modify file1, file2
>>> run file1.py
I'm the new file1.py
I'm in the old file2.bar()
从哪里获取来自file2.py的旧代码?
我必须误解一些事情,因为我想(来自run
的ipython帮助):
该文件在最初仅包含的命名空间中执行 如所示构建
__name__ == '__main__'
和sys.argv
。因此 将其环境视为独立程序运行
我删除了.pyc文件,可以从命令whos
看到命名空间中没有file2模块。但是为什么第二次运行file1时导入不再执行?
答案 0 :(得分:3)
run
不会启动新的Python进程,而是执行当前的代码 - 而不是当前的命名空间,但在当前的Python进程中,文档中的注释说明了这一点。因此,sys.modules
仍然存在,并使用旧的缓存模块。 (你熟悉Python通常导入模块的方式吗?)
要解决此问题,请每次都在新的Python进程中运行。 reload
不仅仅是一个小问题,而且可能导致我认为不值得的头痛。