Подтвердить что ты не робот

Функция python imp.reload() не работает?

Вот краткий пример:

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 использовать новое определение класса x после reload()?

4b9b3361

Ответ 1

Это происходит потому, что даты создания файла (из 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'

показывает ожидаемый результат.