pyinstaller模块打包exe
基本使用方法:
安装模块:pip install pyinstaller
命令行cd
到Python主程序文件
所在的目录使用格式:pyinstaller -F -w -i x.ico xxx.py
pyinstaller
的参数讲解:第一个参数(必选)
:-F
:生成单个可执行文件-D
:生成多个可执行文件第二个参数
:-c
:文件执行时携带cmd黑窗口(默认)-w
:文件执行时不启用cmd黑窗口第三个参数
:-p
:自定义需要加载的类路径(基本不用)第四个参数
:-i x.ico
:为可执行文件添加图片,此处x
用绝对路径
第五个参数(必选)
:xxx.py
:需要打包的py文件,xxx
为主程序
文件名 运行后会生成:build
:内含生成的项目文件dist
:内含生成的exe可执行文件
xxx.spec
:打包过程日志打包图片方法:
因使用pyinstaller
打包exe时,不能打包图片,解决方法: 采用base64
动态生成图片 使用以下代码生成图片的base64
码:import base64def pic2py(picture_names, py_name):write_data = []for picture_name in picture_names:filename = picture_name.replace('.', '_')with open("%s" % picture_name, 'rb') as r:b64str = base64.b64encode(r.read())# 注意这边 b64str 一定要加上.decode()write_data.append('%s = "%s"\n' % (filename, b64str.decode()))with open(f'{py_name}.py', 'w+') as w:for data in write_data:f.write(data)# 需要转码的图片:pics = ["favicon.ico"]# 将pics里面的图片写到 image.py 中pic2py(pics, 'image') print("转码完成...")
转码后会生成image.py
文件,将该文件加载到需要使用图片的程序中即可
import os# 导入图片转码后所在的py文件from image import *# 创建临时图片with open(r'D:/favicon.ico', 'wb') as w: # 创建临时的文件# 把这个one图片解码出来,写入文件中去tmp.write(base64.b64decode(favicon_ico))# 运行上面程序后,会在open的路径处生成这张图片,所以需要用到这张图片时直接用图片的绝对路径即可# 图片用后即删os.remove('D:/favicon.ico')
彻底隐藏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模块:
pip install pipenv
基本使用方法:
进入py主程序目录,使用指令:pipenv --python 3.8
,创建一个Python3.8的纯净虚拟环境 这里python的版本号
,由自己Python的版本
而定 使用指令:pipenv shell
,进入pipenv的命令行安装自己程序需要用到的模块:pip install xxx
记得安装打包模块:pip install pyinstaller
使用打包指令进行打包:pyinstaller -F xxx.py