返回

详解PyInstaller静态打包,告别依赖困扰

闲谈

前言

PyInstaller是一款强大的跨平台应用程序打包工具,可以让Python程序变成一个独立可执行文件。然而,在打包过程中,常常会遇到静态依赖文件丢失的问题,导致程序无法正常运行。本教程将详细介绍两种解决方法,手把手教你打包带有静态依赖文件的Python程序。

方法一:通过命令行参数

1. 准备工作

确保已安装PyInstaller。

2. 确定依赖文件

运行以下命令,生成依赖文件列表:

pyi-makespec --include-dependencies --paths <路径> --name <可执行文件名> --out <spec文件>

3. 打包

在命令行中运行以下命令:

pyinstaller --paths <路径> --name <可执行文件名> --onefile --add-data <依赖文件1>;<依赖文件2>;<...>;> --icon <图标文件>

其中:

  • <路径>:包含程序和依赖文件的路径
  • <可执行文件名>:要生成的独立可执行文件名
  • <依赖文件1>;<依赖文件2>;<...>:通过上一步生成的依赖文件列表
  • <图标文件>:程序图标文件(可选)

方法二:通过修改spec打包配置脚本文件

1. 准备工作

创建一个名为<可执行文件名>.spec的文本文件。

2. 编写spec文件

在spec文件中添加以下内容:

a = Analysis(['<程序文件>'],
             pathex=['<路径>'],
             binaries=[('<依赖文件1>', '<依赖文件路径1>'), ('<依赖文件2>', '<依赖文件路径2>'), ...],
             datas=[('<依赖文件1>', '<依赖文件路径1>'), ('<依赖文件2>', '<依赖文件路径2>'), ...])
pyz = PYZ(a.pure)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas)

其中:

  • <程序文件>:程序的主文件
  • <路径>:包含程序和依赖文件的路径
  • <依赖文件1><依赖文件2>:要打包的依赖文件
  • <依赖文件路径1><依赖文件路径2>:依赖文件的路径

3. 打包

使用以下命令打包:

pyinstaller <可执行文件名>.spec

示例

方法一:

pyi-makespec --include-dependencies --paths C:\MyProject --name MyProgram --out MyProgram.spec
pyinstaller --paths C:\MyProject --name MyProgram --onefile --add-data C:\MyProject\lib\image.png;C:\MyProject\data\data.json --icon C:\MyProject\icon.ico

方法二:

创建MyProgram.spec文件,内容如下:

a = Analysis(['C:\MyProject\main.py'],
             pathex=['C:\MyProject'],
             binaries=[('image.png', 'C:\MyProject\lib\image.png'), ('data.json', 'C:\MyProject\data\data.json')],
             datas=[('image.png', 'C:\MyProject\lib\image.png'), ('data.json', 'C:\MyProject\data\data.json')])
pyz = PYZ(a.pure)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas)

然后使用命令打包:

pyinstaller MyProgram.spec

总结

通过本文介绍的两种方法,你可以轻松打包带有静态依赖文件的Python程序,无需再担心依赖文件丢失的问题。根据你的具体需求,选择适合自己的方法,高效完成打包任务。