Есть ли способ заставить import x
всегда перезагружать x
в Python (то есть, как если бы я назвал reload(x)
или imp.reload(x)
для Python 3)? Или, вообще, есть ли способ заставить некоторый код запускать каждый раз, когда я запускаю import x
? Я в порядке с патчем обезьяны или хакером.Python: заставить каждый импорт перезагрузить
Я попытался переместить код в отдельный модуль и удалить x
из sys.modules
в этом отдельном файле. Я немного потрудился с крючками импорта, но я не слишком старался, потому что, согласно документации, они вызываются только после проверки кеша sys.modules. Я также пробовал monkeypatching sys.modules
с пользовательским подклассом dict, но всякий раз, когда я это делаю, from module import submodule
поднимает KeyError
(я угадываю sys.modules
- не настоящий словарь).
В принципе, я пытаюсь написать инструмент отладки (вот почему некоторые хакеры здесь ОК). Моя цель заключается в том, что import x
короче, чем import x;x.y
.
Если вы действительно хотите изменить семантику оператора 'import', вам придется исправить интерпретатор. 'import' проверяет, загружен ли именованный модуль, и если это так, то он ничего не делает. Вы должны были бы изменить именно это, и это сложно сделать в интерпретаторе. Возможно, вы можете жить с исправлением источников Python, чтобы использовать 'myImport ('modulename')' вместо 'import modulename'? Это сделало бы возможным сам Python. – Alfe
@Alfe: Я думаю, что этот комментарий заслуживает того, чтобы быть отправленным как ответ вместо этого. – jsbueno
Выполнено, и спасибо за поддержку :) – Alfe