2014-09-06 1 views
0

У меня есть приложение python, которое может динамически импортировать внешние модули. В принципе, в какой-то момент я запускаю этот код:Динамическое восстановление компиляции datetime модуля 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

Нет таких метаданных, хранящихся в импортированном модуле, нет.

Чтобы предотвратить 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: 
    # ... 

и советоваться, что значение; при перезагрузке дополнительный глобальный будет сохранен.

Смежные вопросы