环境准备

新建一个conda env,里面只包含项目必须的库,不要安装多余的库。
随后,使用pip install pyinstaller安装pyinstaller

项目结构

假设项目结构如下:

myproject
|
│ main.py
│ requirements.txt
| apple.ico
|
├─resources
│    0.jpg
│    1.png
│    2.jpg
│    3.png

main.py中包含以下内容:

with open(".\resources\1.png","r") as img_file:

也就是说最后生成的可执行文件要和resources在同一个目录下

打包文件的编写

在项目中新建文件夹,并在里面增加一个bat,Linux系统则是sh脚本,目录结构变成如下情况:

myproject
|
│  main.py
│  requirements.txt
|  apple.ico
|
├─resources
│    0.jpg
│    1.png
│    2.jpg
│    3.png
└─打包
     打包.bat(打包.sh)

Windows系统

编辑bat脚本,写入如下内容:

call conda activate conda_env
Pyinstaller -F -w -i apple.ico -n AppName ..\main.py
copy .\dist\AppName.exe ..\ExeName.exe

Linux系统

编辑sh脚本,写入如下内容:

#!/bin/bash
# 查找 conda 的路径
path=$(whereis activate)
path=${path#*:}
# 去除路径中的空格
path=$(echo $path | tr -d ' ')
# 检查 conda 是否存在
if [[ -z $path ]]; then
  echo "未找到conda activate,请确保已安装并设置了正确的环境变量。"
  exit 1
fi
source $path conda_env
pyinstaller -F -i apple.ico -n AppName ../main.py
ln -r ./dist/AppName ../ExeName

pyinstall参数说明

参数 说明
-F 生成一个可执行文件
-D 生成一个目录(包含多个文件)作为可执行文件
-w 运行exe时,不显示命令行窗口(仅对Windows有效)
-i 该参数后跟可执行文件的icon图标路径

不想更换图标的话,去掉-i和后面的图标名就行
-F-D互斥,一般选择-F
-w的选取则看具体情况

自选变量说明

conda_env是当前项目所用的conda env的名字,需要和环境准备章节保持一致
ExeName可自由选取,它是最终生成的exe的名字
AppName的选取没有硬性要求,这里推荐和ExeName保持一致
文件夹打包打包.bat打包.sh这些名称也可任意选择

运行结果

双击运行打包.bat打包.sh,项目结构变为下图所示:

myproject
|
│  main.py
│  requirements.txt
|  apple.ico
|  ExeName.exe(ExeName)
|
├─resources
│    0.jpg
│    1.png
│    2.jpg
│    3.png
└─打包
    │  AppName.spec
    │  打包.bat(打包.sh)
    │  
    │
    ├─build
    │    ...
    │
    └─dist
        AppName.exe(APPName)

此时得到的ExeName.exe即为可执行文件,Linux系统下则是ExeName
拷贝可执行文件时,必须连同resources文件夹一起拷贝