在Python中重新加载依赖模块

时间:2013-05-21 16:34:32

标签: python reload python-module

假设我有一个导入main.py的Python脚本othermodule.py。是否可以在reload(othermodule)中编写main.py,以便在我对othermodule.py进行更改时,我仍然可以reload(main),然后重新加载其他模块?

2 个答案:

答案 0 :(得分:4)

嗯,这并不是那么简单。假设你有main.py这样......

import time
import othermodule

foo = othermodule.Foo()
while 1:
    foo.foo()
    time.sleep(5)
    reload(othermodule)

......和othermodule.py这样......

class Foo(object):
    def foo(self):
        print 'foo'

...然后,如果您将othermodule.py更改为此...

class Foo(object):
    def foo(self):
        print 'bar'

... main.py仍在运行时,它会继续打印foo,而不是bar,因为foo中的main.py个实例将继续使用旧的类定义,尽管你可以通过像这样main.py来避免这种情况......

import time
import othermodule

while 1:
    foo = othermodule.Foo()
    foo.foo()
    time.sleep(5)
    reload(othermodule)

重点是,您需要了解导入模块的各种更改,这些更改会导致reload()出现问题。

可能有助于在原始问题中包含一些源代码,但在大多数情况下,重启整个脚本可能是最安全的。

答案 1 :(得分:1)

Python已经reload()还不够好?

从您的评论中,听起来好像您可能对ipython中的deep reload功能感兴趣,但我会谨慎使用它。