如何将 Python 脚本转换为 .exe 文件
现在您已经了解了 .exe 文件是什么,以及为什么可能需要将 Python 文件转换为 .exe 文件,接下来看看如何用 Python 来实现。在本节中,我们将介绍三个框架:pyinstaller、nuitka 和 auto-py-to-exe。
需要注意的是,auto-py-to-exe 与 Python 3.11 及更高版本存在已知兼容性问题;除非使用特定的新版本并谨慎匹配依赖项,否则通常仅在 Python 3.10 及以下版本中较为可靠。
话不多说,开始吧。
准备脚本
本演示将使用 纽约市 Airbnb 开放数据 数据集。
在数据科学家分析数据集之前,必须先将数据整理为与其所用工具兼容的格式。因此,创建验证模式可以以声明式方式定义适用于各字段的所有校验规则。这个过程可能相当重复。为避免数据科学家反复处理这些任务,我们创建了一个自动化验证脚本定期运行。
注意:如果您的脚本需要读取数据,使用相对路径时务必格外小心。最好使用绝对路径,以确保可执行文件按预期工作。
import pandas as pd
from pandas.api.types import CategoricalDtype
def perform_validation(filename:str):
"""
A function to validate inputs for NYC Airbnb Open data.
"""
path_to_data = "../.."
data = pd.read_csv(f"{path_to_data}{filename}")
# Convert neighbourhood_group to type category
neighbourhood_group_to_cat = CategoricalDtype(
categories=["Manhattan", "Brooklyn", "Queens", "Bronx", "Staten Island"],
ordered=False
)
data["neighbourhood_group"] = data["neighbourhood_group"].astype(neighbourhood_group_to_cat)
# Convert room_type to type category
room_type_to_cat = CategoricalDtype(
categories=["Entire home/apt", "Private room", "Shared room"],
ordered=False
)
data["room_type"] = data["room_type"].astype(room_type_to_cat)
# Convert last_review to datetime
data["last_review"] = pd.to_datetime(data["last_review"])
# Minimum nights a person can stay is one night
assert data["minimum_nights"].min() >= 1
# Minimum number of reviews is 0
assert data["number_of_reviews"].min() >= 0
# Minimum number of reviews per month
assert data["reviews_per_month"].min() >= 0.00
# Minimum amount of listings per host
assert data["calculated_host_listings_count"].min() >= 1
# Number of days when listing is available for books
# Could be 0 if tennant has long term booking
assert data["availability_365"].min() >= 0
# Save validated data
data.to_csv("validated_ab_nyc_2019.csv", index=False)
if __name__ == "__main__":
# User inputs filename
filename = input("Enter filename: ")
# Ensure it's a string
if not filename.isalpha():
filename = str(filename)
# Automated validation
perform_validation(filename)
注意:我们已将此脚本复制到 pyinstaller、nuitka 和 auto-py-to-exe 目录中。
# Directory structure
| AB_NYC_2019.csv
|
+---auto_py_to_exe
| | requirements.txt
| | validation.py
+---pyinstaller
| requirements.txt
| validation.py
每个目录都有各自的虚拟环境,并在其中安装了所需依赖:参见 pyinstaller 依赖 或 auto-py-to-exe 依赖。如果您跟着代码实践,请务必在 pyinstaller 目录和 auto-py-to-exe 目录中分别创建虚拟环境。
总体来看,上述脚本包含一个函数——了解更多关于在 Python 中编写函数的内容——该函数读取数据集,然后为数据中某些字段定义期望的格式。下一步就是将此 Python 脚本转换为可执行文件,以便定期运行,生成格式化的数据集。
方法一:Pyinstaller
Pyinstaller 允许您在终端中快速将 Python 文件转换为可执行文件。创建虚拟环境并为脚本安装所需依赖(包括 pyinstaller)后,打开终端并导航到要转换的 Python 文件所在的目录。
然后运行以下命令:
pyinstaller --onefile validation.py
开始时您会看到多条日志,最后一条大致会显示“completed successfully”(已成功完成)——表示可执行文件创建成功。

图 1:日志显示可执行文件正在创建并已成功完成。
本次运行完成后,会在与该 Python 文件相同的目录下生成两个新目录:build 和 dist。在 dist 目录中,您会找到 validation.exe 脚本。

