2024-05-17 09:54:00 发布
网友
作为python的新手,我最近才发现在文件顶部放置一个__main__.py文件可以直接执行一个.zip文件。这对python代码很有用,但是我可以打包其他类型的文件并用脚本访问它们吗?如果是,怎么做?
__main__.py
我的最终目标是将一些图像文件与python代码捆绑在一个.zip文件中,然后能够在应用程序中使用这些图像,而不必将它们提取到磁盘。我还想捆绑一个版权声明、发行说明等,这样整个应用程序及其数据文件就可以在一个单独的zip文件中执行,而不必在某个地方提取。
只需按照this answer中的建议使用pkgutil.get_data()
可以使用^{}函数访问文件:
# __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包含:
. |-- app | |-- 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
至少在我的Linux机器上,进程没有打开的文件句柄或映射到它自己的zipfile的内存,所以想必没有办法“神奇地”访问它。
但是,创建自己的访问权限并不是那么困难。像这样创建一个__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()
编辑:有点简洁。完整性:
$ echo "Hello ZIP" > other.txt $ zip testo.zip __main__.py other.txt $ python testo.zip Hello ZIP
只需按照this answer中的建议使用pkgutil.get_data()
可以使用^{} 函数访问文件:
其中zipfile包含:
要使zipfile可执行,请运行:
要测试它:
至少在我的Linux机器上,进程没有打开的文件句柄或映射到它自己的zipfile的内存,所以想必没有办法“神奇地”访问它。
但是,创建自己的访问权限并不是那么困难。像这样创建一个
__main__.py
:编辑:有点简洁。完整性:
相关问题 更多 >
编程相关推荐