Python imp.reload()函数不起作用?

时间:2011-11-14 14:04:44

标签: python import

这是一个简洁的例子:

x.py:

class x:
  var = 'from x.py'

y.py:

class x:
  var = 'from y.py'

test.py

import imp
def write_module(filename):
  fp = open('z.py', 'w')
  fp.write(open(filename).read())
  fp.close()

write_module('x.py')
import z
print(z.x.var) # Prints 'from x.py'
write_module('y.py')
imp.reload(z)
print(z.x.var) # Prints 'from x.py'

我不确定为什么两个印刷语句都是一样的。如何让python在reload()之后使用类x的新定义?

1 个答案:

答案 0 :(得分:9)

这是因为文件创建日期(z.py及其编译对应z.pyc)是相同的,因此Python认为该文件未更改且不会重新编译它。

实际上,当我尝试并重新尝试你的代码时,它曾经按预期运行 - 可能是因为这两个文件碰巧是在系统时钟的第二次转换的任何一侧创建的。

import imp
import time
def write_module(filename):
  fp = open('z.py', 'w')
  fp.write(open(filename).read())
  fp.close()

write_module('x.py')
import z
print(z.x.var) # Prints 'from x.py'
time.sleep(1)  # Wait one second
write_module('y.py')
imp.reload(z)
print(z.x.var) # Prints 'from y.py'

显示预期结果。