Python项目如何打包成exe文件

📝 面试求职: 「面试试题小程序」内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


在开发Python应用程序的过程中,我们可能会遇到需要将Python项目或脚本打包成一个独立的可执行文件的情况,以便于在其他电脑上快速运行,或者在其他没有安装Python环境的机器上运行。

此外,有时候我们写了一个小工具,也可能会需要打包为exe文件方便其他人通过exe文件直接双击运行工具。这时候,PyInstaller 就是一个非常实用的工具了,pyinstaller是一个第三方模块,专用于python程序的exe打包。

pyinstaller的官网是:https://pyinstaller.org/

二、安装

首先,你需要确保你的环境中已经安装了 PyInstaller。如果还没有安装,可以通过 pip 命令轻松安装:

pip install pyinstaller

三、开始打包

3.1 常用打包命令总结如下:

pyinstaller xxx.py 打包成一个文件夹

pyinstaller -F xxx.py 打包一个exe文件,双击exe文件运行,默认会弹出Windows控制台窗口运行(仅对 Windows 有效)

pyinstaller -F -w xxx.py 打包一个不带控制台的exe

pyinstaller -F -c xxx.py 指定为打包成一个带Windows控制台窗口的exe

pyinstaller -F -i xxx.ico xxx.py 打包一个指定图标的exe

3.2 执行打包命令

假设项目的主运行文件叫:lark_manager.py,PyCharm终端执行打包命令:

pyinstaller -F lark_manager.py

在这里插入图片描述
看到下面的Building EXE successfully则说明打包成功:

在这里插入图片描述

注意:如果运行pyinstaller相关命令报错"The ‘pathlib’ package is an obsolete backport of a standard library package and is incompatible with PyInstaller.",则直接删除掉pathlib库,使用:

pip uninstall pathlib

然后再重新使用pyinstaller命令即可。

四、打包产生的文件

打包完成后,打包目录下你会发现生成了一些文件,下面我们对每个文件做一些说明:

4.1 spec文件

pyinstaller会生成一个spec文件将一些打包参数放到里面:

在这里插入图片描述

以后有代码更新,想重新打包的时候,如果你对 .spec 文件进行了自定义配置,可以直接使用下面的命令打包:

pyinstaller lark_manager.spec

如果你没有进行任何自定义配置,可以继续之前的打包命令,但要注意这可能会覆盖之前的 .spec 文件:

pyinstaller -F lark_manager.spec

通常来说,稍微复杂一点的项目都会涉及到.spec文件进行自定义配置,.spec文件里面各个条项的含义解释,我们放最后面去说。

4.2 dist文件夹

目录下新生成了一个dist文件夹,里面存储了打包后的EXE文件:

在这里插入图片描述

打包完成后的这个exe文件,就是一个独立可运行的文件,不用依赖python环境,可以直接复制这个exe文件到他人的电脑上直接双击运行。

4.3 build文件夹

pyinstaller还会生成一个build文件夹,并写入一些打包的日志信息文件:

在这里插入图片描述

五、打包为一个文件夹

如果是想打包为一个文件夹,则使用:pyinstaller xxx.py 打包后的文件夹中包含一个exe文件,以及其他一些依赖文件,比如dll文件:

在这里插入图片描述

六、定制EXE文件图标

默认情况下,打包出来的exe文件使用的是下面这种默认的图标:

在这里插入图片描述

如果想生成指定图标的exe文件,先准备好一张.ico的图标文件,将图标文件放至工程根目录下,然后使用命令:

pyinstaller -F -i xxx.ico xxx.py

打包一个指定图标的exe,打包后的icon就换成了指定的ico图标:

在这里插入图片描述

注意:如果打包后你发现图标没有变,还是用的默认图标,不要慌。实际上图标已经成功更新了,你可以把新生成的exe文件移动/拷贝到其他路径查看确认,或者发送给别人也可以,就会发现图标是更新后的图标了,原因是Windows的图标缓存导致。

七、定制启动loading进度条

如果exe文件内容比较庞大,启动比较慢,需要一个启动页面的话,准备一张.png图片文件(必须是.png格式),将图片文件放至工程根目录下,打包时加上:–splash参数

pyinstaller -F --splash xxxx.png xxxx.py

双击exe文件运行后,会发现多了一个弹窗图片显示:

在这里插入图片描述

八、spec文件自定义打包配置

正常情况下,如果你的项目不只是一个py文件,而是一个大的项目工程,包含很多其他的py文件、配置文件,以及有很多三方的依赖。

那么想要把这样的一个工程打包为EXE文件,则需要对.spec文件进行相关的自定义配置,这样打包出来的EXE文件才能正常运行。

以下面的这样的一个spec文件举例,我们来对其中重要的字段做一下简单的说明:

