3. python打包技巧(5年总结不踩坑)

120 阅读3分钟

一、思路

1、创建虚拟环境

2、安装库

3、执行开始打包命令

二、完整代码示例

# 1. 打开cmd

# 2. 进入目标目录
cd /d D:\Code\My_project\b_工具测试\打包\打包文件夹

# 3. 若无虚拟环境,建一个,有就跳过
python312 -m venv venv

# 4. 进入虚拟环境
venv\Scripts\activate

# 5. 安装需要的库(比较少的库可以直接按命名安装,下面这行是举例,按自己需要的写)
pip install pandas sqlalchemy pymysql mysqlclient openpyxl pyinstaller ttkbootstrap

# 如果有requirements.txt,可以直接命令安装,没有就跳过
pip install -r requirements.txt


# 6. 尝试运行主程序(注意,这里已经是在虚拟目录里,要转到你的主程序目录下运行你的程序名称,这里比如是main.py)
python main.py

# 如果在运行发现提示缺少需要的库,就直接缺什么补什么,假设这里是缺少drissiopage,我指定了
pip install drissionpage

# 7. 测试到虚拟环境能正常运行为止

# 8.执行打包命令(含义见下方,下面这行是举例,按自己需要的调)
pyinstaller -w main.py --distpath dabao_v0.1 --upx-dir D:\Code\My_project\打包\upx

三、关于上面第8点打包的相关命令含义

-F 是打包为一个文件(这样启动极其慢,不符合用户使用规律,华而不实,这里不写。),
-w 是运行代码时不显示黑色的cmd窗口
main.py 是需要打包的.py文件名,
--distpath 跟的是创建子目录将生成文件放入其中而不是在同一级目录下
--upx-dir 是缩短文件大小的一个程序、要到网上下载、这串是目录
--add-data 是添加关联文件, 多文件有几个写几个,如「 --add-data "login_form.py;." --add-data "print_out_test.py;."」)(  ;分号后面跟路径, .号表示同目录。)(关联文件会在_internal内部文件中)
--add-data "win-realesrgan;win-realesrgan" 如果重复2次就是打包整个文件夹
--icon  设置exe图标 , 像素为 256*256的 ico文件, 使用方法添加参数: 「 --icon= xxxx\xxxx.ico 」(png转ico网址:www.aconvert.com/cn/icon/png…  ( jpg先在ps去掉杂物并设置透明后存储为png)

四、常见报错的处理  

1.当报pathlib错误 ,用pip uninstall pathlib ,不要用conda,可能会导致conda出问题。
2.当「No module named 'MySQLdb'」,安装「pip install mysqlclient」。
3.1 打包时, pd.read_sql在接受sql语句传参时,直接使用f'''xx'''的方法给予变量,不要另增加传参参数
3.2. 打包时, sql语句可能不支持 %Y 等格式化,按年月抽取使用 EXTRACT 取数即可。
4. 打包过大的问题,完全是因为没有在虚拟环境里安装 pyinstaller!! 在外面调用的会关联到其它的许多库,需要在里面装一次。
虚拟环境有问题,(注,不是虚拟与包的问题,而是代码的写法问题,先检查代码是否使用了不常用的多余参数写法,一般会因版本不同而不兼容,或pyinstaller不识别。)
(如果打包后变大了,可能是因为虚拟环境里的python受污染变成了conda的python,默认的库变成了外部,解决方法为删除虚拟环境,重建,重新走打包流程)
5. 关于打包过程中的jinjia moudle no found等不需要管,不影响。