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

py2exe,一个神奇的 Python 库

在众多Python打包工具中,py2exe无疑是一款出色的选择。它能够将Python脚本转换成可在Windows平台上独立运行的可执行文件,极大地方便了程序的分发与部署。本文将深入探讨py2exe的特性和使用方法,让你在创建桌面应用程序时更加游刃有余。

安装

要使用 py2exe 将您的 Python 脚本转换为 Windows 上的可执行程序,首先需要确保安装了 py2exe 库。以下是安装步骤:

  1. 通过pip安装:打开命令行界面(Windows的CMD或PowerShell),输入以下命令来通过pip安装 py2exe

    pip install py2exe
    

    确保您的pip是最新版本,以避免安装过程中可能出现的兼容性问题。

  2. 确认安装成功:安装完成后,您可以通过以下命令来确认 py2exe 是否正确安装:

    python -m py2exe --version
    

    如果返回版本号,那么表示 py2exe 已经安装成功。

现在,py2exe 已经准备好帮助您将 Python 脚本打包成可执行程序了。接下来,您可以通过 setup.py 文件来配置和运行打包过程。在实际使用之前,我们将在接下来的章节中详细探讨 py2exe 的基本功能和高级功能。

功能特性

  • 跨平台:能够在Windows环境下将Python脚本转换为可执行文件。
  • 易用性:简单的命令行参数和配置脚本,快速实现打包。
  • 兼容性:生成的可执行文件能够在未安装Python的机器上运行。
  • 扩展支持:支持包含第三方库和模块的Python程序打包。
  • 自定义:允许用户自定义打包过程中的细节,如图标、版本信息等。

基本功能

创建可执行文件

py2exe 的最基本功能是将 Python 脚本转换成 Windows 上的可执行文件(.exe)。以下是转换 Python 脚本的基本步骤:

# setup.py
from distutils.core import setup
import py2exesetup(console=['your_script.py'])# 运行命令行
# python setup.py py2exe

在上述代码中,your_script.py 是你想要转换成可执行文件的 Python 脚本文件名。运行 setup.py 脚本后,py2exe 将生成可执行文件。

单文件打包

py2exe 支持单文件打包模式,即将 Python 脚本和所有依赖打包成一个可执行文件。

# setup.py
from distutils.core import setup
import py2exesetup(windows=['your_script.py'])# 运行命令行
# python setup.py py2exe

在这个例子中,windows 参数用于指定 GUI 程序的入口点。

打包数据文件

如果你的程序需要读取额外的数据文件,你可以使用 data_files 参数包含这些文件。

# setup.py
from distutils.core import setup
import py2exedata_files = [("my_data", ["data_file1.txt", "data_file2.txt"])]setup(console=['your_script.py'], data_files=data_files)# 运行命令行
# python setup.py py2exe

my_data 是一个目录名称,这个目录会被创建在生成的可执行文件所在的目录中,并包含指定的数据文件。

使用自定义图标

你可以为生成的可执行文件指定一个自定义图标。

# setup.py
from distutils.core import setup
import py2exesetup(console=['your_script.py'],options={"py2exe": {"dll_excludes": ["MSVCP90.dll"], "bundle_files": 1}},data_files=[('', ['your_icon.ico'])]
)# 运行命令行
# python setup.py py2exe

在这个例子中,your_icon.ico 是你想要使用的图标文件。bundle_files 参数设置为 1 来确保所有文件被捆绑到一个可执行文件中。

排除不必要的 DLL 文件

有时,你可能想要从打包的应用程序中排除某些不必要的 DLL 文件。

# setup.py
from distutils.core import setup
import py2exesetup(console=['your_script.py'],options={"py2exe": {"dll_excludes": ["MSVCP90.dll"]}}
)# 运行命令行
# python setup.py py2exe

在这里,MSVCP90.dll 是一个示例,你可以在 dll_excludes 列表中添加或删除其他 DLL 文件。

以上是 py2exe 的基本功能介绍,每个功能都配有了相应的代码示例和注释,以便读者能够快速理解和应用。

高级功能

自定义打包脚本

py2exe 允许通过自定义打包脚本来控制打包过程,以适应更复杂的打包需求。

