当前位置: 首页 > article >正文

Python 打包成 EXE 的方法详解

#1024程序员节|征文#

日常开发中,python由于其便捷性成为了很多人的首选语言,但是python的环境配置也是有点麻烦的,那么我们如何让其变得更加友好呢?没错,就是打包成exe可执行文件。

一、PyInstaller 简介

PyInstaller 是一个非常流行的 Python 工具,可以将 Python 脚本打包为独立的可执行文件。它支持 Windows、macOS 和 Linux 系统,特别适合需要跨平台打包的场景。PyInstaller 会自动分析你的 Python 代码,找到所有需要的依赖,并将它们打包在一起。最终生成的 EXE 文件包含了 Python 解释器和所有依赖的库,使得用户无需安装 Python 环境即可运行程序。

二、环境准备

在开始之前,请确保你的系统已经安装了以下环境:

  • Python 版本:建议 Python 3.6 或以上版本。
  • PyInstaller:通过 pip 进行安装。

你可以通过以下命令来安装 PyInstaller

pip install pyinstaller

安装完成后,可以通过命令行输入 pyinstaller --version 检查是否安装成功。

三、将 Python 脚本打包成 EXE

以下是将 Python 脚本打包成 EXE 文件的具体步骤:

1. 编写一个简单的 Python 脚本

首先,编写一个简单的 Python 脚本作为打包示例,假设脚本名为 hello.py

print("Hello, World!")

2. 使用 PyInstaller 打包

在终端或命令提示符中,导航到你的 Python 脚本所在的目录,运行以下命令:

pyinstaller --onefile hello.py

3. 查看打包结果

打包完成后,会生成一个 dist 文件夹,里面包含了 hello.exe。你可以直接运行这个 EXE 文件,查看是否输出了 "Hello, World!"。

四、PyInstaller 的常用选项

PyInstaller 提供了许多可选参数,来满足不同需求。下面是一些常用的选项:

  • --onefile:将所有依赖打包成一个独立的 EXE 文件。
  • --windowed:不显示命令行窗口,适合打包 GUI 程序。
  • --icon=<icon.ico>:指定 EXE 文件的图标。
  • --add-data:添加外部文件或目录到打包文件中(如配置文件、图像等)。

举个例子,如果我们要打包一个带有图标的 GUI 程序,可以使用以下命令:

pyinstaller --onefile --windowed --icon=myicon.ico myscript.py

五、打包后的文件优化

打包后的 EXE 文件可能会较大,这是因为 PyInstaller 会将 Python 解释器和所有依赖打包在一起。如果你觉得文件过大,可以尝试以下优化方案:

  1. 剔除不必要的模块:有些依赖模块在打包时被误导入了。你可以通过 --exclude-module 参数来排除不必要的模块。

    pyinstaller --onefile --exclude-module tkinter hello.py

  2. 使用 UPX 压缩PyInstaller 支持使用 UPX 对生成的 EXE 进行压缩,减少体积。首先,你需要安装 UPX 工具,然后在打包时使用 --upx-dir 参数指定 UPX 的路径。

    pyinstaller --onefile --upx-dir=/path/to/upx hello.py

六、常见问题与解决方案

1. 打包后程序无法运行

如果你发现打包后的程序在某些计算机上无法运行,可能是因为该程序依赖了一些特定的动态链接库(DLL)。你可以通过以下方式解决:

  • 检查 Python 环境中是否有缺失的依赖项。
  • 确保打包时使用的是正确的 Python 版本和相关库。

3. 文件过大

可以通过使用 UPX 压缩、剔除不必要的模块来减小文件大小。同时,确保在 requirements.txt 中只包含必要的依赖库。

七、总结

通过 PyInstaller,我们可以轻松地将 Python 脚本打包成 EXE 文件,方便其他人直接使用我们的程序而无需安装 Python 环境。在打包过程中,熟悉 PyInstaller 的各种选项和功能,能够帮助我们更好地控制打包结果,确保生成的 EXE 文件稳定、高效。

实战:可以进行桌宠项目试试效果,可以参考小黄之前的文章。

本人介绍:编程、写作的小菜鸡,喜交天下各路英雄好友,欢迎关注本人一起学习、交流。如果您遇到什么问题请给我留言。


http://www.kler.cn/news/364412.html

相关文章:

  • 循环双链表,将L改造为L=(a1,a3,…,an,a4,a2)
  • Qt 学习第 天:线程与多线程
  • Redis 命令集 (超级详细)
  • php AES 加解密(支持在线运行)
  • 1.nginx安装【Docker】
  • 基于RabbitMQ,Redis,Redisson,RocketMQ四种技术实现订单延时关闭功能及其相关优缺点介绍(以12306为主题)
  • 管理类联考 信息整理和经验分享
  • 洞察数据之美:用可视化探索销售与温度的关系
  • Java中String、StringBuffer和StringBuilder的区别是什么?
  • 【赵渝强老师】Oracle的参数文件与告警日志文件
  • 微信小程序25__实现卡片变换
  • Qt 学习第 天:线程与多线程
  • 4个在线抠图网站,AI一键智能抠图,3秒抠出!
  • 自学C语言——函数(全)
  • 基于单片机的短信火灾报警系统
  • 错误:无法推送一些引用到 ‘https://gitee.com/chek_kk/python-electron-app.git‘
  • RHCSA笔记一
  • 反悔贪心学习笔记[浅谈]
  • 【Axure高保真原型】分级树筛选中继器表格
  • 基于 Python 的机器学习模型部署到 Flask Web 应用:从训练到部署的完整指南
  • 深入计算机语言之C++:类与对象(中)
  • Redis批量获取缓存的方法
  • 【加密系统】华企盾DSC服务台提示:请升级服务器,否则可能导致客户端退回到旧服务器的版本
  • js基础入门篇
  • 【计算机网络 - 基础问题】每日 3 题(五十六)
  • 双十一母婴用品排行榜推荐出炉!建议收藏!看宝妈要买哪些东西