python从入门到精通(二十):python的exe程序打包制作

python的exe程序打包制作

python打包的概念

将普通的*.py程序文件打包成exe文件。exe文件即可执行文件,打包后的*.exe应用不用依赖python,可以在他人的电脑上运行。

PyInstaller 制作出来的执行文件并不是跨平台的,如果需要为不同平台打包,就要在相应平台上运行PyInstaller进行打包。

python打包的模块

pyinstaller是一个第三方模块,专用于python程序的exe打包

导入模块

python 复制代码
pip install pyinstaller

安装验证

python 复制代码
pyinstaller --version

基本语法

最简单的打包方式是:

python 复制代码
pyinstaller test.py  # 默认文件夹模式

pyinstaller生成spec文件将一些打包参数放到里面,然后进行打包,打包完成后目录下存在dist文件夹,里面有打包后的文件。还会生成一个build文件夹写入日志

命令参数

-D 文件夹模式。在打包完成后生成一个文件夹,其中包含一个exe文件和一个包含若干依赖文件的文件夹

-F 单文件模式。在打包完成后只会生成一个单独的exe文件

--add-data 指定一个文件夹或文件(非二进制),将其嵌入到exe中

--add-binary 指定二进制的文件夹或文件

-p/--paths提供一个路径进行搜索并且导入里面的模块(不同的路径使用路径分隔符os.pathsep分隔开,或者多次使用这个参数)这可以解决有时候第三方模块找不到的问题。

--hidden-import / --hiddenimport 需要进行额外导入的模块。当pyinstaller在程序中找不到一些模块时,需要你额外指定。这个参数可以多次使用,可以解决一些模块找不到的问题。

--splash 添加一个启动画面(图片文件)路径,在程序运行前显示指定的启动图片,起到加载提示的效果。

-c 打包程序运行后出现一个黑色的控制台窗口(默认)

-w 打包程序运行后隐藏控制台窗口

-i /icon 设置打包后exe程序的图标(只能在Windows和macOS上使用)

--disable-windowed-traceback 禁用异常提示(只能在Windows和macOS上使用)

命令实例:

python 复制代码
pyinstaller -D -i "icon.ico" test.py

位置参数在打包时放在最后,是需要打包的文件路径,或是spec文件路径

文件夹模式

资源文件复制和exe文件位于同一位置

python 复制代码
pyinstaller -w test.py

单文件模式

资源文件复制和exe文件位于同一位置

python 复制代码
pyinstaller -w -F test.py

资源嵌入exe

资源嵌入exe只在单文件模式下使用。文件夹模式下,资源文件夹不会嵌入到exe中,但是会被复制到exe所在的文件夹。

文件开头通过以下函数返回正确的路径

python 复制代码
import tkinter as tk  # 导入tkinter
import sys
import os

tk = tk.Tk()  # 创建窗口
tk .title("目录扫描工具")  # 更改标题
def get_path(relative_path):
    try:
        base_path = sys._MEIPASS
    except AttributeError:
        base_path = os.path.abspath(".")

    return os.path.normpath(os.path.join(base_path, relative_path))
image = tk.PhotoImage(file=get_path("assets/1.png"))
label = tk.Label(tk , text="准备,开始扫描!", image=image, compound="top")
label.pack()  # 显示图片

root.mainloop()  # 保持窗口运行
python 复制代码
pyinstaller -w -F --add-data assets;assets test.py

更改图标

python 复制代码
pyinstaller -w -F -i icon.ico my_app_name.py

启动画面(闪屏)

支持闪屏,需要先准备一张图片,必须是PNG格式(如果你安装了pillow模块,可以用pillow模块支持的其他格式)。然后,在打包时加上--splash参数,并传入图片路径。

在程序开头部分添加以下代码

python 复制代码
try:
    import pyi_splash
    pyi_splash.close()
except ImportError:
    pass
python 复制代码
pyinstaller --splash 2.png my_app_name.py

禁用异常提示

python 复制代码
--disable-windowed-traceback
相关推荐
Blossom.11818 分钟前
把 AI 塞进「自行车码表」——基于 MEMS 的 3D 地形预测码表
人工智能·python·深度学习·opencv·机器学习·计算机视觉·3d
蒋星熠4 小时前
区块链技术探索与应用:从密码学奇迹到产业变革引擎
python·语言模型·web3·去中心化·区块链·密码学·智能合约
DogDaoDao6 小时前
用PyTorch实现多类图像分类:从原理到实际操作
图像处理·人工智能·pytorch·python·深度学习·分类·图像分类
默归6 小时前
分治法——二分答案
python·算法
麻雀无能为力6 小时前
python自学笔记14 NumPy 线性代数
笔记·python·numpy
大学生毕业题目7 小时前
毕业项目推荐:28-基于yolov8/yolov5/yolo11的电塔危险物品检测识别系统(Python+卷积神经网络)
人工智能·python·yolo·cnn·pyqt·电塔·危险物品
程序猿小D9 小时前
【完整源码+数据集+部署教程】脑部CT图像分割系统源码和数据集:改进yolo11-CSwinTransformer
python·yolo·计算机视觉·数据集·yolo11·脑部ct图像分割
max5006009 小时前
北京大学MuMo多模态肿瘤分类模型复现与迁移学习
人工智能·python·机器学习·分类·数据挖掘·迁移学习
修一呀9 小时前
[后端快速搭建]基于 Django+DeepSeek API 快速搭建智能问答后端
后端·python·django
WSSWWWSSW10 小时前
Seaborn数据可视化实战:Seaborn数据可视化实战入门
python·信息可视化·数据挖掘·数据分析·matplotlib·seaborn