How to import a module in Python 3 from a string? -
a solution problem available python 2, uses imp
module deprecated in python 3.
imp
has been replaced importlib
works file based imports. specifically, importlib.import_module
requires file name - not string or file handler.
i made workaround dumping contents of url file , importing it
def initlog(): modulename = '_mylogging' try: import _mylogging except importerror: r = requests.get('http://(...)/mylogging.py') open(modulename+'.py', "w") f: f.write(r.text) finally: import _mylogging return _mylogging.mylogging().getlogger()
but avoid intermediate file.
putting security, network performance , availability issues aside - is there way feed string importlib
? (or file handler, in case use io.stringio
)
you can adapt exactly same answer 3.x, using the replacement imp.new_module
:
from types import moduletype foo = moduletype('foo')
and the replacement exec
statement:
foo_code = """ class foo: pass """ exec(foo_code, globals(), foo.__dict__)
after works expected:
>>> dir(foo) ['foo', '__doc__', '__loader__', '__name__', '__package__', '__spec__'] >>> foo.foo() <__main__.foo object @ 0x110546ba8>
Comments
Post a Comment