- 发生时间:2022-05-25
- 问题描述:打包 Python 程序时,已经使用 pip 安装所需的依赖;但使用 pyinstaller 打包后,运行二进制文件仍然报「找不到依赖」的错误。
- 问题类别:软件开发
- 原因分析:
- 安装依赖前,曾经用过 pyinstaller 进行打包,并在 pcba_tool 目录下生成 build 目录。
- 安装依赖后,pyinstaller 检查到存在 build 目录并且里面有中间结果,就不会重新编译代码,导致新安装的依赖没有被打包进去。
- 解决方案:有两种解决方案:
- 方案1:先删除 build 目录,再使用 pyinstaller 编译打包。
- 方案2:使用 pyinstaller 时添加
--clean选项,这时也会先清除临时结果再进行编译打包。
- 实施结果:采用方案 2 重新打包,打包后可以正常运行二进制文件。
- 经验总结:每次使用 pyinstaller 打包前都统一删除 build 目录,或统一添加
--clean选项,可以避免某次添加依赖后没被打包进去的问题。
关于 pyinstaller 打包后的残留文件的说明
使用 pyinstaller 打包后,会在当前目录下生成 __pycache__、build 和 dist 目录及 .spec 文件。
下面是对这些文件/目录的一些说明:
- pyinstaller 每次打包结束时会提醒是否删除
dist目录,如果你不想提醒,可以添加--noconfirm参数, 或者先手动删除该目录。 - 就这个问题而言,打包前删不删除
__pycache__目录和.spec文件没有影响,而build目录必须先删除。 - 为简便起见,可以每次打包前都统一删除这些目录或文件。