【发布时间】:2020-10-04 00:20:44
【问题描述】:
我最近根据 Joao Ventura 非常有用的两部分系列中概述的方法,使用安装了 python3.7 的自制软件在 Mac OS X 中成功嵌入了一个带有应用程序的 python 发行版,此处提供以供参考 (http://joaoventura.net/blog/2016/embeddable-python-osx/) 和 (@ 987654322@).
对我来说唯一剩下的问题是通过 zip 压缩整个标准库减去 lib-dynload、config-3.7m-darwin 和 site-packages 来减少应用程序中 python 分布大小的大小。
我的目录结构如下:
- python3.7/
- include/
- lib/
- python3.7/
- libpython3.7.dylib
- python3.7 <executable>
基本的初始步骤是将lib-dynload 和config-3.7m-darwin 从lib/python3.7 移动,以便我可以将sodlib 源文件压缩到lib/python37.zip,然后将lib-dynload 和config-3.7m-darwin 移回现在为空的@ 987654334@ 最终得到所需的结构:
- python3.7/
- include/
- lib/
- python3.7/
- lib-dynload/
- config-3.7m-darwin
- python37.zip
- libpython3.7.dylib
- python3.7 <executable>
为了测试它是否有效,我会从可执行文件中检查sys.path,并尝试导入一个模块并检查其__file__ 属性以查看它是否来自zip 存档。
在此基础上,我会将cd 转换为lib/python3.7 并尝试以下操作:
-
选择所有文件和文件夹并使用 OS X 的 Finder 的
compress压缩以生成python37.zip -
使用python
zipfile模块:
python -m zipfile -c python37.zip lib/python3.7/*
cd lib/python3.7
zip -r9 ../python37.zip *
在所有情况下,我都是通过将 PYTHONPATH 设置为压缩库来使其工作的,如下所示:
PYTHONPATH=lib/python37.zip ./python3.7`
这样做,我能够成功地从 zip 存档导入并验证模块来自 zip 存档。但是没有设置PYTHONPATH,就不行了。
因此,我非常感谢一些帮助,以建立正确和最直接的压缩标准库的方法,以便从 sys.path 自动识别它(无需任何额外步骤,例如指定 PYTHONPATH 环境值,这可能在用户的机器上是不可能的)。
提前感谢您提供的任何帮助。
S
【问题讨论】: