事情经过
写了个小工具,想打包成exe文件方便使用,这当然不是什么难事。因为除了写Python的,绝大多数人电脑里都没有Python编译器,所以打包成exe,让别人(windows)双击就可以打开,也算是必备技能了。
直接用Pyinstaller,打开cmd:
pyinstaller -Fw C:\Users\30797\Desktop\python\Main.py
-F 是打包成一个文件
-w是不出现调试窗口
打包完成后,一看文件,147M!怪不得打包了这么久。
查找问题
上网查了下资料,发现是打包的时候打包了很多不必要的模块进去,要用纯净的Python来打包。
那么该如何用纯净的Python来打包呢,可以使用pipenv模块
解决方法
打开cmd:
#安装pipenv,这里默认使用python3
pip install pipenv
#删除原虚拟环境
pipenv --rm
#建立新虚拟环境
pipenv install
#进入虚拟环境
pipenv shell
#安装模块
pip install py项目里面用到的模块
#打包的模块也要安装
pip install pyinstaller
#开始打包
pyinstaller -Fw C:\Users\30797\Desktop\python\Main.py
打包完成,一看大小,6M!成功!
遇到bug
删除原虚拟环境,运行 pipenv --rm 的时候,我遇到一个报错,AttributeError: version ,不单单是这个命令,凡是pipenv相关的命令,都会有这个报错。
后来通过查阅资料,发现是系统中存在多个版本python的原因,我系统中存在的python2干扰了python3中pipenv的正确运行,解决方法如下:
#在python3安装目录下找到并修改 _registry.py 文件
路径为:E:\Python38\Lib\site-packages\pipenv\vendor\pythonfinder\_vendor\pep514tools\_registry.py
#修改 _REG_KEY_INFO字典 中所有 Software\Python 为 E:\Python38 ,然后保存。再次运行 pipenv --rm ,发现不再报错。
结论
关键点就一个:要在虚拟环境里安装pyinstaller
如果你没有在虚拟环境中安装pyinstaller,你同样可以使用pyinstaller命令,但是调用的是你系统原本的那个python编译器,内含很多关联库,导致即使在虚拟环境中,你打包的exe文件仍然非常大。
另外一点要注意的是:要在虚拟环境里安装好你py文件中调用的库,不然打包出来也没法正常运行。
参考文献
https://www.cnblogs.com/chenbocheng/p/10839322.html
https://github.com/pypa/pipenv/issues/2983