Python 打包成 EXE 的方法详解

news2024/11/28 2:46:21

#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.coloradmin.cn/o/2222584.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

修改windows11的hosts,配置127.0.0.1域名(最清晰)

这里记录的是学习短链接项目&#xff0c;通过配置127.0.0.1域名&#xff0c;达到可以通过域名代替127.0.0.1访问127.0.0.1下的某个端口的服务&#xff0c;达到短链接的前缀的效果&#xff0c;这里展示windows11的更改过程。 一、hosts文件路径 C:\Windows\System32\drivers\e…

【Java数据结构】---哈希表

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 &#xff0c;Java 欢迎大家访问~ 创作不易&#xff0c;大佬们点赞鼓励下吧~ 前言 在顺序结构以及平衡树中&…

littlefs源码分析1-设计思考

1.littlefs设计目的 littlefs 最初是作为一个实验而构建的&#xff0c;目的是在微控制器的环境中了解文件系统设计。目的是&#xff1a;构建一个在不使用无限制内存的情况下对电源丢失和闪存磨损具有弹性的文件系统。 这对嵌入式文件系统littlefs提出了三个主要要求&#xff1…

【Linux】 exit 和 _exit 的区别

在Linux系统中&#xff0c;exit(int status) 和 _exit(int status) 都是用来终止进程的函数&#xff0c;都能通过参数 int status传递一个整型的退出状态码给父进程&#xff0c;但它们之间有一些重要的区别。 1. 头文件不同 exit() 函数定义在 <unistd.h> 中 _exit() 函…

【Python爬虫实战】高效解析和操作XML/HTML的实用指南

&#x1f308;个人主页&#xff1a;https://blog.csdn.net/2401_86688088?typeblog &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、lxml的安装 &#xff08;一&#xff09;使用 pip 安装 &#xff08;二&…

(一)ubuntu下通过c++编译cpu版本paddleocr-2.8.1

编译环境 操作系统&#xff1a;ubuntu 20.04/22.04 OCR版本&#xff1a;paddleocr 2.8.1 Opencv版本&#xff1a;opencv3.4.16/4.10.0 o参照官方文档&#xff1a; PaddleOCR/deploy/cpp_infer/readme_ch.md at release/2.6 PaddlePaddle/PaddleOCR GitHubhttps://github…

Vue3脚手架和指令

什么是Vue&#xff1f; 简单来说&#xff0c;vue就是可以让有写代码很爽的体验。 概念&#xff1a;Vue是一套构建用户界面的渐进式JavaScript框架。 什么是构建用户界面&#xff1f; 基于数据渲染出用户可以看到的界面 什么是渐进式&#xff1f; 渐进式就是循序渐进的学习…

LabVIEW提高开发效率技巧----VI继承与重载

在LabVIEW开发中&#xff0c;继承和重载是面向对象编程&#xff08;OOP&#xff09;中的重要概念。通过合理运用继承与重载&#xff0c;不仅能提高代码的复用性和灵活性&#xff0c;还能减少开发时间和维护成本。下面从多个角度介绍如何在LabVIEW中使用继承和重载&#xff0c;并…

HttpURLConnection构造请求体传文件

HttpURLConnection构造请求体传文件 在Java中&#xff0c;使用HttpURLConnection构造请求体传输文件&#xff0c;你需要做以下几步&#xff1a; 1、创建URL对象指向你想要请求的资源。 2、通过URL打开连接&#xff0c;转换为HttpURLConnection实例。 3、设置请求方法为POST。 …

Java 多线程(五)—— 阻塞队列、wait、notify

wait wait 和 notify 都是 Object 类提供的方法&#xff0c;也就是说 Java 任意对象都可以使用 这两个方法。 首先 wait 会抛出 InterruptedException 这个异常&#xff0c;说明这个方法可以被 interrupt 给唤醒。 然后我们是不能直接使用 wait 方法的&#xff0c;否则还会抛…