图 2:演示在数据集上执行 validation.exe 的 GIF。
要运行脚本,只需双击它。随后会弹出一个控制台,提示您输入要进行验证的数据文件名。输入文件名后,控制台会关闭,校验后的数据会在与 validation.exe 文件相同的目录中生成——见图 2。
方法二:Nuitka
Nuitka 是另一个值得考虑的方法。与将 Python 解释器与脚本一起打包的 PyInstaller 不同,Nuitka 实际上会将您的 Python 代码编译为 C 代码。这能更好地保护源代码、潜在地提高执行速度,且通常生成更小的文件。代价是编译时间更长、设置更复杂。
安装与设置
创建虚拟环境并通过 pip install nuitka 安装 Nuitka 后,您需要确保系统上可用 C 编译器。所需编译器取决于操作系统:
-
Windows:从 Visual Studio 官网下载并安装 Microsoft Visual C++ Build Tools(免费),或使用 MinGW
-
macOS:使用
xcode-select --install安装 Xcode 命令行工具 -
Linux:通常已预装 GCC;如果没有,请通过包管理器安装
安装完成后,Nuitka 会自动检测您的编译器。如遇问题,请确保编译器已加入系统的 PATH。
使用 Nuitka 转换验证脚本
让我们像使用 PyInstaller 和 auto-py-to-exe 那样,使用 Nuitka 来转换同一个纽约市 Airbnb 验证脚本。要将脚本编译为可执行文件,运行:
python -m nuitka --onefile --follow-imports --include-package=pandas validation.py
参数说明如下:
-
--onefile:创建单一可执行文件(而不是包含多个文件和依赖的目录) -
--follow-imports:自动包含脚本导入的所有模块 -
--include-package=pandas:显式包含 pandas 包(有些包不会被自动检测,此选项可确保其被打包)
与大约 30 秒即可完成的 PyInstaller 不同,Nuitka 所需时间更长——通常为 5–15 分钟,取决于代码复杂度与系统速度。您会在终端看到输出,显示 C 编译阶段的进度。
完成后,您会看到成功消息,表示可执行文件已创建。编译生成的可执行文件会与 validation.py 位于同一目录。
双击 validation.exe 或在命令行运行它。 与 PyInstaller 相同,会弹出一个控制台窗口,提示您输入文件名。输入 AB_NYC_2019.csv 并回车后,验证开始执行,控制台关闭,随后在同一目录生成新文件 validated_ab_nyc_2019.csv,与 PyInstaller 的行为完全一致。
方法三:auto-py-to-exe
使用 auto-py-to-exe 创建可执行文件的第一步,是通过以下命令运行它:
auto-py-to-exe
这将打开一个图形用户界面(GUI),帮助我们把 Python 文件转换为可执行文件。

图 3:运行 auto-py-to-exe 命令后返回的图形用户界面。
注意:如果无法正常运行,请确保您已在 auto-py-to-exe 目录中创建虚拟环境,并在虚拟环境中使用以下命令安装 requirements.txt:pip install -r requirements.txt。
GUI 中有若干需要填写的字段。我们逐一来看并拆解:
- Specific Location:在此字段中,需添加要转换为可执行文件的 Python 文件的脚本路径。
- Onefile:在这里选择要创建“单一目录”还是“单一文件”。“单一目录”会包含执行脚本所需的全部依赖以及一个可执行文件;而选择“One File”将创建一个单一的可执行文件。
- Console Window:选择“Console Based”(基于控制台)或“Window Based”(基于窗口)取决于脚本的输出。例如,我们上面的脚本需要用户输入文件名,因此推荐使用“Console Based”,这样运行可执行文件后会打开控制台。如果不需要在执行后显示控制台输出,“Window Based”是个不错的选择。
此外还提供了其他选项来配置可执行文件的创建方式(如添加图标、附加文件等)。您也可以修改导出路径:选择“Settings”开关并浏览到您希望的输出目录。最后一步是选择“Convert .py to .exe”来转换 Python 文件。
请参见图 4 中的 GIF,了解我们如何配置可执行文件。

图 4:展示 auto-py-to-exe 配置过程的 GIF
返回 auto-py-to-exe 目录后,会看到一个名为 output 的目录:validation.exe 文件就在其中。选中该文件运行,随后会弹出一个控制台,提示您输入文件名:

