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 文件稳定、高效。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/900289.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在使用 RabbitMQ 作为消息代理时,多个 Celery 实例(或应用)可以共享同一个 RabbitMQ 实例

在使用 RabbitMQ 作为消息代理时&#xff0c;多个 Celery 实例&#xff08;或应用&#xff09;可以共享同一个 RabbitMQ 实例。这样做可以简化基础设施管理&#xff0c;同时允许不同的 Celery 应用之间进行消息传递和协作。下面是如何配置多个 Celery 实例以使用同一个 RabbitM…

鸿蒙到底是不是纯血?到底能不能走向世界?

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 2016年5月鸿蒙系统开始立项。 2018年美国开始经济战争&#xff0c;其中一项就是制裁华为&#xff0c;不让华为用安卓。 2019年8月9日华为正式发布鸿蒙系统。问题就出在这里&#xff0c;大家可以仔细看。 安卓一…

Java之bean操作【复制】

#1024程序员节 | 征文# 文章目录 一、深拷贝二、不为空拷贝三、List转换 1024 祝各位大佬 节日快乐&#xff01; 在Java项目开发中&#xff0c;对Java对象操作如bean复制等&#xff0c;可使用 一、深拷贝 private static final Map<String, BeanCopier> BEAN_COPIER_M…

【忍无可忍,无需再忍】永久解决xshell or xftp 更新问题

1 背景介绍 提示“要继续使用此程序,您必须应用最新的更新或使用新版本”&#xff0c;笔者版本是xshell 6 距离一段时间不使用&#xff0c;或者遇到更新场景&#xff0c;总是会弹出这个框&#xff0c;实在是忍无可忍&#xff0c;无需再忍。 2 思路介绍 笔者上一篇关于如何解…

No.21 笔记 | WEB安全 - 任意文件绕过详解 part 3

&#xff08;一&#xff09;空格绕过 原理 Windows系统将文件名中的空格视为空&#xff0c;但程序检测代码无法自动删除空格&#xff0c;使攻击者可借此绕过黑名单限制。基于黑名单验证的代码分析 代码未对上传文件的文件名进行去空格处理&#xff0c;存在安全隐患。相关代码逻…

24.redis高性能

Redis的单线程和高性能 Redis是单线程吗&#xff1f; Redis 的单线程主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的&#xff0c;这也是 Redis 对外 提供键值存储服务的主要流程。 Redis 的多线程部分&#xff0c;比如持久化、异步删除、集群数据同步等&#xff…

C# 委托简述

1.委托 1.1什么是委托 委托委托 官网解释: 委托是安全封装方法的类型&#xff0c;类似于 C 和 C 中的函数指针。 与 C 函数指针不同的是&#xff0c;委托是面向对象的、类型安全的和可靠的。 委托的类型由委托的名称确定。 个人理解:委托就是一个方法的模板。它可以接收…

关于bp抓不到本地包

关于bp抓不到本地包 关于bp抓不到本地包 关于bp抓不到本地包 pikachu练习时&#xff0c;发现用bp抓本地&#xff08;127.0.0.1&#xff09;数据包时&#xff0c;竟然直接放行访问。 是因为系统默认127.0.0.1无法使用代理&#xff0c;因此bp才抓不到本地数据包&#xff0c;需要…

Python入门:Python如何强制终止程序(如何强制终止多线程程序)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 优雅的退出📝 强制的终止📝 应用场景对比🚀 优雅的退出🚀 强制的终止⚓️ 相关链接 ⚓️📖 介绍 📖 在开发过程中,有时候需要在满足一些条件的情况下让程序强制终止运行?今天我们将了解一下 Py…

Apifox「定时任务」进阶指南:监控、爬虫的自动化之旅

定时任务能干啥&#xff1f;&#xff1f;&#xff1f; 它能做的自动化操作实在太多了。先给大家列几个常见的&#xff0c;比如&#xff1a; 社交媒体动态监控&#xff1a;定时跟踪特定用户的动态&#xff0c;监控热门话题和趋势 数据采集与分析&#xff1a;定时爬取网站的文章…

