Как обезопасить модуль __init__ в Python? - PullRequest
5 голосов
/ 02 февраля 2011

Я знаю, я знаю, это грязно и все.Я хочу знать, возможно ли перехватить модуль __init__ модуля Python, чтобы заменить его своим собственным.

Я спрашиваю об этом, потому что мне нужно предотвратить запуск библиотеки django какой-либо ее части.Процесс init, приводящий к сбою в нашей конфигурации.

И да, лучше исправить библиотеку django и отправить обратно патч.Да, я связываюсь с автором по этому поводу.Но сейчас мне нужно быстрое решение.

Ответы [ 2 ]

4 голосов
/ 02 февраля 2011

Один из способов похитить процедуру импорта - это смоделировать импорт за некоторое время до того, как он произойдет, в другом модуле, который импортируется перед тем, который вы хотите обезьяньим-патчем.Вставьте все, что вы хотите, в sys.modules с именем модуля в качестве ключа, и когда придет время импортировать оригинальный модуль, Python найдет запись в sys.modules и будет просто использовать ее.Это может не сработать, если импорт выполняется каким-то волшебным способом.

С другой стороны, вы всегда можете просто скопировать оригинальный проект и исправить его по своему вкусу.

0 голосов
/ 02 февраля 2011

Вы можете просто отредактировать файл __init__.py.Ничто не останавливает вас, и если вы все сделаете правильно, ничего плохого не случится.

...