# setup.py
from distutils.core import setup
import py2exesetup(console=['hello.py'],options={"py2exe": {"bundle_files": 1,  # 打包所有文件"compressed": True,  # 压缩打包文件}},
)

使用包含资源的包

当你的程序需要使用外部资源(如图片、数据文件等)时,可以通过 data_files 参数将这些资源包含在打包后的程序中。

# setup.py
from distutils.core import setup
import py2exesetup(console=['hello.py'],data_files=[('image', ['image/icon.png'])],  # 包含图片资源
)

使用自定义图标

你可以为打包后的可执行文件指定一个自定义图标。

# setup.py
from distutils.core import setup
import py2exesetup(console=['hello.py'],options={"py2exe": {"dll_excludes": ["MSVCP90.dll"],"icon_resources": [(1, "app.ico")],  # 自定义图标}},
)

生成单一可执行文件

py2exe 支持生成单一可执行文件,便于分发。

# setup.py
from distutils.core import setup
import py2exesetup(console=['hello.py'],options={"py2exe": {"bundle_files": 2,  # 生成单一可执行文件}},
)

指定排除的 DLL 文件

为减小打包后的程序体积,你可以通过 dll_excludes 参数指定不需要打包的 DLL 文件。

# setup.py
from distutils.core import setup
import py2exesetup(console=['hello.py'],options={"py2exe": {"dll_excludes": ["MSVCP90.dll"],  # 排除特定 DLL}},
)

通过以上高级功能,你可以更灵活地控制 py2exe 打包过程,以适应不同场景下的打包需求。

实际应用场景

将Python脚本转换为可执行文件

使用py2exe可以将Python脚本打包成Windows平台下的可执行文件,方便分发和部署。

# setup.py
from distutils.core import setup
import py2exesetup(console=['your_script.py'])

运行python setup.py py2exe命令后,会在dist目录下生成可执行文件。

创建图形用户界面(GUI)程序

py2exe也支持将使用PyQt或Tkinter等图形库的Python程序转换为可执行文件。

# setup.py
from PyQt4 import uic
from distutils.core import setup
import py2execlass MyGUI:def __init__(self):# 加载UI文件self.ui = uic.loadUi("my_gui.ui")setup(windows=['my_gui.py'])

运行python setup.py py2exe命令后,会在dist目录下生成GUI程序的可执行文件。

打包包含第三方库的脚本

当Python脚本依赖第三方库时,py2exe可以自动将依赖的库一起打包。

# setup.py
from distutils.core import setup
import py2exe
import numpysetup(console=['your_script_with_numpy.py'])

确保第三方库已正确安装,并使用python setup.py py2exe命令打包。

制作安装包

通过py2exe,还可以创建包含可执行文件、依赖库和资源文件的安装包。

# setup.py
from distutils.core import setup
import py2exesetup(windows=['your_app.py'],data_files=['path/to/your/resource/file'],options={'py2exe': {'bundle_files': 1}}
)

使用python setup.py py2exe命令生成安装包,并通过data_files参数包含额外的资源文件。

跨平台部署

尽管py2exe主要用于Windows平台,但它可以协助开发者在其他平台上开发的Python程序,在Windows平台上快速部署。

# setup.py
from distutils.core import setup
import py2exesetup(console=['cross_platform_script.py'])

在Linux或macOS上开发完成后,只需在Windows平台上运行python setup.py py2exe命令即可生成可执行文件。

通过以上实际应用场景,可以看出py2exe为Python程序的分发和部署提供了极大的便利,尤其适用于需要在Windows平台上运行的场景。

总结

py2exe作为Python程序转exe的工具,简化了打包过程,提升了开发效率。它不仅支持基本转换需求,还提供了高级定制选项,满足了不同场景下的打包需求。通过本文的介绍,相信读者已对py2exe有了更深入的了解,能够在实际开发中更好地运用这一工具。

编程、AI、副业交流:https://t.zsxq.com/19zcqaJ2b
领【150 道精选 Java 高频面试题】请 go 公众号:码路向前 。

相关文章:

py2exe,一个神奇的 Python 库

在众多Python打包工具中,py2exe无疑是一款出色的选择。它能够将Python脚本转换成可在Windows平台上独立运行的可执行文件,极大地方便了程序的分发与部署。本文将深入探讨py2exe的特性和使用方法,让你在创建桌面应用程序时更加游刃有余。 安装…...

博途PLC网络连接不上

博途PLC网络连接不上其中的一个原因就是网线接触不好,各种原因都试了,任然连接不上,大家可以把网线拔下,重新插拔或者直接更换一根网线。 1、无线网络网段和PLC连接网段冲突 。。。。...

哪个邮箱最安全最好用啊

企业邮箱安全至关重要,需保护隐私、防财务损失、维护通信安全、避免纠纷,并维持业务连续性。哪个企业邮箱最安全好用呢?Zoho企业邮箱,采用加密技术、反垃圾邮件和病毒保护,支持多因素认证,确保数据安全合规…...

企业微信开发智能升级:AIGC技术赋能,打造高效沟通平台

文章目录 一、AIGC在企业微信开发中的核心价值1. 智能化客服体验2. 自动化工作流程3. 个性化内容推荐4. 深度数据分析与洞察 二、使用AIGC进行企业微信开发的实践路径1. 需求分析与场景定义2. 技术选型与平台搭建3. 模型训练与调优4. 接口对接与功能集成5. 测试与优化 《企业微…...

Apache Doris + Paimon 快速搭建指南|Lakehouse 使用手册(二)

湖仓一体(Data Lakehouse)融合了数据仓库的高性能、实时性以及数据湖的低成本、灵活性等优势,帮助用户更加便捷地满足各种数据处理分析的需求。在过去多个版本中,Apache Doris 持续加深与数据湖的融合,已演进出一套成熟…...

Inno setup pascal编码下如何美化安装界面支持带边框,圆角,透明阴影窗口

inno setup自带的安装界面太老套了,如何实现类似网易,微信那种带界面的安装?一般有两种思路:提供一个单独的下载器,然后通过下载器将你用innosetup 打包后的软件下载下来,然后,静默安装这个包&a…...

SQL语句(以MySQL为例)——单表、多表查询

笛卡尔积(或交叉连接): 笛卡尔乘积是一个数学运算。假设我有两个集合 X 和 Y,那么 X 和 Y 的笛卡尔积就是 X 和 Y 的所有可能组合,也就是第一个对象来自于 X,第二个对象来自于 Y 的所有可能。组合的个数即为两个集合中…...

C++第二十八弹---进一步理解模板:特化和分离编译

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1. 非类型模板参数 2. 模板的特化 2.1 概念 2.2 函数模板特化 2.3 类模板特化 2.3.1 全特化 2.3.2 偏特化 2.3.3 类模板特化应用示例 3. …...

正则表达式的独占模式,懒惰模式等有那些区别

正则表达式的独占模式、懒惰模式(也称为非贪婪模式)和贪婪模式(默认模式)在匹配行为上存在显著的区别。以下是这三种模式的详细解释和区别: 1、贪婪模式(Greedy): 默认情况下&…...

【INTEL(ALTERA)】Quartus® Prime Pro Edition 软件 v24.2 中,哪些 Agilex™ 5 IP 功能的硬件验证有限?

目录 说明 解决方法 说明 如下表所示,Quartus Prime 专业版软件 24.2 版为 Agilex™ 5 IP 或功能提供有限的硬件支持。此外,设备的设备型号、比特流和固件尚未最终确定。 影响 Agilex™ 5 特定功能的已知问题可参阅 Agilex 5 知识库文章搜索。 解决…...

Lua编程

文章目录 概述lua数据类型元表注意 闭包表现 实现 lua/c 接口编程skynet中调用层次虚拟栈C闭包注册表userdatalightuserdata 小结 概述 这次是skynet,需要一些lua/c相关的。写一篇博客,记录下。希望有所收获。 lua数据类型 boolean , number , string…...

2019数字经济公测大赛-VMware逃逸

文章目录 环境搭建漏洞点exp 环境搭建 ubuntu :18.04.01vmware: VMware-Workstation-Full-15.5.0-14665864.x86_64.bundle 这里环境搭不成功。。patch过后就报错,不知道咋搞 发现可能是IDA加载后的patch似乎不行对原来的patch可能有影响,重新下了patch&…...

如何改桥接模式

桥接模式主要是解决 路由功能的 因为NAT多层 主要是网络连接数太多时 然后路由器要好 不然光猫 比差路由要强的 光猫 请注意,对光猫的任何设置进行修改前,请一定要备份光猫的配置文件,并在每次修改前都截图保存原始设置信息!不要…...

江科大/江协科技 STM32学习笔记P13

文章目录 TIM定时中断1、TIM简介计数器PSC预分频器ARR自动重装寄存器 2、定时器类型基本定时器主模式触发DAC 通用定时器高级定时器 3、定时器原理定时中断基本结构预分频器时序计数器时序RCC时钟树 TIM定时中断 1、TIM简介 定时器的基准时钟一般都是主频72MHz,如果…...

loadrunner录制解决提示安全问题

点击页面任意位置,输入: thisisunsafe...

为什么要读写分离?如何实现业务系统读写分离?

信息化水平提升,很多企业已经接受并高频使用多样的业务系统进行日常作业,而在不断的使用过程中,部分行业和业务,如:直播电商、基础制造、公关传媒等,由于自身特点的原因,常常积累了海量的数据。…...

C#基础——类、构造函数和静态成员

类 类是一个数据类型的蓝图。构成类的方法和变量称为类的成员,对象是类的实例。类的定义规定了类的对象由什么组成及在这个对象上可执行什么操作。 class 类名 { (访问属性) 成员变量; (访问属性) 成员函数; } 访问属性:public(公有的&…...

hadoop学习(二)

一.MapReduce 1.1定义:是一个分布式运算程序的编程框架 1.2核心功能:将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。 1.3优点 1)易于编程 它简单的实现一些接口&#…...

WXZ196微机消谐装置的运行方式了解一下

WXZ196微机消谐装置是一种用于抑制铁磁谐振的设备,可以在电力系统中快速消除各种频率的铁磁谐振,同时可以区分过电压、铁磁谐振以及单相接地,并给出相应的报警信号。该装置采用高速增强型单片机作为核心元件,对PT开口三角电压进行…...

单链表的建立

一.前言 单链表的建立一共有两种方法,一种是头插法,将元素插入在链表的头部,也叫前插法。另外一种则就是尾插法,将元素插入在链表尾部,也叫后插法。 二. 头插法 首先从一个空表开始,重复读入数据&#xff1…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

ES6从入门到精通:前言

ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...

2025季度云服务器排行榜

在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...

Selenium常用函数介绍

目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...

git: early EOF

macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...