2014-12-02 4 views
1

для моей магистерской диссертации, я пытаюсь использовать природу Python в качестве языка сценариев, чтобы разрешить изменения времени исполнения исходного кода. Сам исходный код моделируется с использованием специального пользовательского интерфейса и генерируется при сохранении. При запуске сгенерированный код отправляется в движок и импортируется. Этот процесс работает нормально до тех пор, пока исходный код не изменится без перезапуска двигателя между двумя запусками (но перезапуск не является вариантом).Изменения кода времени выполнения Python 2.7

Проблема в том, что двигатель по-прежнему содержит ссылку на старый исходный код, даже если файл был изменен.

Я потратил немало времени на поиск решений и нашел reload() как один из вариантов (ref). К сожалению, это почему-то не работает. Вот текущая версия соответствующей части (выполняется каждый раз изменения исходного кода будут получены):

package = __import__("tmp", fromlist=["tmp"]) 
reload(package) # this seems to have no effect 
clsmembers = inspect.getmembers(package, lambda member: inspect.isclass(member) and member.__module__ == package.__name__) 
beclass = clsmembers[0][1] 
be = beclass() 

Я работаю с Python 2.7 (у меня есть, я знаю, более поздние версии Python обеспечивают лучшую поддержку для этой функции). Это не должно быть reload(), мне просто нужно каким-либо образом повторно импортировать изменения кода.

Любая помощь приветствуется! :)

ответ

2

Я, наконец, решил проблему самостоятельно. Хотя я несколько раз читал, что нет возможности удалить импортированные модули, следующее решение кажется очень простым и каким-то очевидным.

После выполнения кода, я удалить ссылку на импорт с помощью:

del(sys.modules["tmp"]) 

Это гарантирует, что у меня есть чистый сброс для моего следующего выполнения и может импортировать файл исходного кода, как если бы это был первый раз, когда я сделай это.

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