Python打包为exe可执行文件(含打包图片、音乐方法 + 彻底隐藏cmd黑窗口 + 解决打包程序过大)

pyinstaller模块打包exe

基本使用方法:
  1. 安装模块:pip install pyinstaller
  2. 命令行cdPython主程序文件所在的目录
  3. 使用格式: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动态生成图片和音频
  1. 使用以下代码生成图片和音频的base64码:
import base64

def to_py(other_names, py_name):
    # 用于存放所有图片和音频的base64
    write_data = []
    # 循环处理每个文件(图片or音频)
    for other_name in other_names:
        # 切割文件名,把文件名转为变量名
        filename = other_name.replace('.', '_')
        # 以二进制读取文件
        with open(other_name, 'rb') as r:
            # 将文件转为base64
            b64str = base64.b64encode(r.read())
        # 拼接变量,格式:变量名 = "base64编码"
        write_data.append(f'{filename} = "{b64str.decode()}"\n')

    # 循环把所有base64变量写入py文件
    with open(f'{py_name}.py', 'w+') as w:
        for data in write_data:
            w.write(data)
# 需要转码所有图片和音频:
# 注:图片或音频名称不要用汉字和数字,因为文件的名字要充当变量名
names = ["test.mp3", "test.png"]
# 将names列表里面的文件以base64写到 base64_data.py 中
to_py(names, 'base64_data')
print("转码完成...")
  1. 转码后会生成base64_data.py文件,将该文件加载到需要使用图片音频的程序中即可
import os
# 导入图片转码后所在的py文件
from base64_data import *
# 把py文件里的变量解码出来,以二进制写入文件中去
# 记得修改文件的扩展名,别图片也搞个mp3就搞笑了哈哈哈
with open(r'D:/test.mp3', 'wb') as w:
    # test_mp3变量是把 .改为_ 的文件名
    w.write(base64.b64decode(test_mp3))
# 运行上面程序后,会在open的路径处生成这个图片或音频,所以需要用到这个图片或音频时直接用绝对路径即可
# 为了不留痕迹,文件用后即删,不想删的就不执行
# os.remove('D:/test.mp3')
彻底隐藏cmd黑窗口:
  • 打包成的exe文件中如果使用了os.system()调用cmd命令时,即使设置了参数-w但调用时还是会一闪而过,解决方法:
    1. 安装模块:pip install subprocess
    2. 导入模块import subprocess
    3. 使用subprocess.run("需要执行的cmd命令", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)即可解决

打包exe的目标程序过大

安装pipenv模块:
  • pip install pipenv
基本使用方法:
  1. 进入py主程序目录,使用指令:pipenv --python 3.8,创建一个Python3.8的纯净虚拟环境
    • 这里python的版本号,由自己Python的版本而定
  2. 使用指令:pipenv shell,进入pipenv的命令行
  3. 安装自己程序需要用到的模块:pip install xxx
  4. 记得安装打包模块:pip install pyinstaller
  5. 使用打包指令进行打包:pyinstaller -F xxx.py
  • 15
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值