首页 > 编程知识 正文

python打包linux应用,python 程序打包发布

时间:2023-05-06 18:38:16 阅读:29417 作者:4502

在公众号后台回复“图书“,了解更多号码的主新书内容

作者: qpdfs

资料来源:凹凸数据

标准打包当前所有常用的打包exe方法都是在Pyinstaller中实现的,本文也使用此常用方法。 如果是这位熟悉的伙伴,就可以直接掉在书的下半部分。

为什么要打包? 众所周知,Python脚本不能在未安装Python的计算机上运行。

我们想写一个数据分析/自动化事务的小脚本,分享给同事姐姐使用,但是她的电脑里没有Python。

此时,只要将脚本打包为exe文件,并将微信发送给她,即使她的电脑上没有安装Python解释器,该exe程序也可以在上面运行。 不是很美吗?

(当然,如果你想帮姐姐安装Python,和姐姐建立感情,我就当我没说)

要安装Pyinstaller,请先安装Pyinstaller,然后直接在cmd上使用pip命令

如果网速太慢,pipinstallpyinstaller可以在国内源之间切换加速。 正文的其他部分直接使用国内来源,不重复评论。

pip install-I https://pypi.douban.com/simple/py installer #豆瓣源

pip install-I https://pypi.tuna.Tsinghua.edu.cn/simplepyinstaller #清华源

