修改文件后,旧代码仍在ipython中执行

时间:2011-09-14 15:02:04

标签: python import module namespaces ipython

在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字的所有三次出现更改为newnew代码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时导入不再执行?

1 个答案:

答案 0 :(得分:3)

run不会启动新的Python进程,而是执行当前的代码 - 而不是当前的命名空间,但在当前的Python进程中,文档中的注释说明了这一点。因此,sys.modules仍然存在,并使用旧的缓存模块。 (你熟悉Python通常导入模块的方式吗?)

要解决此问题,请每次都在新的Python进程中运行。 reload不仅仅是一个小问题,而且可能导致我认为不值得的头痛。