作为python的新手,我最近才发现通过将__main__.py文件放在文件顶部直接执行.zip文件的能力.这适用于python代码,但是我可以捆绑其他类型的文件并使用我的脚本访问它们吗?如果是这样,怎么样?
我的最终目标是将一些图像文件与python代码捆绑在一个.zip文件中,然后能够在应用程序中使用这些图像而无需将它们提取到磁盘.我还想捆绑版权声明,发行说明等,以便整个应用程序及其数据文件都在单个zip中,可以执行而无需在某处提取.
jfs*_*jfs 17
您可以使用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()
Run Code Online (Sandbox Code Playgroud)
zipfile包含的位置:
. |-- app | |-- im.png | `-- __init__.py |-- README.txt `-- __main__.py
要使zipfile可执行,请运行:
$ echo '#!/usr/bin/env python' | cat - zipfile > program-name
$ chmod +x program-name
Run Code Online (Sandbox Code Playgroud)
测试它:
$ cp program-name /another-dir/
$ cd /another-dir && ./program-name
Run Code Online (Sandbox Code Playgroud)
至少在我的Linux机器上,进程没有打开文件句柄或映射内存到它自己的zip文件,因此可能没有办法"神奇地"访问它.
但是,创建自己的访问权并不难.__main__.py像这样创建:
import os, zipfile
me = zipfile.ZipFile(os.path.dirname(__file__), 'r')
f = me.open('other.txt')
print f.read()
f.close()
me.close()
Run Code Online (Sandbox Code Playgroud)
编辑:有点简洁,那.为了完整性:
$ echo "Hello ZIP" > other.txt
$ zip testo.zip __main__.py other.txt
$ python testo.zip
Hello ZIP
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8435 次 |
| 最近记录: |