动态导入Python模块

dpq*_*dpq 27 python dynamic-import

我有一个可信的远程服务器,存储许多自定义Python模块.我可以通过HTTP(例如使用urllib2.urlopen)作为text/plain 获取它们,但是我无法将获取的模块代码保存到本地硬盘.如何将代码作为完全可操作的Python模块导入,包括其全局变量和导入?
我想我必须使用某些组合execimp模块的功能,但我还是无法让它工作.

Dav*_*ver 45

看起来这应该可以解决问题:导入动态生成的模块

>>> 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' …>
>>>

  • @DavidWolever 从 Python 3.4 开始,似乎不推荐使用 `imp.new_module`([ref](https://docs.python.org/3.6/library/imp.html#imp.new_module))。改用 [`importlib.util.module_from_spec`](https://docs.python.org/3.6/library/importlib.html#importlib.util.module_from_spec)。 (3认同)

ars*_*ars 5

这是我在一段时间后书签的东西,涵盖类似的内容:

它有点超出你想要的,但基本的想法就在那里.