# -*- mode: python ; coding: utf-8 -*-

a = Analysis(
    ['lark_manager.py'],
    pathex=[],
    binaries=[],
    datas=[],
    hiddenimports=['sqlite3'],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
)

a.datas += [('Utils/test_case.py', './Utils/test_case.py', 'DATA')]
a.datas += [('Utils/util_config.py', './Utils/util_config.py', 'DATA')]

a.version = ' v1.0'

pyz = PYZ(a.pure)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,
    [],
    name='lark_manager' + a.version,
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=False,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
    icon=['favicon.ico'],
)

datas=[…]: 项目中需要用到的数据配置文件、静态资源文件,需要添加到datas里面。
通常会使用上面的a.datas写法添加:
a.datas += [(‘Utils/test_case.py’, ‘./Utils/test_case.py’, ‘DATA’)]
a.datas += [(‘Utils/util_config.py’, ‘./Utils/util_config.py’, ‘DATA’)]

hiddenimports=[‘sqlite3’, …]: 列出那些被导入但 PyInstaller 无法自动检测到的模块,
这些模块会被强制包含在打包过程中。

a.version = ’ v1.0’ 设置了一个版本字符串,这个字符串稍后会被添加到可执行文件的名字中。

name=‘lark_manager’ + a.version: 最终可执行文件的名字将会是 lark_manager v1.0。

其他的参数基本可以不变,就使用spec文件生成时的默认值就OK,这里不再赘述。需要经常根据自己的项目动态配置的主要是a.datas和hiddenimports,哪些需要加到a.datas,有一个简单的总结:

数据文件 和 静态资源文件 通常需要添加到 a.datas 中。

主脚本 和 被导入的模块,以及标准库和第三方库的文件不需要添加到a.datas 中,PyInstaller 会自动处理它们。

最后,你需要根据你打包后的EXE文件运行时的报错信息,根据报错信息添加对应添加缺失的内容到spec文件中,以保障最终的EXE文件运行正常。比如打包出来的EXE文件运行报错:

在这里插入图片描述
报错信息提示: No module named ‘mss’, 意思是缺少了mss库,那么则需要在spec中的anlysis函数中的hiddenimports=[],加上’mss’:

hiddenimports=['mss']

添加后重新打包再次运行,EXE文件就可以正常运行起来了

以上就是本次的全部内容,如果对你有帮助,麻烦点赞+分享,你的支持就是作者更新最大的动力!

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取 【保证100%免费】
在这里插入图片描述
在这里插入图片描述

### 减少 Python PyInstaller 打包 EXE 文件体积的最佳实践 #### 优化依赖库的选择和管理 当使用 PyInstaller 将 .py 脚本转换为可执行文件时,确实会将许多不必要的第三方库一同打包进来,这显著增加了最终生.exe 文件大小。为了有效控制并减小这些额外资源所占用的空间,建议采用更精细的方式处理项目所需的外部模块。 对于不需要全局访问权限的应用场景来说,在构建之前清理掉未被实际调用到的功能组件是非常必要的;另外还可以考虑通过虚拟环境来隔离不同项目的具体需求差异,从而避免重复引入相同版本号却功能冗余的标准库或扩展包[^2]。 #### 启用 UPX 压缩工具 UPX (Ultimate Packer for eXecutables) 是一种高效的无损压缩算法,专门用于缩小各种类型的二进制文件尺寸而不影响其正常工作性能。安装好之后只需在命令行参数里加上 `--upx-dir` 指定路径就能让 PyInstaller 自动应用此技术对目标程序进行进一步瘦身操作: ```bash pip install --upgrade pyinstaller upx pyinstaller your_script.py --onefile --upx-dir=/path/to/upx/ ``` 需要注意的是并非所有的操作系统都支持经过 UPX 处理后的应用程序直接运行,所以在分发前最好先测试确认兼容情况再做决定是否启用该选项[^1]。 #### 排除不必要数据与静态资源 除了动态链接库外,有时候源码内部还可能嵌入了大量的多媒体素材(如图标、音频片段等),它们同样会对整体容量造不小的影响。因此可以在打包配置文件中明确指出哪些目录下的内容不属于最终产品的一部分而予以排除在外: ```ini [PyInstaller] datas = exclude-tree=static_assets_folder_name ``` 上述设置将会告诉 PyInstaller 不要复制整个名为 “static_assets_folder_name” 的子文件夹及其下级结构至输出目录内[^3]。 #### 使用单文件模式 (--onefile) 虽然多文件模式能够提供更好的解压速度以及便于调试的优势,但对于追求极致精简的目标而言,选择 `--onefile` 参数创建单一入口点式的独立型软件不失为一个好的策略。这样做不仅简化了部署流程而且有助于隐藏敏感信息防止逆向工程分析。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值