最近需要将python文件放到没有python环境的装有windows系统的主机下去运行,这就需要将python文件打包成windows操作系统可直接识别的exe文件,将python文件打包成exe文件有两款主流打包工具分别为pyinstaller和py2exe,由于py2exe只支持python2并且版本已经很久未更新,故这里选用了pyinstaller(我的环境是python3)。但是用过pyinstaller大概都知道它有多坑,懂的都懂,下面就我使用pyinstaller的经历来做个总结。
Pyinstaller的下载指令如下:
1 pip install -i https://pypi.douban.com/simple/ pyinstaller #豆瓣源 2 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller #清华源
首先,第一次使用pyinstaller我的环境是自带python3.9的Anaconda3,这个版本的Anaconda新是新但打包的时候会出现各种问题,日志里面警告显示缺各种包,最后打出来的包只能在自己电脑上跑,换个机子点exe文件他就会去打开pycharm,如果没有pycharm就会让你下载notepad++,总之就是跑不成。我想着是python3.9版本太高的问题,于是我又下载了单独的python2.7和·python3.1,但是在用pip下载pandas时,总是报无法为pandas创建wheel文件,我在网上找了各种解决办法挨着试了都不行·。
思考了一个下午,我想着把Anaconda的版本降低试下,这次我选用了集成了python3.7的Anaconda3的2018版本(Anaconda各个版本下载地址 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/) 这次打包没有任何问题程序可以正常运行。
Pyinstaller的常用执行指令如下:
1 pyinstaller -F py_word.py 打包exe 2 pyinstaller -F -w py_word.py 不带控制台的打包 3 pyinstaller -F -w -i chengzi.ico py_word.py 打包指定exe图标打包
详细的参数解释如下:
但是打包完之后问题接着随之而来。仅仅是一个处理excel的小程序体积竟然达到了320M,,在网上经过一番查询之后,原来是在Anaconda基础环境下打包会把Anaconda自带的所有库都打包进去,而我们的程序仅仅需要其中的几个库,为此我们需要额外在Anaconda下创建一个虚拟环境,虚拟环境中只安装我们这个程序所需要的库。
虚拟环境操作指令如下:
1 conda create -n 虚拟环境名字 python==3.6 #创建虚拟环境 2 conda activate 虚拟环境名字 #激活虚拟环境 3 conda deactivate #退出虚拟环境
例如,我们创建一个名为aotu,且基于python版本3.6的虚拟环境。
在创建过程中需要回复(y/n),Yes,再激活虚拟环境
安装的虚拟环境,会把虚拟环境的目录生成在Anaconda安装目录下的envs下。
当然我们也可以在刚刚的窗口,使用命令conda info --envs,来查看conda环境下所有的虚拟环境。
在刚刚的窗口输入conda list可以查看当前虚拟环境里已经安装的库
我们接下来打开我们的程序来看下导入的库有哪些不在虚拟环境中,我们通过pip把它下载进来,例如下载pandas和打包工具pyinstaller:
1 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas 2 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller
安装完程序需要的所有库之后再用pyinstaller打包你就会发现这次的exe文件只有28M
运行一下又出现了Excel xlsx file; not supported的报错·。
解决办法:
1 卸载新版本 pip uninstall xlrd 2 安装老版本:pip install xlrd=1.2.0 (或者更早版本)
换完之后再打包,至此程序成功运行!
参考文章1:https://blog.csdn.net/Python_kele/article/details/118495091
参考文章2:https://blog.csdn.net/panruola/article/details/117662786