图 5:运行可执行验证文件后返回的控制台。
只需输入文件名——在此示例中为 AB_NYC_2019.csv——然后回车。控制台将关闭,并在输出目录(可执行文件所在位置)中创建一个名为 validated_ab_nyc_2019.csv 的新文件。
PyInstaller 与 Nuitka 对比
这里是在相同验证脚本上的 Nuitka 与 PyInstaller 的对比,同时将 auto-py-to-exe 作为 GUI 备选:
|
指标 |
PyInstaller |
auto-py-to-exe |
Nuitka |
|
可执行文件大小 |
一般 |
一般 |
小 20–30% |
|
构建时间 |
一般 |
一般 |
长 16 倍 |
|
启动时间 |
约 2 秒 |
约 2 秒 |
约 1 秒 |
|
运行时长(验证任务) |
约 3 秒 |
约 3 秒 |
约 2.5 秒 |
|
源代码保护 |
中等 |
中等 |
极佳 |
|
Python 3.8–3.10 |
✅ 极佳 |
✅ 极佳 |
✅ 极佳 |
|
Python 3.11+ |
✅ 极佳 |
⚠️ 已知问题 |
✅ 极佳 |
PyInstaller 和 Nuitka 在所有现代 Python 版本上都提供了可靠支持,而 auto-py-to-exe 在 Python 3.11 及更高版本上存在已知兼容性问题。Nuitka 生成的可执行文件更小、速度更快,且具备更出色的知识产权保护——但构建过程大约比 PyInstaller 慢 16 倍。
结论
通过本文,您已经了解了:
- 什么是 Python 文件
- 什么是可执行文件,以及它可能带来的好处
- 如何使用 pyinstaller 将 Python 脚本转换为可执行文件——对于熟悉命令行操作的用户,这是一个很好的工具。
- 如何使用 auto-py-to-exe 将 Python 脚本转换为可执行文件——它提供图形用户界面(GUI),可配置可执行文件的创建方式。
在 DataCamp 的 Associate Data Scientist with Python 职业路径中,了解更多如何利用 Python 开展数据科学工作。
常见问题
我可以在可执行文件中包含其他文件(如图像、配置文件)吗?
可以,这三种工具都允许您打包脚本所需的其他文件。对于 PyInstaller 和 Nuitka,您可以使用 --add-data 选项来指定需要包含的文件。在 auto-py-to-exe 中,可在 GUI 的“Additional Files”(附加文件)下添加。请确保正确指定相对或绝对路径,以便可执行文件能够访问这些文件。
如何为可执行文件添加自定义图标?
您可以通过指定 .ico 文件为可执行文件添加自定义图标。对于 PyInstaller,使用 --icon 标志并在其后添加 .ico 文件路径。在 auto-py-to-exe 中,可在 GUI 的“Icon”字段中设置图标路径。Nuitka 也支持 --windows-icon-from-ico 标志。请注意,图标文件必须为 .ico 格式。
为什么我的可执行文件这么大?如何减小体积?
可执行文件可能包含所有依赖、库以及 Python 解释器,因此体积会较大。要减小体积:
- 在 PyInstaller 或 Nuitka 中使用
--onefile选项,将所有内容打包为单一文件。 - 使用
--exclude-module选项排除不必要的库(PyInstaller 或 Nuitka 均可)。 - 考虑使用 UPX 等工具压缩生成的可执行文件(适用于 PyInstaller 和 auto-py-to-exe)。
- 考虑使用 Nuitka,它通常能比 PyInstaller 生成小 20–30% 的可执行文件。
我可以为不同的操作系统创建可执行文件吗?
PyInstaller、auto-py-to-exe 和 Nuitka 都是特定于平台的。要为不同操作系统创建可执行文件,您需要使用交叉编译工具,或为目标操作系统搭建虚拟机或容器。例如,要在 Linux 上创建 Windows 可执行文件,可以使用 Wine,或在 Docker 中运行 Windows 环境。
除了 pyinstaller 和 auto-py-to-exe,还有哪些替代方案?
其他用于创建可执行文件的工具包括:
- cx_Freeze: 跨平台的可执行文件创建工具。
- py2exe: 面向 Windows,将 Python 脚本打包为可执行文件的工具。

在本文中,我将带您了解一些将 Python 文件转换为可执行文件的典型场景,并演示如何使用三个 Python 库(Pyinstaller、Nuitka 和 auto-py-to-exe)将 Python 文件转换为可执行文件。
克隆此 Github 仓库,即可按步骤学习本教程。
为什么要将 Python 转换为 .exe?
可执行文件(以
.exe为扩展名保存的文件)用于在 Windows 操作系统的计算机上安装或运行软件应用。让 Windows 计算机能够运行某个应用的文件,即是.exe文件。您可能希望将 Python 程序转换为可执行文件的原因有很多。下面来看几个:
恶意活动
不幸的是,互联网上有人喜欢传播恶意软件来感染他人的设备并窃取信息。对抗这类行为的一种方式就是不要“配合演出”——也就是不要盲目下载或打开并非来自可靠来源的
.exe文件。可访问性
您可能还希望将 Python 文件转换为可执行文件,以便将应用分享给其他用户。一个典型的 Python 程序可能包含多个依赖项,其他用户需要先安装这些依赖,程序才能运行。如果对方不会编程怎么办?在这种情况下,指望用户先学会编程再使用应用并不合理。将 Python 文件转换为可执行文件,可以让用户在不了解 Python 的情况下访问您的程序。
保护源代码
即便对方会编程,将 Python 文件转换为可执行文件也有助于防止代码被窃取。可执行文件通过生成源代码的已编译版本来防止代码被盗,相比原始源代码,编译产物更难被理解。
任务调度
您也可能希望在计算机上计划任务,于指定时间执行某个
.exe文件。