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

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

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

应用到的技术介绍

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

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

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

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

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

conda list

在这里插入图片描述
能看到很多很多。。。。

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

进入打包流程

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

conda env list

在这里插入图片描述
上面是我平时用的base(py3.7),py2(py2.7),py36(py3.6),nilmtk-env(电荷分解环境)

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

conda create --name work_space python=3.6

在这里插入图片描述输入 y 就可以继续安装虚拟环境的python了。(开vpn会快)

环境创建结束之后,使用

conda env list

再来查看一下我们的所有环境列表。
在这里插入图片描述
可以看到我们新建环境的名称和目录。

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

activate work_space

来切换到新建的虚拟环境
在这里插入图片描述
接下来我们在这个环境里面安装pyinstaller

pip install pyinstaller

在这里插入图片描述

之后用pip安装我们要编译的python文件需要用到的库,比如说我装了指定版本的numpy和pyaudio
在这里插入图片描述

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

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

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

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

pyinstaller -c -F getChord_micphone.py

在这里插入图片描述
执行后一大堆英文

在这里插入图片描述
最后会显示出打包成功,和exe的路径。

在这里插入图片描述
一看
哇塞!
只有18Mb!!
超开心有没有!!!

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

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

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

.\getChord_micphone.exe

在这里插入图片描述
你自己的脚本没用到这个库,对不对,他偷偷用了还没找到

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

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

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

在这里插入图片描述
我们用文本编辑器或者记事本什么的,打开同名的 .spec文件

在其中的hiddenimports里面加入上面报错中找不到的那个pkg_resources.py2_warn
在这里插入图片描述
保存。

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

pyinstaller -c -F getChord_micphone.spec

在这里插入图片描述
又是一堆英文。。。
耐心等待。。。

在这里插入图片描述
又打包成功了
还是18Mb
轻轻双击生成的exe
在这里插入图片描述
搞定!~~~

收尾工作

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

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

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

就OK了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值