Pyinstaller打包过程在此示例中显示了以前名为《Python自动化办公 | 同事要我帮忙补写178份Word日报!》的python代码。 我把其中的脚本py_word.py、要处理的表文件workbook.xlsx以及准备的软件图标图像chengzi.ico放在了我电脑的F:py_word目录中(如有兴趣,请在文末下载获取。

1、cmd切换到刚放置文件的目录

2、执行指令py installer-f-w-I chengzi.icopy _ word.py,执行过程特别长,没有记录视频。

运行完成后,将在当前目录中添加几个文件夹,并打开其中名为dist的文件夹。

已经生成了名为py_word的exe APP,图标也是我们设定的橙色图案,似乎成功了一半。

不运行,试一下能否正常生成word日报吗?

打包并运行exe

执行成功,但很遗憾文件有点大(339M )。

Pyinstaller参数详细说明刚刚执行的命令

pyinstaller-f-w-I chengzi.icopy _ word.py说明py installer的参数。 -f参数表示创建独立的可执行程序。

-w是指程序启动时命令行不打开。 如果不输入-w参数,则会出现黑洞控制台窗口。 例如,在刚才的脚本中输入print('Helloworld!' 添加,但不要输入-w参数。 否则,在运行时会发生错误。 毕竟,赫尔洛世界! 必须在命令行上打印。 此外,-w参数在GUI接口中非常有用。

最后一个-i chengzi.ico是指设置自己的图标模式。 默认的软件包图像如下图所示。 此参数也可以写为--icon=chengzi.ico

最后,让我们总结一下:

Pyinstaller-Fpy_word.py软件包exe

Pyinstaller-F-wpy_word.py不带控制台的打包

py installer-f-w-I chengzi.icopy _ word.py软件包指定exe图标包

这三个是比较常用的参数,其他参数请参照下表

Pyinstaller参数大全

ico图像生成软件喜欢放自己的图标,那么从哪里来那么多ico图像呢?

一个可以找专业的ico图像网站,但都很小。 画廊也很小。

另一个是可以自己生成。 这里是一个可以将其他格式的图像转换为ico格式的网站。 https://app.xunjiepdf.com/img2icon /

ico图像格式转换

压缩后打包了。 伙伴们

到了最激动人心的时刻,刚生成的exe太大了,尝试通过微信传输300多个软件程序很辛苦。

我也尝试了很多方法,包括如何修改spec文件来定制包、pipenv虚拟环境和使用开源upx压缩,但流程往往很麻烦,或者成功率不高。

我想分享的是,自己一直使用的最简单、成功率最高的方法——conda创建虚拟环境。

Python的包装为什么很大? 在压缩打包之前,请简要说明一下为什么Python的包装太大。

Python封装了exe,不仅体积大,而且运行非常慢。 虽然解释器语言大多是这样的,但Python尤为突出。 我想要

解决大而慢,只能用编译型语言,如C,C++,甚至VB都好很多,体积最小的是汇编。[1]

此外,还有知乎大佬说是因为“Anaconda里内置了很多库,打包的时候打包了很多不必要的模块进去,要用纯净的Python来打包。”

所以我们可以模拟一个新环境,其中只安装我们本次打包所必要的工具包即可。

那最适合的就是——虚拟环境了!

虚拟环境

Python创建虚拟环境的方法有很多,而我是个Anaconda忠实用户,如果你跟我一样,那就简单了。(大家也可以使用Virtualenv、Pipenv来设置虚拟环境,善用搜索,方法大同小异)

先记几个命令,很简单

 

conda create -n 虚拟环境名字 python==3.6  #创建虚拟环境

 

conda activate 虚拟环境名字  #激活虚拟环境

 

conda deactivate  #退出虚拟环境

从开始菜单运行“Anaconda Prompt”,出现的界面输入创建虚拟环境的指令。成功创建了一个名字为aotu,且基于python版本3.6的虚拟环境。

在创建过程中需要回复(y/n),Yes,再激活虚拟环境

conda安装的虚拟环境,会把虚拟环境的目录生成在anaconda安装目录下的env目录下。

当然我们也可以在刚刚的窗口,使用命令conda info --envs,来查看conda环境下所有的虚拟环境

安装所需的库

上面我们已经创建并激活了名为aotu虚拟环境,输入conda list可以查看当前虚拟环境里已经安装的库。

我们打开所要打包的Python脚本,对比上图,发现pandas,docx这两个库还需要额外安装。当然,也不能缺了打包必不可少的pyinstaller库。

待打包脚本

安装库的过程不再赘述

 

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas

 

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-docx

 

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller

安装后再看

已成功安装,还有一些因为这几个库所附带安装的,就不管他们了。

Pyinstaller打包步骤

这里就不再重复了,只换个苹果图标试试

Pyinstaller -F -w -i apple.ico py_word.py

生成

成功压缩到29.8M,如果不导入pandas这位大神,应该就可以10多M了

运行一下,毫无问题

最后再简单总结一下虚拟环境+打包的全过程(只三步):

 

#创建虚拟环境

conda create -n aotu python=3.6

 

#激活虚拟环境

conda activate aotu

 

#Pyinstaller打包

Pyinstaller -F -w -i apple.ico py_word.py

总结一些小坑

1、说起来还是有点玄学,上文中一模一样的过程我在两个电脑都执行过一遍。在其中一个上显示缺少xlrd这个库,安装后成功打包,也是一样的大小。小伙伴们可以在文末获取文件,也试试。

2、在安装库是要注意一些库名,比如docx这个库不要pip install docx,而是需要

pip install python-docx

还有一些库可能因为版本不同导致不能使用,多碰碰壁就好了。

3、为了防止打包时候有些库没安装好,可以先在虚拟环境中执行一下Python脚本。运行无误的话再打包,比较保险。

4、最后,如果想要删除虚拟环境的话,可执行下方命令

conda remove -n aotu--all 

5、打包为exe的话,版本尽量选择python3.6+32位版本,因为win64位系统向下兼容32位程序,但是如果不考虑32位系统的话无所谓,直接python64位版本直接打包就可以,只是只能在win64位系统上跑。[2]

下载链接

如果大家想测试Python打包,手头又没有合适的文件,可以在公众号后台回复“打包”即可获得以下文件:

ps:

windows环境下可能存在以下的问题,就是在运行打包命令的时候会报错,RecursionError: maximum recursion depth exceeded,具体如下图:

解决方法如下l:

pyinstaller 之后会生成一个和xxx.py文件对一个的  xxx.spec 文件,如下图

打开xxx.spec文件,在行首导入sys包,然后设置一下递归调用的限制次数,可以尽量大一点,我这里设置100万次后就没有报错了,具体如下图所示

 

修改之后,然后  pyinstall   -F  xxx.spec (你刚才修改过的文件)就行了,  --add-data 参数就不需要了,spec文件里面已经有了。

 

然后就解决了 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。