GUI打包工具Pyinstaller详细教程

       python GUI在开发好之后,我们需要将其打包成exe文件,并使其不依赖python环境运行,这个时候需要用到pyistaller。

目录

获取方式

通过命令行打包

常用命令

示例

 注意事项

自定义.spec文件打包

在本地生成.spec文件

编辑.spec文件

解决打包后某些库无法正常使用的问题


获取方式

pip install -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple pyinstaller

通过命令行打包

        pyinstaller主要是通过命令行的形式来进行操作,下表给出了常用的命令行及使用方法

常用命令

命令选项描述示例
--onefile或 -F将所有依赖项打包到一个可执行文件中。pyinstaller --onefile main.py
--windowed 或 -w不显示控制台窗口(适用于 GUI 应用)。pyinstaller --windowed app.py
--console 或 -c显示控制台窗口(默认行为,适用于需要终端的应用)。pyinstaller --console script.py
--name=APPNAME指定生成的应用程序名称。pyinstaller --name MyApp app.py
--icon=ICONFILE或-i指定应用程序图标(支持 .ico.icns 等格式)。pyinstaller --icon=app.ico main.py
--noconfirm覆盖输出目录而不提示确认。pyinstaller --onefile --noconfirm script.py
--clean在构建之前清理 PyInstaller 缓存和临时文件。pyinstaller --clean main.py
--add-data"SRC;DEST"添加额外的数据文件或目录(Windows 使用 ;,Unix 使用 :)。pyinstaller --add-data "data;data" app.py
--add-binary "SRC;DEST"添加额外的二进制文件或库(Windows 使用 ;,Unix 使用 :)。pyinstaller --add-binary "lib/libexample.so:lib" app.py
--hidden-import=MODULE手动指定隐藏的导入模块,防止 PyInstaller 未自动检测到。pyinstaller --hidden-import=module_name app.py
--exclude-module=MODULE排除不需要的模块,减小包体积。pyinstaller --exclude-module=tkinter app.py
--upx-dir=UPX_DIR指定 UPX 可执行文件的路径,用于压缩可执行文件。pyinstaller --upx-dir=/path/to/upx app.py
--distpath=DISTPATH指定输出的可执行文件存放目录(默认为 dist/)。pyinstaller --distpath=./build app.py
--workpath=WORKPATH指定临时工作目录(默认为 build/)。pyinstaller --workpath=./temp app.py
--specpath=SPECPATH指定 .spec 文件的输出目录(默认为当前目录)。pyinstaller --specpath=./specs app.py
--log-level=LEVEL设置日志级别(如 DEBUGINFOWARNERRORCRITICAL)。pyinstaller --log-level=DEBUG app.py
--version-file=FILE指定版本信息文件,用于在可执行文件中嵌入版本信息。pyinstaller --version-file=version_info.txt app.py
--exclude-module排除指定的模块,减小最终包的大小。pyinstaller --exclude-module=test app.py
--key=ENCRYPTION_KEY对 Python 字节码进行加密(需要额外支持)。pyinstaller --key=your_encryption_key app.py
--debug=MODE启用调试模式,可以设为 allimportsbootloader, 等。pyinstaller --debug=all app.py

示例

        为了方便,我们在待打包文件目录下的cmd命令行内使用pyinstaller,这样可以不指定文件路径,只需要指明文件名称即可。

  1. 找到待打包py文件所在的文件夹

        2.鼠标单击位置栏

3.删除掉蓝色选中部分,并输入cmd 

4.按下回车,进入到当前文件夹路径下的cmd命令面板 

5.输入命令 

         这里我们希望将所有内容打包到一个exe文件内,所以pyinstaller命令应该是:

pyinstaller -F -w -i ‘icon图片的位置或名称’ ‘打包py文件的位置或名称’

        这个命令表示打包时的gui运行时不会弹出控制台,并且有icon。

        输入命令后按下回车等待,不要关闭当前cmd命令窗口,否则打包失败!直到cmd命令窗口内的字体不再滚动并在最后一行出现Successfully语句的时候,打包完成。

   返回之前的文件夹,我们发现会多出两个文件夹,build和dist,此时build没用了,可以删掉,dist文件夹下的便是我们打包好的exe文件,可以将其移动到桌面或其他位置独立使用了 。 

      

 注意事项

       1. exe文件的icon必须是.ico格式,jpg或png格式将会在使用-i命令时报错提醒icon文件需要为.ico格式。

       2.pyinstaller只能用过来打包.py类型文件,若你的项目中用到了图片等类型数据,尽可能的全部转化为py文件然后再打包。

       3.如果不指定icon路径或者在命令中没有使用-i,那么你的exe文件打包后的icon是:

自定义.spec文件打包

        在使用pyinstaller命令后,会在我们待打包文件同级目录下生成一个.spec文件,这个文件内包含了待打包文件的所有打包参数配置:

        .spec文件的格式如上图,不难发现,EXE括号内的各个参数实际上就是我们前边表格中的命令对应的效果,因此我们直接在这个文件内进行编辑,即可实现同样的效果。

在本地生成.spec文件

pyinstaller --name= py文件名称.py

        运行这个命令行后,将会在你的py文件同目录下生成一个空的.spec文件,这个文件与上图相比

除了Analysis内第一个列表是你的py文件名称以外,其余位置都是默认值。

编辑.spec文件

spec文件主要内容:

  • Analysis: 定义了要打包的脚本及其依赖项。
  • ​EXE:定义了最终生成的可执行文件的属性。
  • ​Collect: 定义了如何收集和打包所有资源文件。

一般而言,我们只需要修改Analysis和EXE即可。

倘若你想修改打包后的exe文件名称,那么只需要将EXE中的name的值修改为:

name='我的exe文件'

 倘若你不想再运行exe文件时弹出黑色的终端窗口,那么只需要将EXE中的console的值修改为:

console=False

倘若你想要指定打包后的exe文件的icon,那么只需要将EXE中的icon的值修改为:

icon=['myicon.ico']

 在.spec文件内修改这三个位置的参数后,其实和我们前边使用:

pyinstaller -F -w -i ‘icon图片的位置或名称’ ‘打包py文件的位置或名称’

这个命令行参数效果一样,唯一区别在于使用这个命令行打包后文件的名称是py文件的名称。 

 解决打包后某些库功能无法正常使用的问题

        大家在将自己的python项目按照上述格式打包后,有时候会发现,为什么某个库的某个函数不起作用呢?

        这其实是因为我们的py文件内用到的这个库依赖一些非py文件,那我们必须将这个非py文件在我们电脑上的路径(一般是python的site-package下的这个库的名称,也就是pip命令下载的位置)以及文件名称传入到Analysis的data中 一起打包后,exe文件才能正常使用。

        这里以我之前做过的一个项目为例,这个项目中用到了ddddocr这个库,dddocr是用C开发的,python作为接口的一个OCR(光学识别,用来识别图片验证码)库,因此,我们需要将调用的dll文件传入到data内,否则即使打包成功也无法使用!

  datas=[("C:\\Users\\MrCrab\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\onnxruntime\\capi\\onnxruntime_providers_shared.dll","onnxruntime\\capi"),("C:\\Users\\MrCrab\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\ddddocr\\common.onnx","ddddocr")]

需要注意的是,每个文件要按照(路径,文件名)的元祖格式传入到Analysis的data列表。

总结 

        以上便是pyinstaller在打包python文件中的详细教程,看完这篇文章你将掌握使用pyinstaller打包python文件的技能!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值