本文所用Python环境为anaconda
1、一般打包步骤:
从开始菜单运行“Anaconda Prompt” 转到所需运行的文件路径
0)pip install Pyinstaller #安装打包库,第一次选装,以后就不需要了
1)Pyinstaller -F my_python.py #打包exe,如果.py文件不在运行的文件夹中,需要填写绝对路径\文件名
2)Pyinstaller -F -w my_python.py #不带控制台的打包
3)Pyinstaller -F -w -i my_ico.ico my_python.py #打包指定exe图标打包
4)如果有自定义模块,将自定义模块放入Lib\site-packages文件夹下(where python查看安装路径)
ico图片生成:把其他格式图片转成ico格式:https://app.xunjiepdf.com/img2icon/
打包生成的文件在上述运行的路径下的dist文件夹下,大概300~400M,而且打包速度很慢
2、Python打包为什么大?
网上查了一下解释型语言大都是这样,只不过Python尤其突出,要解决大而慢,只能用编译型语言,如C,C++,甚至VB都好很多,体积最小的是汇编;另外,因为Python里安装了很多库,打包的时候会把很多不必要的模块也打包进去,所以打包出来的文件很大。
因此我们可以模拟一个新环境(虚拟环境),在其中只安装我们本次打包所必要的工具包即可。
3、安装虚拟环境
Python创建虚拟环境的方法有很多,本文用的是在Anaconda中用conda安装虚拟环境,会把虚拟环境的目录生成在anaconda安装目录下的env目录下。
从开始菜单运行“Anaconda Prompt”,出现的界面输入创建虚拟环境的指令。输入以下命令1创建了一个名字为auto,且基于python版本3.9的虚拟环境。在创建过程中需要回复(y/n)y
1)conda create -n auto python==3.9 #创建虚拟环境
2)conda activate auto #激活虚拟环境
3)conda deactivate #退出虚拟环境
4)conda info -e #查看所有的虚拟环境
5)conda remove -n auto -all #删除虚拟环境,-all的意思是,将整个虚拟环境连同相关文件也一起删除
4、安装所需的库
运行上面命令2激活名为auto虚拟环境,输入conda list可以查看当前虚拟环境里已经安装的库。
安装运行Python所需的包,包括Pyinstaller包,不需要一次把所有以后可能用到的包都安装好,那样就失去了虚拟环境的纯洁性了,仅安装本次打包所需的包即可,不需要的可以卸载掉,尤其是一些大包,比如pandas。
5、在虚拟环境打包
在虚拟环境激活的状态下,运行一般打包步骤,注意自定义模块需放入虚拟环境所在的Lib\site-packages文件夹下,可通过where python查看虚拟环境安装路径。
为了防止打包时候有些库没安装好,可以先在虚拟环境中执行一下Python脚本(Python 文件路径\.py文件名),运行无误的话再打包,比较保险。
虚拟环境运行可能有些包会报错,原因大多为包的版本和默认环境不同,可通过conda list分别在虚拟环境和默认环境查看包的版本,然后强制在虚拟环境安装和默认环境相同的版本,如下命令
pip install --force-reinstall -v "openpyxl==3.1.0"
或者先卸载再安装
pip uninstall openpyxl
pip install openpyxl==3.1.0