pyinstaller打包exe应用程序详细教程

1、PyInstaller简介

PyInstaller是一个跨平台的Python应用打包工具,支持 Windows/Linux/MacOS三大主流平台,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,从而允许最终用户在无需安装 Python 的情况下执行应用程序。
PyInstaller 制作出来的执行文件并不是跨平台的,如果需要为不同平台打包,就要在相应平台上运行PyInstaller进行打包。

2、安装anaconda,并在anaconda prompt上进行pyinstaller的安装,安装指令如下:

pip install Pyinstaller

3、需要准备的文件如下:

我们的ZMZ_test文件夹放在c盘的桌面

广大校徽.ico 是生成可执行文件的图标

gui2.py 是python文件,是需要打包的文件

4、使用Pyinstaller

打开anaconda prompt,切换到项目目录,目录如下图所示:

 一定要切换到项目目录再执行打包命令,否则生成的文件将会在别的目录,以至于你找不到需要的文件。

输入命令进行打包,输入的命令为

pyinstaller -F -i 广大校徽.ico gui2.py --add-data "C:\Users\lenovo\Desktop\ZMZ_test\epoch200.pth.tar;."

稍等片刻后看到successfully说明就是成功了,打包成功后生成以下文件,exe可执行文件在dist文件夹上。

双击exe文件即可看到我们需要的gui界面。 

5、涉及到的参数介绍

6、遇坑与填坑

6.1、纯Python代码的打包

如果你的软件中只有.py文件,即Python代码文件,不包括图标、图片等资源文件,那么使用pyinstaller打包是非常简单的,往往只需要下面一行命令即可:

pyinstaller -F -i 广大校徽.ico gui2.py

当运行这个命令之后,会对应的生成一个gui2.spec文件,这个文件之后有用处。

其中的几个选项:
-F 把整个软件(包括依赖的各种库文件)打包成单一文件;也可以用-D代替,-D是生成一个文件夹,把所有的依赖项放入文件夹中
-i 生成的exe文件会带有这个图标;
最后的gui2.py就是翻译软件的入口程序

但其实这里面打包ZMZ_test项目有个坑,项目一般都会用到一些插件,诸如ZMZ_test-html等,这些模块在pyinstaller打包过程中并不会自动导入,因此需要手动在spec文件中手动写入。

一般来说,ZMZ_test项目按照如下方式修改即可:

- numpy等可以根据实际情况看是否加入,主要是pytest相关的安装包

- C:/Python38/Lib/site-packages 路径请替换成自己的本地python路径
 

