我有一个可信赖的远程服务器,可存储许多自定义Python模块。我可以通过HTTP(例如使用urllib2.urlopen
)作为text / plain获取它们,但是我无法将获取的模块代码保存到本地硬盘。如何将代码作为完全可操作的Python模块导入,包括其全局变量和导入?
我想我必须使用exec
和imp
模块函数的某种组合,但我还是无法使它工作。
答案 0 :(得分:45)
看起来这应该可以解决问题: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' >>>
另外,正如ActiveState文章中所建议的那样,您可能希望将新模块添加到sys.modules
:
>>> import sys >>> sys.modules["foo"] = foo >>> from foo import Foo <class 'Foo' …> >>>
答案 1 :(得分:5)
答案 2 :(得分:0)
Python3 版本
(试图编辑其他答案,但编辑队列已满)
import imp
my_dynamic_module = imp.new_module("my_dynamic_module")
exec("""
class Foo:
pass
""", my_dynamic_module.__dict__)
Foo = my_dynamic_module.Foo
foo_object = Foo()
# register it on sys
import sys
sys.modules[my_dynamic_module.__name__] = my_dynamic_module