操作系统:Windows 10
Python版本:Anaconda
打包前,先安装pipenv:
pip install pipenv
打包步骤
1.创建名为【pipenvir】的文件夹,并把需要打包的.py和.ico文件放入(我这里的演示放入了app.py、app2.py和app.ico三个文件)
2.cmd进入pipenvir目录,输入以下命令:
pipenv install –python 3.10
备注:这里的3.10替换成你自己的python版本
pipenv shell
备注:进入pipenv虚拟环境
pipenv install pyinstaller pillow requests PySimpleGUI pywinauto datetime psutil BeautifulSoup4 pyautogui
备注:这里install的内容为打包的.py文件需要用到的所有依赖,其中pyinstaller是必要的,pillow对我的图标文件.ico有用
pyinstaller -w -D --clean --icon=app.ico app.py app2.py
备注:将我的app.py打包成exe(app.py用到了app2.py的一些函数,所以也要打包)
参数 | 说明 |
---|---|
-w | 打开exe程序的时候不会出现cmd窗口(只对windows有效) |
-D | 将依赖和应用程序分开打包在dist目录() |
–clean | 打包前清除之前打包残留的缓存文件(但不会清除之前的dist文件) |
–icon | 将app.ico添加为打包的exe文件的图标(在pipenv环境需要pillow库哦) |
打包完成后的exe应用程序在dist目录里
踩坑过程
1.pyinstaller参数
初尝pyinstaller时,我是直接进入我的项目里面cmd运行命令:
pyinstaller -F app.py
参数【-F】打包好的东西就只有一个exe应用程序,打开它的速度并不快,后面参数换成【-D】后快一些。
然后了解了一些参数后,我的命令就变成了这样:
pyinstaller -w -D --add-data=app2 --clean --icon=app.ico app.py
因为我app.py代码太多了,所以新建了一个app2.py,而app2里面依赖的库和app有一些不同,上面的命令【–add-data=app2】就是在百度上找的,我以为这个命令的作用是将app2.py以及依赖的库一并打包进去,显然,结果就是给我报错:找不到依赖的库。因为–add-data参数的作用是将一些txt、png文件打包进去,并不能自动识别需要的库。后面用用到了【–hidden-import=BeautifulSoup】这种命令才得以解决,但是这种方法还是很麻烦。
2.打包的python虚拟环境
摸透pyinstaller参数后,我发现我写得python程序并不复杂,但是打包出来的dist文件占了我900多M,而且打开exe的速度很不理想,我又上百度,才得知我将我的anaconda安装的所有库全打包进去了,我服了自己。
慢慢问博客后才知道用pipenv打包更好,然后我就根据我import的依赖,全写进【pipenv install xxx】命令里,结果一个劲的报错。因为有些依赖,比如【os】【time】这些,他们都是python环境自带的,不用写进【pipenv install xxx】命令里。将这些剔除后命令才得以成功运行,打包后的dist目录一下从900多M变成30M,30倍大小优化,打开exe应用程序的速度也更快了3秒,太妙了。