动态重新获取python模块的编译日期时间

时间:2014-09-06 16:13:20

标签: python python-3.x python-3.3 python-import

我有一个可以动态导入外部模块的python应用程序。基本上,在某个时刻我运行此代码:

dynamic_imported_modules[app_module_name]=__import__ (app_module_name) 

由于这些是webapps,用户可以修改模块的源代码并尝试重新加载它。 如果模块有错误,重新加载它可能没有成功,在这种情况下,Python采用它的最后一个版本。所以我有类似的东西:

try:
    dynamic_imported_modules[app_module_name]=imp.reload(app_module_name) 
except:
    ...

是否可以自动知道何时成功导入模块?

我想知道是否存在这种财产:

print ('last imported time',dynamic_imported_modules[app_module_name].__compile_date_time__)

谢谢!

1 个答案:

答案 0 :(得分:1)

导入的模块没有存储此类元数据,编号

要防止Python 重新使用已导入的模块失败,请先从sys.modules将其删除:

existing = sys.modules.pop(app_module_name, None)

try:
    dynamic_imported_modules[app_module_name] = importlib.import_module(app_module_name) 
except Exception:
    if existing is None:
        # we had successfully imported this before.

或者,自己添加日期:

try:
    dynamic_imported_modules[app_module_name] = imp.reload(app_module_name)
    dynamic_imported_modules[app_module_name].__imported__ = datetime.datetime.now()
except Exception:
    # ...

并咨询该价值;在重新加载时,将保留额外的全局。