Here's a concise example:
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'
I'm not sure why both print statements are the same. How can I make python use the new definition of class x after reload()?
This happens because the file creation dates (of z.py and its compiled counterpart z.pyc) are identical, so Python thinks that the file is unchanged and doesn't recompile it.
Actually, when I was trying and re-trying your code, it once worked as expected - probably because the two files happened to be created on either side of the system clock's second-changeover.
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'
shows the expected result.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With