Я пытаюсь создать модуль Python, который при импорте ведет себя точно так же, как другой модуль.
python>
import foo
import fake_foo
help(foo) == help(fake_foo)
Мне это нужно, потому что мне нужно добавить дополнительный код вредоносного кода внутри моего fake_foo
модуля, который динамически загружает реальный модуль из другого места.
В случае, если было неясно, приведенный ниже код не работает не по очевидным причинам: load_source возвращает модуль, но не может сказать python загрузить его в текущий модуль.
# fake_foo/__init__.py
import imp
imp.load_source('foo', '/path/to/foo')
Одним очень важным требованием является то, что я не могу контролировать, как люди импортируют fake_foo
, я не могу изменить код, выполняющий импорт, мне нужно сделать всю реализацию внутри модуля fake.
PS. Мне понадобится код, который будет работать с py27, py35 +, что высока вероятность
это потребовало бы другой логики, но как только я настрою ее на одну версию, не составит труда найти аналогичные способы для других версий.