【Python】如何将Python脚本封装成可执行文件

一、背景

区别于 Cpp 等编程语言,Python 无法将其脚本直接转为可执行的文件。

「可执行文件」常见如:
Win 下后缀为 exe 的文件
Mac 下后缀为 app 的文件

在对应环境执行 Python 脚本,需要对应环境也同样有 Python 环境。这样在我们想给业务人员提供自动化的数据处理脚本 或 给女盆友绘制一棵圣诞树时,就会有产生一个困境:业务人员 / 女盆友 的电脑没有 Python 环境,即便装了对应的环境,后续的维护也较为麻烦。

既然无法直接转为可执行文件,那是否可以借助其他方法迂回地实现脚本的封装呢?答案是肯定的。

本文将从实现方法、具体内容、常见问题(如打包后的文件过大;Mac上无法打开文件等)3 个模块进行阐述。

二、实现
2.1 实现方法

最通用且方便的是,借助第三方库将对应 Python 脚本以及环境统一打包、封装。
推荐 Pyinstaller ,在 Win 和 Mac 下都有很好的表现。

打包 Python 脚本的常用第三方库:
Win 环境: Pyinstaller / Py2exe
Mac 环境:Pyinstaller / Py2app (坑多,亲测不算好用)

2.2 具体内容

以「绘制圣诞树」的脚本来举例:

圣诞树代码详见:网上很多,找一个即可

Step 1:

首先,打开 终端 (Terminal),通过 cd 命令进入圣诞树代码脚本所在的目录下:

cd <所在路径>
Step 2: 使用 Pyinstaller 库封装脚本:

继续在终端依次执行下述命令:

pyinstaller -F -w -i <app 文件的图标文件名>.icns --clean --noconfirm <Python脚本名称>.py
pyinstaller -F -w --clean --noconfirm <Python脚本名称>.spec

-i 参数是指定可执行文件的图标,可不指定;
若进行指定,Win下支持 ico 格式的文件,Mac 下支持 icns 格式的文件;
可通过在线的图片格式转换网站,将 png 等格式的图片转为需要的 ico / icns 的文件

Step 3: 结果验收

生成的可执行文件会保留在代码脚本所在的目录下的 dist 文件夹下,Win 环境下是 .exe 文件,Mac 环境下是 .app 文件,双击即可运行。
将对应文件拷贝出来发给需要的人即可,不需要对方装有 Python 环境。

  • 下图是结果的展示:

在这里插入图片描述

  • 绘制后的成图:
    在这里插入图片描述
2.3 常见问题 Q&A
Q1: 封装后的文件过大怎么办?

原因: Pyinstaller 默认将当前整个 Python 环境 和 脚本内容封装进去的,因此在 Python 环境中第三方库越多,打包后的可执行文件越大;

解决方案: 创建虚拟环境,进入(activate)虚拟环境后 pip 安装脚本需要用到的库,然后再用 Pyinstaller 封装脚本即可。

conda create -n <虚拟环境名称> python=<Python的版本>
conda activate <虚拟环境名称>
Q2: Mac 下无法打开文件?

原因: 双击 app 文件后显示“应用程序 无法打开”的弹窗,在大多情况下,都是因为对应文件没有执行权限;

解决方案: 在终端用 chmod 命令赋权限。

chmod +x <文件完整目录>
Q3: 如何通过参数来控制应用?
  1. Python 脚本中调用外部文件的变量实现,实际运用时修改外部文件的内容即可;
  2. 更优雅的方法:用 Gui 开发工具实现,如简易便捷的pysimplegui。
题外话

[希望本文有大家有帮助, 如有错误,欢迎指正。
本文转自朋友作品:
作者:米竹
地址:https://blog.csdn.net/xienan_ds_zj/article/details/122148469
本文地址:https://blog.csdn.net/weixin_41613094/article/details/122395152

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值