【问题标题】:How to access files inside a Python egg file?如何访问 Python egg 文件中的文件?
【发布时间】:2011-04-08 23:51:43
【问题描述】:

这可能是一个奇怪的要求,但这是我遇到的。我用谷歌搜索但没有任何结果。

我正在编写一个应用程序,该应用程序使用记录在 XML 文件中的大量常量属性/值(它们不会更改,因此是静态文件),在我为它生成一个 egg 文件之前一切正常。

当逻辑到达 XML 访问部分时,我收到了这样的抱怨: /home/Workspace/my_proj/dist/mps-1.2.0_M2-py2.6.egg/mps/par/client/syntax/syntax.xml

其实我已经在上面的路径中捆绑了 XML 文件,但似乎 Python 不知道如何访问它。

访问 XML 的代码如下...

file_handler = open(path_to_the_file)
lines = file_handler.read().splitlines()

有什么想法吗?

【问题讨论】:

标签: python egg


【解决方案1】:

只需运行unzip file.egg


你可以在 Debian/Ubuntu 上安装unzip

sudo apt install unzip

或者在 macOS 上 installing Homebrew 然后

brew install unzip

【讨论】:

    【解决方案2】:

    *nix 系统上的less 命令可以查看 zip 文件内部。因此less some.egg 也会列出.egg 文件的内容。

    【讨论】:

      【解决方案3】:

      我认为默认情况下python下的鸡蛋打包文件不会将你的xml添加到包中

      【讨论】:

        【解决方案4】:

        从 egg 文件中访问文件

        是的,可以从egg文件中读取文件。

        Egg 文件:mps-1.2.0_M2-py2.6.egg 模块级示例结构:

        driverfile.py:

        import xml.etree.ElementTree
        import mps.par.client as syntaxpath
        import os
        path = os.path.dirname(syntaxpath.__file__)
        element = xml.etree.ElementTree.parse(path+'\\syntax\\syntax.xml').getroot()
        print(element)
        

        从 eggfile 中读取 xml 文件:

        PYTHONPATH=mps-1.2.0_M2-py2.6.egg python driverfile.py

        【讨论】:

          【解决方案5】:

          如果您想访问 .egg 文件中的内容,您只需将其重命名并将扩展名从 .egg 更改为 .zip,然后解压缩即可。 这将创建一个文件夹,内容将与 .egg 文件时相同

          例如 brewer2mpl-1.4.1-py3.6.egg
          重命名后 brewer2mpl-1.4.1-py3.6.zip

          现在,如果我们打开它,它会很容易解压缩,并且内容将放在同一目录下的同名文件夹中。 (在 macOS Sierra 上测试)

          【讨论】:

            【解决方案6】:

            egg 文件是 zip 文件,因此您必须使用 Python 标准库的 zipfile 模块访问其中的“东西”,不能使用内置的 open 函数!

            【讨论】:

            • 我阅读了 zipfile 模块的文档,当然它可以完成这项工作。谢谢~
            • 您甚至可以使用 sudo easy_install your_eggfile 安装它们
            猜你喜欢
            • 2012-09-25
            • 2018-09-21
            • 2011-12-29
            • 1970-01-01
            • 2011-03-05
            • 2011-05-17
            • 2018-07-26
            • 2011-04-13
            • 2010-10-25
            相关资源
            最近更新 更多