Win10系统安装docker操作步骤

Docker下载 docker下载地址&#xff1a;Docker: Accelerated Container Application Development 打开网页后&#xff0c;点击图下所示&#xff0c;下载windows版本的docker 启用Hyper-V 和容器特性 右键左下角windows图标&#xff0c;选择应用和功能 然后在下面的界面中&am…

电脑技巧:Rufus——最佳USB启动盘制作工具指南

目录 一、功能强大&#xff0c;兼容性广泛 二、界面友好&#xff0c;操作简便 三、快速高效&#xff0c;高度可定制 四、安全可靠&#xff0c;社区活跃 在日常的电脑使用中&#xff0c;无论是为了安装操作系统、修复系统故障还是进行其他需要可引导媒体的任务&#xff0c;拥…

初始JavaEE篇——多线程(2):join的用法、线程安全问题

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;JavaEE 目录 模拟实现线程中断 join的用法 线程的状态 NEW&#xff1a; RUNNABLE&#xff1a; TIMED_WAITING&#xff1a; TERMINATED…

ElasticSearch-7.17.10集群升级至ElasticSearch-7.17.24

文章目录 集群概览 主机名系统版本es01CentOS_7.6-aaarch64ElasticSearch-7.17.10es02CentOS_7.6-aaarch64ElasticSearch-7.17.10es03CentOS_7.6-aaarch64ElasticSearch-7.17.10 需求 1. 将三台ES节点从ElasticSearch-7.17.10升级至ElasticSearch-7.17.24&#xff1b; 2. 保证…

1212,查询球队积分

查询球队积分 表: Teams ------------------------- | Column Name | Type | ------------------------- | team_id | int | | team_name | varchar | ------------------------- team_id 是该表具有唯一值的列。 表中的每一行都代表一支独立足球队。表…

HarmonyOS 模块化设计

1.HarmonyOS 模块化设计 模块化设计文档   应用程序包开发与使用文档 1.1. 概述 组件化一直是移动端比较流行的开发方式&#xff0c;有着编译运行快&#xff0c;业务逻辑分明&#xff0c;任务划分清晰等优点&#xff0c;HarmonyOs组件化的使用&#xff0c;有利于模块之间的解…

【WRF数据准备】地形-SRTM的3s高分辨率地形数据集

【WRF数据准备】地形-SRTM的3s高分辨率地形数据集 数据概述数据下载 数据处理合并多个SRTM 数据-GDAL库转为geogrid二进制格式WPS 中的设置 数据对比海洋区域缺省值参考 WRF中地形数据&#xff08;海拔高度&#xff09;分辨率最高为30s&#xff0c;差不多就是900 m&#xff0c;…

CST光子晶体微谐振腔分析和Q值提取

本期介绍基于文献[1]的一种二维光子晶体波导结构&#xff0c;利用路径上加微谐振腔来实现一些特殊的滤波功能。一般是要看谐振频率的变化和Q值变化&#xff0c;因为工艺误差或任何造成结构不规则的因素对这样细小的结构谐振来说影响非常大。下图为文献中提到的硅薄膜结构&#…

使用Jenkins持续集成的一些经验总结!

01、Performance插件兼容性问题 自由风格项目中&#xff0c;有使用 Performance 插件收集构建产物&#xff0c;但是截至到目前最新版本&#xff08;Jenkins v2.298&#xff0c;Performance&#xff1a;v3.19&#xff09;&#xff0c;此插件和Jenkins都存在有兼容性问题&#x…

业余时间试一试利用AI 人工智能赚钱

内容创作与写作&#xff1a; 撰写文章&#xff1a;许多网站、博客和企业都需要大量的优质内容。利用 AI 工具如 ChatGPT 等&#xff0c;获取文章的思路、框架甚至初稿&#xff0c;然后根据自己的知识和经验进行修改、润色和完善。你可以在一些自由撰稿人平台、内容创作平台上承…