pyinstaller模块打包exe
基本使用方法:
- 安装模块:
pip install pyinstaller
- 命令行
cd
到Python主程序文件
所在的目录 - 使用格式:
pyinstaller -F -w -i x.ico xxx.py
pyinstaller
的参数讲解:
第一个参数(必选)
:
第二个参数
:
-c
:文件执行时携带cmd黑窗口(默认)-w
:文件执行时不启用cmd黑窗口
第三个参数
:
第四个参数
:
-i x.ico
:为可执行文件添加图片,此处x
用绝对路径
第五个参数(必选)
:
xxx.py
:需要打包的py文件,xxx
为主程序
文件名
- 运行后会生成:
build
:内含生成的项目文件dist
:内含生成的exe可执行文件
xxx.spec
:打包过程日志
打包图片和音频的方法:
- 因使用
pyinstaller
打包exe时,不能打包图片和音频,解决方法:
- 使用以下代码生成图片和音频的
base64
码:
import base64
def to_py(other_names, py_name):
write_data = []
for other_name in other_names:
filename = other_name.replace('.', '_')
with open(other_name, 'rb') as r:
b64str = base64.b64encode(r.read())
write_data.append(f'{filename} = "{b64str.decode()}"\n')
with open(f'{py_name}.py', 'w+') as w:
for data in write_data:
w.write(data)
names = ["test.mp3", "test.png"]
to_py(names, 'base64_data')
print("转码完成...")
- 转码后会生成
base64_data.py
文件,将该文件加载到需要使用图片音频的程序中即可
import os
from base64_data import *
with open(r'D:/test.mp3', 'wb') as w:
w.write(base64.b64decode(test_mp3))
彻底隐藏cmd黑窗口:
- 打包成的exe文件中如果使用了
os.system()
调用cmd命令时,即使设置了参数-w
但调用时还是会一闪而过,解决方法:
- 安装模块:
pip install subprocess
- 导入模块
import subprocess
- 使用
subprocess.run("需要执行的cmd命令", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
即可解决
打包exe的目标程序过大
安装pipenv模块:
基本使用方法:
- 进入py主程序目录,使用指令:
pipenv --python 3.8
,创建一个Python3.8的纯净虚拟环境
- 这里
python的版本号
,由自己Python的版本
而定
- 使用指令:
pipenv shell
,进入pipenv的命令行 - 安装自己程序需要用到的模块:
pip install xxx
- 记得安装打包模块:
pip install pyinstaller
- 使用打包指令进行打包:
pyinstaller -F xxx.py