在虚拟环境使用pyinstaller命令打包.py程序成为exe可执行文件发布给其他用户

python程序在自己的程序上可以运行,但是换到其他人的电脑上,因为其他人的电脑不一定装了python,所以不一定可以正常运行。所以我们需要将其打包成exe文件,使得程序在任何的windows主机上都可以工作。

我在尝试了许多次失败之后,总结出以下经验:为了干净地打包,建议在虚拟环境中执行打包过程,这样比在一般环境下更加节省空间,我的试验数据是在一般环境下打包是98M,然后再虚拟环境中打包,出来的包只有28M,节省了70%左右的空间,原因是虚拟环境中可以避免将一些不用的包打进去造成空间的浪费。关于虚拟环境打包,可以参考这篇博文《用 Pyinstaller 打包 Python 程序 + 解决打包结果过大的问题》(https://blog.csdn.net/frostime/article/details/90523062)
关键命令如下:

pip install pipenv #安装pipenv虚拟环境包
pipenv install --python 3.6.5 #安装指定版本的python,因为我用的是3.6.5,所以这里也用了这个版本,实际使用的时候酌情填写版本号
pipenv shell #在目录下激活虚拟环境
#然后再虚拟环境中使用 pipenv install 命令来安装程序需要的包体
pipenv install pyinstaller
pipenv install pandas
pipenv install pysimplegui

注意如果遇到国外镜像比较慢的时候,可以指定国内的镜像(比如豆瓣源进行下载),参考之前的博文:《如何用pip install从豆瓣源安装包》(https://blog.csdn.net/weixin_41855010/article/details/104345659)

pyinstaller是python提供给了一个很好的打包工具,可以把.py文件打包成.exe文件。我们可以使用以下命令完成打包操作:

pyinstaller -F -w XXX.py #其中XXX表示文件的名称,-F表示只生成一个.exe文件,不加此参数会有很多.dll文件生成看起来会非常乱,-w表示运行时工作台关闭,如果不用此参数,运行时会有console弹出,就是那个黑黑的cmd界面。

原以为这样就打包就避开了之前在普通环境下碰到的那些坑(那些坑耗费了我一个下午的时间),但是不要开心的太早,因为一个坑过去了,还有千千万万个坑在等着你。果然,运行刚刚生成的.exe文件之后,出现了闪退的问题,幸亏我反应灵敏,截图找到了cmd下的报错信息,发现是“Pyinstaller No module named pkg_resources.py2_warn”的问题,这个问题在《Pyinstaller No module named pkg_resources.py2_warn》(https://blog.51cto.com/cfy10/2468597?source=dra)一文中找到了原因,即setuptools版本太高不兼容,解决方案是使用以下命令对setuptools进行降级至44.0.0处理:

pip install setuptools==44.0.0

我们再次使用打包指令打包,再次运行,终于幸运地完成了这个任务,也再次说明了软件工程有些时候真的就是玄学。
在这里插入图片描述
我们看到,运行pyinstaller之后,系统会在运行目录下面生成一个dist的文件夹,里面会存放刚刚生成的.exe文件,不过我还得把数据库文件单独拷贝到这个文件中去。我们双击打开exe文件之后就可以正常运行程序啦。

发布了126 篇原创文章 · 获赞 5 · 访问量 3434

猜你喜欢

转载自blog.csdn.net/weixin_41855010/article/details/104346526
今日推荐