假设我有一个导入othermodule.py
的Python脚本main.py
。是否可以在main.py
中编写reload(othermodule)
,以便当我对othermodule.py
进行更改时,仍然可以只使用reload(main)
,这将重新加载othermodule
?
假设我有一个导入othermodule.py
的Python脚本main.py
。是否可以在main.py
中编写reload(othermodule)
,以便当我对othermodule.py
进行更改时,仍然可以只使用reload(main)
,这将重新加载othermodule
?
好的,事情并不是那么简单。假设你有一个像下面这样的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
,因为 main.py
中的 foo
实例将继续使用旧的类定义,但你可以通过将 main.py
设计成这样来避免这种情况...
import time
import othermodule
while 1:
foo = othermodule.Foo()
foo.foo()
time.sleep(5)
reload(othermodule)
reload()
)时引起问题。最好在原始问题中包含一些源代码,但在大多数情况下,最安全的做法可能是重启整个脚本。reload(othermodule)
。所以如果我在解释器中更改了othermodule.py并重新加载了main
,它是否也会重新加载othermodule
并提交更改? - rottentomato56main.py
的内容。假设前两行是 import othermodule
和 reload(othermodule)
,那么 reload(main)
应该可以工作,但根据实际代码可能会有复杂情况。 - Ayasubprocess
并通过stdin / stdout通信启动Python脚本做得更好呢? - user3064538你是否觉得Python已经有了reload()
,这不够好吗?
从你的评论来看,似乎你对ipython
中的deep reload函数很感兴趣,但我建议使用时要谨慎。
reload
并不是简单地在sys.modules
中“销毁”模块对象,然后重新导入它。如果该模块导入了其他模块,则不会重新导入第二个模块,因为它已经存在于sys.module
中。 - Bakuriu
reload(main)
(正如@Bakuriu所说不是一个好主意),这并不会默认执行reload(othermodule)
。您在这里想要实现什么?自动重新加载任何已更改的模块吗? - Aya