a = Analysis(
    ['main_for_xxx.py',],
    pathex=[],
    binaries=[],
    datas=[('C:/Python38/Lib/site-packages/pytest_html', './pytest_html'),
           ('C:/python38/Lib/site-packages/pytest_html-3.1.1.dist-info', './pytest_html-3.1.1.dist-info'),
           ('C:/Python38/Lib/site-packages/py', './py'),
           ('C:/Python38/Lib/site-packages/pytest', './pytest'),
           ('C:/Python38/Lib/site-packages/_pytest', './_pytest'),
           ('C:/Python38/Lib/site-packages/pytest_assume', './pytest_assume'),
           ('C:/python38/Lib/site-packages/pytest_assume-2.4.3.dist-info', './pytest_assume-2.4.3.dist-info'),
           ('C:/Python38/Lib/site-packages/pytest_metadata', './pytest_metadata'),
           ('C:/python38/Lib/site-packages/pytest_metadata-2.0.1.dist-info','./pytest_metadata-2.0.1.dist-info'),
           ('C:/Python38/Lib/site-packages/numpy', './numpy'),
           ('C:/python38/Lib/site-packages/numpy-1.22.3.dist-info', './numpy-1.22.3.dist-info'),],

其中,datas增加的内容实际上和pyinstaller --add-data命令起到的作用一样,以('C:/Python38/Lib/site-packages/ZMZ_test_html', './ZMZ_test_html')为例,元组第一个参数代表本地python site-packages库中的ZMZ_test_html文件夹,'./ZMZ_test_html' 代表pytest将该文件夹打包后存放的路径,相同的用add-data命令如下:--add-data="源地址;目标地址"

pyinstaller main_for_xxx.py --add-data "C:/Python38/Lib/site-packages/pytest_html ;./pytest_html"

6.2、包含其他文件的打包

其实原理与之前说的在datas中添加资源文件类似,但是需要注意的事项多了一些。

由于我的gui2.py里面包含了文件epoch200.pth.tar,因此,需要在输入命令时加入--add-data的命令。该命令为:

--add-data "C:\Users\lenovo\Desktop\ZMZ_test\epoch200.pth.tar;."

 如果不添加这个命令,则在运行exe文件时,会报错找不到相关的文件,报错内容为:

 另外,说几个重要的注意事项:

1.命令使用pyinstaller和pyinstaller.exe结果都是一样的

2.-w是不显示命令窗口,  -i 图标文件的路径  这是改变图标的,但是我发现只能改变任务栏里的和命令窗口的图标,并不能改变exe文件的图标。另外这些参数要加载pyinstaller和路径中间。

3.有一些代码需要调用一些图片和资源文件的,这是不会自动导入的,需要你自己手动复制进去才行。不然exe文件运行时命令窗口会报错找不到这个文件。

4.也是最坑的一点。就是当你使用错误的参数去打包或者打包到一半中断,等等此类运行到一半没了的情况。会导致你原来的py文件变成一个0KB的空文件。里面的代码会全部消失!!!所以以后需要有个良好的习惯,就是复制一份代码出来,用这个副本进行打包。并且参数出错,或者打错了导致失败时,检查下副本文件的py文件是否还存在再继续重新打包,不然打出来的就是空的文件,自然一直闪退,因为压根没内容。

5.写代码的时候应当有个良好的习惯,用什么函数导什么函数,不要上来import整个库,最后你会发现你一个100KB的代码打包出来有500MB,全是库,简直无语

6.pygame代码调试的时候要用quit()不然程序结束时会崩溃。但是直接运行py文件就不需要这个函数。这个我们之前的文章也提到过了。但是这里当我使用-w做成无窗口的程序后,一结束发现报错,暂停后发现报的是找不到quit()函数。可见这个函数其实是一个很让人无语的函数。一方面pygame官方网上说结束程序的时候需要加入这个函数。另一方面其实在正在运行时都不需要甚至会报错。虽然也不影响运行,但是弹个窗口出来说 什么不fail to execute总是让别人觉得你是个lowb。所以,调试的时候加一下,到时候execute的时候去掉。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用pyinstaller打包exe文件非常简单。首先,确保你已经安装了pyinstaller库。你可以使用pip命令来安装pyinstaller,如下所示: ``` pip install pyinstaller ``` 安装完成后,你可以使用以下命令来生成可执行文件: ``` pyinstaller -F -i <图标文件路径> <Python文件路径> ``` 其中,-F参数表示生成单个可执行文件,-i参数用于指定图标文件路径,<Python文件路径>是你要打包Python文件的路径。 举个例子,如果你的Python文件名为gui2.py,图标文件名为广大校徽.ico,你可以使用以下命令来生成可执行文件: ``` pyinstaller -F -i 广大校徽.ico gui2.py ``` 生成的可执行文件将会在当前目录下的dist文件夹中。 希望这个回答对你有帮助!\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [pyinstaller打包exe应用程序详细教程](https://blog.csdn.net/qq_42233059/article/details/128835564)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【Python】项目打包:如何使用PyInstaller打包python程序(exe)](https://blog.csdn.net/qq_15028721/article/details/129649467)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Python PyInstaller安装和使用教程(详解版)](https://blog.csdn.net/alphonse2017/article/details/96332196)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值