如何导入模块(或先前导入时重新加载)

时间:2015-04-10 15:43:41

标签: python import module python-3.4

我有一个模块my_module.py,其中包含:

var = 9

动态导入和修改此模块:

import importlib

def f(name):
    mod = importlib.import_module(name)
    importlib.reload(mod)
    return mod

print(f(name='my_module').var)  # Prints 9

# Changes var to 912
with open('my_module.py', 'a+') as opened:
    opened.write('12')

print(f(name='my_module').var)  # Prints 912

我的f()函数在确保重新加载后返回一个模块对象。

它有效,但我想知道是否有更好的方法来确保始终重新加载返回的模块对象。

1 个答案:

答案 0 :(得分:2)

您可以在通过hashlib重新加载之前对文件进行计算和验证,或者只是在lib发生更改时使用modify-date作为指示符。 或者,您可以在修改后发送信号,信号处理程序执行实际重新加载。 后者可能是最有效的,因为如果更改了lib,它实际上只是重新加载。它甚至可以与哈希结合使用,以确保它实际上已被修改。