16 lines
No EOL
636 B
Python
16 lines
No EOL
636 B
Python
import sys, types
|
|
def add_fakeimport(name: str, code: str):
|
|
module = types.ModuleType(name)
|
|
parent = '.'.join(name.split('.')[:-1]) if '.'.join(name.split('.')[:-1]) else name
|
|
if not parent == name and parent not in sys.modules:
|
|
sys.modules[parent] = types.ModuleType(parent)
|
|
globals = {'__package__': parent}
|
|
print(globals)
|
|
module.__dict__.update(globals)
|
|
exec(code, module.__dict__)
|
|
sys.modules[name] = module
|
|
|
|
add_fakeimport('abcxyzaa.b', 'print("hi"); a = lambda: print("hi")')
|
|
add_fakeimport('abcxyzaa', 'from . import b; print("hi"); a = lambda: print("hi")')
|
|
import abcxyzaa as aa
|
|
aa.b.a() |