如何从Python源码发行包构建如Python38.zip的标准库压缩包?
自行编译Python生成标准库压缩包(pythonXX.zip)的方法
这个压缩包是预编译字节码格式的标准库集合,用于减少发行版的文件数量、小幅提升模块加载速度,官方默认的Windows、Linux构建流程都不会自动生成,也没有对应的configure内置参数,需要编译完成后手动操作生成,具体步骤如下:
Linux平台操作步骤
- 先按照常规流程完成编译:执行
configure、make,确保编译出的Python二进制可以正常运行 - 编译所有标准库的pyc文件,执行命令:
./python -m compileall -b Lib/
其中-b参数会直接在.py文件同级生成.pyc文件,而非存入__pycache__子目录,适配压缩包的加载规则 - 执行打包命令,以Python3.8为例命名为
python38.zip:
如果需要保留源码也可以在命令末尾追加./python -m zipfile -c python38.zip Lib/*.pyc Lib/**/*.pycLib/*.py Lib/**/*.py,不过会增大压缩包体积 - 将生成的压缩包移动到Python二进制同目录,或者对应版本的
lib目录下,Python启动时会自动识别加载 - 如需嵌入make流程,可在生成的Makefile末尾追加自定义目标:
后续直接执行zipstdlib: ./$(BUILDPYTHON) -m compileall -b Lib/ ./$(BUILDPYTHON) -m zipfile -c python$(PY_MAJOR_VERSION)$(PY_MINOR_VERSION).zip Lib/*.pyc Lib/**/*.pycmake zipstdlib即可自动生成压缩包。
Windows平台操作步骤
- 按照官方文档完成Visual Studio编译,得到可正常运行的
python.exe - 打开命令行进入编译输出目录,执行命令编译所有标准库pyc:
python.exe -m compileall -b ..\Lib - 执行打包命令生成压缩包:
python.exe -m zipfile -c python38.zip ..\Lib\*.pyc ..\Lib\**\*.pyc - 将生成的压缩包移动到
python.exe同目录即可生效。
注意:如果需要调整加载优先级,可以手动将压缩包的绝对路径添加到
sys.path的靠前位置,默认情况下Python会自动扫描同目录下符合python[主版本号][次版本号].zip命名规则的压缩包作为标准库来源。
内容的提问来源于stack exchange,提问作者Jiminion
相关产品推荐
相关产品推荐

