代码之家  ›  专栏  ›  技术社区  ›  dpq

动态导入python模块

  •  27
  • dpq  · 技术社区  · 15 年前

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

    2 回复  |  直到 12 年前
        1
  •  45
  •   David Wolever    12 年前

    看起来应该这样做: 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' …>
    >>>
    
        2
  •  5
  •   Lesmana    13 年前

    这是我前一段时间预订的内容,内容类似:

    这有点超出你想要的范围,但基本的想法就在那里。