python:可执行zip文件可以包含数据文件吗?


问题内容

作为python的新手,我最近才发现可以通过将__main__.py文件放在文件顶部来直接执行.zip文件的功能。这对于python代码非常有用,但是我可以捆绑其他类型的文件并通过脚本访问它们吗?如果是这样,怎么办?

我的最终目标是将一些图像文件和python代码一起捆绑在一个.zip文件中,然后能够在应用程序内使用这些图像,而不必将其提取到磁盘中。我还希望捆绑版权声明,发行说明等,以便整个应用程序及其数据文件位于一个单独的zip中,无需将其提取到任何地方即可执行。


问题答案:

您可以使用pkg_resources函数来访问文件:

# __main__.py
import pkg_resources
from PIL import Image

print pkg_resources.resource_string(__name__, 'README.txt')

im = Image.open(pkg_resources.resource_stream('app', 'im.png'))
im.rotate(45).show()

zipfile包含:

。
|-应用
| |-im.png
| `-__init__.py
|-README.txt
`-__main__.py

要使zipfile可执行,请运行:

$ echo '#!/usr/bin/env python' | cat - zipfile > program-name
$ chmod +x program-name

要测试它:

$ cp program-name /another-dir/
$ cd /another-dir && ./program-name