欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python 学习笔记 —— 打包python为exe可执行程序,可在无python环境运行

程序员文章站 2022-05-27 17:06:24
...

最近有需求要做个界面,并且打包到各种(win,android,linux,mac等)平台的可执行程序,先拿基础的windows练手。

如何写界面和跨平台打包,我下一篇博文再介绍。

应用到的技术介绍

我的环境是在anaconda3 prompt,也就是我之前博文里面的环境做的。

  1. 使用pyinstaller 打包没话说
  2. 使用python虚拟环境打包(下面会讲原因)
  3. 遇到的一些坑和问题

解释一下为什么用虚拟环境打包

因为pycharm或者你日常工作的python环境中,基本上会有很多用到和的没用到的库,在pyinstaller 打包的时候会一并打包进去,导致基本上一个很简单的py脚本,打包出来200M以上(我滴妈耶)

查看当前环境的库,anaconda中可以用下面的命令:

conda list

Python 学习笔记 —— 打包python为exe可执行程序,可在无python环境运行
能看到很多很多。。。。

因此,我们要建一个干净的虚拟环境,只装我们需要的库,然后再用pyinstaller 打包。

进入打包流程

首先可以,使用下面的命令,查看一下anaconda里面已经创建了的环境:

conda env list

Python 学习笔记 —— 打包python为exe可执行程序,可在无python环境运行
上面是我平时用的base(py3.7),py2(py2.7),py36(py3.6),nilmtk-env(电荷分解环境)

现在我们新建一个虚拟环境:
(虚拟环境的python版本,根据你要打包的文件选择,我这里是3.6)
(work_space 是虚拟环境的名字,可以自己起名)

conda create --name work_space python=3.6

Python 学习笔记 —— 打包python为exe可执行程序,可在无python环境运行输入 y 就可以继续安装虚拟环境的python了。(开vpn会快)

环境创建结束之后,使用

conda env list

再来查看一下我们的所有环境列表。
Python 学习笔记 —— 打包python为exe可执行程序,可在无python环境运行
可以看到我们新建环境的名称和目录。

之后使用命令:
(work_space是你创建的虚拟环境的名字)

activate work_space

来切换到新建的虚拟环境
Python 学习笔记 —— 打包python为exe可执行程序,可在无python环境运行
接下来我们在这个环境里面安装pyinstaller

pip install pyinstaller

Python 学习笔记 —— 打包python为exe可执行程序,可在无python环境运行

之后用pip安装我们要编译的python文件需要用到的库,比如说我装了指定版本的numpy和pyaudio
Python 学习笔记 —— 打包python为exe可执行程序,可在无python环境运行

环境都搞好了,我们就可以打包啦
打包命令参照https://www.jianshu.com/p/48f6dea265eb讲的很清楚

我的程序很简单就一个py脚本,在控制台里面显示,我只需要打包为一个exe。(如果你的脚本有很多,请参照上面那个链接的打包教学,吧py关联起来打包)

切换到要打包的py文件目录,

然后我的命令就是
(打包getChord_micphone.py为一个.exe,且显示控制台)

pyinstaller -c -F getChord_micphone.py

Python 学习笔记 —— 打包python为exe可执行程序,可在无python环境运行
执行后一大堆英文

Python 学习笔记 —— 打包python为exe可执行程序,可在无python环境运行
最后会显示出打包成功,和exe的路径。

Python 学习笔记 —— 打包python为exe可执行程序,可在无python环境运行
一看
哇塞!
只有18Mb!!
超开心有没有!!!

然后一运行。。噗。。。。闪退结束。。。。。

不要慌~~,我教你怎么看报错

切换目录到生成的.exe的目录
使用 .\ 来运行这个文件
例如我的:

.\getChord_micphone.exe

Python 学习笔记 —— 打包python为exe可执行程序,可在无python环境运行
你自己的脚本没用到这个库,对不对,他偷偷用了还没找到

所以我们打包时候屏蔽掉他

回来刚才要打包的python文件的目录

会发现这个地方多了很多文件

Python 学习笔记 —— 打包python为exe可执行程序,可在无python环境运行
我们用文本编辑器或者记事本什么的,打开同名的 .spec文件

在其中的hiddenimports里面加入上面报错中找不到的那个pkg_resources.py2_warn
Python 学习笔记 —— 打包python为exe可执行程序,可在无python环境运行
保存。

之后切换目录到这里,将之前的打包命令修改为,用这个配置文件打包
(getChord_micphone.spec是你的那个配置文件)

pyinstaller -c -F getChord_micphone.spec

Python 学习笔记 —— 打包python为exe可执行程序,可在无python环境运行
又是一堆英文。。。
耐心等待。。。

Python 学习笔记 —— 打包python为exe可执行程序,可在无python环境运行
又打包成功了
还是18Mb
轻轻双击生成的exe
Python 学习笔记 —— 打包python为exe可执行程序,可在无python环境运行
搞定!~~~

收尾工作

打包完成之后,如果还需要用这个虚拟环境打包同一个项目,就可以保留了。

如果不需要这个虚拟环境的话,

conda env list
activate 你之前的虚拟环境名称
delete -n 要删除的虚拟环境名称 --all

就OK了。