我最近根据Joao Ventura非常有用的两部分系列中概述的方法,使用自制安装的python3.7在Mac OS X中成功地嵌入了一个python发行版和一个应用程序,这里提供了两部分供参考(http://joaoventura.net/blog/2016/embeddable-python-osx/)和(http://joaoventura.net/blog/2016/embeddable-python-osx-from-src/)
对我来说,唯一剩下的问题是通过压缩整个标准库减去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
移回现在为空的lib/python3.7
中,以所需的结构结束:
- 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
并尝试以下操作:
选择所有文件和文件夹,并使用OSX的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环境值,这在用户的机器上可能是不可能的)
提前感谢您提供的任何帮助
经过漫长的淘汰过程,终于找到了答案
您必须保留在站点包中的唯一模块是
os.py
下面是一个bash脚本,用于整个过程,它可能有效,也可能无效。它假设您已经从python.org下载了一个python源代码发行版
然后
cd
进入结果源文件夹,并在根目录中运行此脚本这是针对mac用户的,可以很容易地适应其他平台。它没有经过很好的测试,所以如果遇到任何问题,请发布反馈
相关问题 更多 >
编程相关推荐