机器学习学习笔记-20241018

继续跟着小土堆去学习机器学习 文章目录 Flatten1. Flatten 的作用2. 何时使用 Flatten3. PyTorch 中的 Flatten Sequentia优化器模型的保存与加载模型的完整训练 Flatten 在神经网络中&#xff0c;Flatten 操作是将高维的输入&#xff08;如二维图像或三维特征图&#xff09…

ArcGIS 10.8 安装教程

目录 一、ArcGIS10.8二、安装链接三、安装教程四、ArcGIS实战 &#xff08;一&#xff09;ArcGIS10.8 1. 概述 ArcGIS 10.8是由美国Esri公司开发的GIS平台&#xff0c;用于处理、分析、显示和管理地理数据&#xff0c;并实现数据共享。它具有新特性和功能&#xff0c;性能更…

C++ 设计模式 - 每日持续更新中

设计模式的核心 - 隔离程序的变化点和稳定点 零&#xff1a;面向对象设计八大原则 ①&#xff1a;依赖倒置(Dependency Inversion Principle) 高层模块不应依赖于低层模块&#xff0c;二者都应依赖于抽象&#xff1a;这意味着程序的高层逻辑不应该直接依赖于具体实现&#xf…

探索 SVG 创作新维度:svgwrite 库揭秘

文章目录 **探索 SVG 创作新维度&#xff1a;svgwrite 库揭秘**背景介绍库简介安装指南基础函数使用实战场景常见问题与解决方案总结 探索 SVG 创作新维度&#xff1a;svgwrite 库揭秘 背景介绍 在数字艺术和网页设计领域&#xff0c;SVG&#xff08;Scalable Vector Graphic…

QT:MaintenanceTool 模块安装工具

QT的MaintenanceTool 工具对已安装的 Qt 进行卸载、修复等其他操作时提示At least one valid and enabled repository required for this action to succeed 解决方式&#xff1a;在设置中添加一个临时的仓库 https://mirrors.tuna.tsinghua.edu.cn/qt/online/qtsdkrepositor…

Serv00 免费虚拟主机 零成本搭建 PHP / Node.js 网站

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 Serv00 是一个提供免费虚拟主机的平台&#xff0c;包含了 3GB 的存储空间和 512MB 的内存空间&#xff0c;足够我们搭建一个 1IP 的小网站了。同时他还不限制每月的流量&#xff0c;并提供了 16 个数据库&…

【深度学习代码调试5】标准化数据集:TensorFlow Datasets (TFDS)自动化数据加载与预处理

【标准化数据集】TensorFlow Datasets、TFDS&#xff1a;自动化数据加载与预处理 写在最前面1. 什么是 TensorFlow Datasets (TFDS)?主要特点&#xff1a; 2. TFDS 的核心 API&#xff1a;tfds.builder 和 download_and_preparetfds.builder&#xff1a;创建数据集构建器示例&…

FPGA实现PCIE视频采集转USB3.0输出,基于XDMA+FT601架构,提供3套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐本博已有的PCIE方案本博已有的USB通信方案 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图电脑端视频PCIE视频采集QT上位机XDMA配置及使用XDMA中断模块FDMA图像缓存FT601功能和硬件电路FT601读时序解读FT601写时序解读U…

【源码+文档】基于JavaWeb的村民健康管理平台【提供源码+答辩PPT+参考文档+项目部署】

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

未来医疗:大语言模型如何改变临床实践、研究和教育|文献精析·24-10-23

小罗碎碎念 这篇文章探讨了大型语言模型在医学领域的潜在应用和挑战&#xff0c;并讨论了它们在临床实践、医学研究和医学教育中的未来发展。 姓名单位名称&#xff08;中文&#xff09;Jan Clusmann德国德累斯顿工业大学埃尔朗根弗雷斯尼乌斯中心数字化健康研究所Jakob Nikola…