python嵌入式打包,解决大型库打包难题
发布网友
发布时间:2024-09-30 13:47
我来回答
共1个回答
热心网友
时间:2024-10-24 11:47
在使用python项目涉及大型第三方库如torch后,项目体积可能超过1GB,导致使用nuitka或pyinstaller打包面临打包成功率低、耗时长、打包后体积大等问题。本文探讨使用嵌入式打包来解决这一难题。
解决思路在于只打包解释器和项目核心代码,第三方依赖由用户在首次使用程序时现场安装。实现这一方案的示例代码如下:
示例代码的项目构造
main.py
app文件夹,放置自定义代码的文件
start_main.py项目文件
运行效果与打包准备
准备项目依赖文件requirements.txt,激活项目环境,使用命令导出依赖文件。
下载嵌入式解释器与pystand壳,从官网及github获取。
准备get-pip.py脚本,用于下载pip工具。
开始打包
复制项目代码至pystand同级目录下的app文件夹,覆盖pystand.int文件内容。
创建download.py脚本,用于提示用户安装依赖、运行pip工具安装环境依赖,并提醒用户重启程序。
修改pystand.int文件,捕获MoleNotFoundError错误,调用python解释器运行download.py脚本。
将requirements.txt文件放置在runtime文件夹。
修改runtime文件夹中的._pth文件,取消import site前的注释。
删除pystand同级目录的sitepackages文件夹。
测试与额外讲解
测试包含如下步骤:
双击运行pystand,程序提示缺少依赖,执行下载脚本。
安装完成后,提示用户重启程序。
重启程序,首次启动较慢(包含第三方库py转pyc的过程),后续启动正常。
这种方式利用pip工具,使得程序分发体积仅11MB,避免了Python程序打包体积过大问题,同时避免了传统打包方式可能遗漏依赖的问题。适合大型库如torch、yolov、OCR等的项目。无需用户电脑上已有Python环境,第三方库安装在runtime\Lib\site-packages文件夹下,确保._pth文件取消注释以避免no mole name pip错误。打包方式一次成功后,可多次复用,不同项目只需替换依赖文件、代码及runtime文件夹内容。
torch库的特殊打包
若项目依赖了torch库的GPU版,需将依赖文件拆分为包含torch、torchaudio、torchvision三个库的一份和包含其他依赖库的一份。download.py脚本需先安装torch库。