如何访问Python egg文件内部的文件?

24

这可能是一个奇怪的要求,但这是我遇到的情况。我尝试了谷歌搜索但没有收获。

我正在编写一个应用程序,它使用记录在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()

有什么想法吗?


如果您仍然遇到此问题,请查看我的答案:https://dev59.com/AWcs5IYBdhLWcg3wk0-X#13126365 - Alan Franzoni
6个回答

21

egg 文件是 zip 文件,因此你必须使用 Python 标准库中的 zipfile 模块来访问其中的 "stuff",而不是使用内置的 open 函数!


我阅读了zipfile模块的文档,它确实可以完成这个任务。谢谢~ - Ripley
你甚至可以使用 "sudo easy_install your_eggfile" 命令来安装它们。 - shahjapan

11
如果您想访问.egg文件中的内容,只需将其重命名并将扩展名从.egg更改为.zip,然后解压缩它即可。这将创建一个文件夹,其中包含的内容与.egg文件相同。
例如,brewer2mpl-1.4.1-py3.6.egg重命名为brewer2mpl-1.4.1-py3.6.zip
现在,如果我们打开它,它将轻松解压缩,并在同一目录中以相同名称的文件夹中放置内容。(在macOS Sierra上测试过)

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

1
只需运行 unzip file.egg
您可以在Debian/Ubuntu上使用以下命令安装unzip

sudo apt install unzip

或者在 macOS 上通过 安装 Homebrew 然后。
brew install unzip

0

从egg文件内部访问文件

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

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

mps-1.2.0_M2-py2.6.egg image

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)

从egg文件中读取xml文件:

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


0

我认为在Python中,默认情况下,蛋包文件不会将你的XML文件添加到包中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接