【问题标题】:is there a way to import a Python egg from memory, but not the disk?有没有办法从内存中导入 Python 鸡蛋,而不是磁盘?
【发布时间】:2012-01-19 18:31:57
【问题描述】:

假设我有一个包含 Python 鸡蛋的二进制字符串,全部压缩。有没有办法从内存中执行和“导入”那个鸡蛋,而无需将它写入磁盘?

【问题讨论】:

标签: python


【解决方案1】:

eggs 只是另一个名称的 zip 文件,因此它们是使用 zipimport.zipimporter 导入的,(不幸的是)这是一个用 C 编写的模块。

我认为您的选择是:

  1. 重写修改后的 zipimporter 以接受 file 类似对象 而不是文件名
  2. 在 Python 中重新实现 zipimporter,然后 修改以接受file-like 对象
  3. 或将临时文件写入 磁盘,导入该文件,然后删除该文件。

最后一个可能是最简单的。

【讨论】:

  • 不幸的是,写信给办公桌不是一种选择。我认为重新实现它可能是一种选择。
【解决方案2】:

前段时间,我查看了 pypiserver,可能与您需要的类似: http://pypi.python.org/pypi/pypiserver/0.5.0

独立版本 https://raw.github.com/schmir/pypiserver/standalone/pypi-server-standalone.py

用 DictImporter 和 zlib 库做了一些有趣的魔法,也许你可以做类似的事情..

【讨论】:

    【解决方案3】:

    看看imp模块:http://docs.python.org/library/imp.html

    你可能对字节编译模块或动态形成的模块有一些运气。

    这个食谱也可能有帮助(我猜不是这样):

    http://code.activestate.com/recipes/82234-importing-a-dynamically-generated-module/

    如前所述,在对后者的评论中,仅适用于单个模块。

    这个问题和前段时间问的类似:Python, import string of Python code as module

    【讨论】:

      【解决方案4】:

      我不熟悉 Python Egg,但尝试使用 StringIO 对象。因为 Python 使用了duck typing,所以如果你不对它调用任何文件特定的方法,你可以把它当作一个文件来对待。

      【讨论】:

        猜你喜欢
        • 2018-06-03
        • 2013-05-22
        • 2017-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-12
        • 1970-01-01
        相关资源
        最近更新 更多