Dynamically importing Python module
I have a trusted remote server that stores many custom Python modules. I can fetch them via HTTP (e.g. using urllib2.urlopen
) as text/plain, but I cannot save the fetched module code to the local hard disk. How can I import the code as a fully operable Python module, including its global variables and imports?
I suppose I have to use some combination of exec
and imp
module's functions, but I've been unable to make it work yet.
Solution 1:
It looks like this should do the trick: importing a dynamically generated module
>>> import imp >>> foo = imp.new_module("foo") >>> foo_code = """ ... class Foo: ... pass ... """ >>> exec foo_code in foo.__dict__ >>> foo.Foo.__module__ 'foo' >>>
Also, as suggested in the ActiveState article, you might want to add your new module to sys.modules
:
>>> import sys >>> sys.modules["foo"] = foo >>> from foo import Foo <class 'Foo' …> >>>
Solution 2:
Here's something I bookmarked a while back that covers something similar:
- Customizing the Python Import System
It's a bit beyond what you want, but the basic idea is there.