Lazy loaded image
Python程序打包
字数 804阅读时长 3 分钟
2025-4-3
2025-4-24
type
Post
status
Published
date
Apr 3, 2025
summary
slug
tags
推荐
Python
实用教程
工具
计算机
category
技术分享
icon
password
在 Python 中,将脚本(.py 文件)转换为可执行文件(.exe 适用于 Windows,或二进制文件适用于 macOS/Linux)可以使用多种工具。以下是几种常见的方法:

方法 1:使用 PyInstaller(推荐)

PyInstaller 是一个流行的工具,可以将 Python 脚本打包成独立的可执行文件,支持 Windows、macOS 和 Linux。

安装 PyInstaller

打包 Python 脚本

  • -onefile:打包成单个 .exe 文件(否则会生成多个依赖文件)。
  • -windowed:隐藏命令行窗口(适用于 GUI 程序)。
  • your_script.py:你的 Python 脚本文件名。

输出文件位置

  • 打包完成后,可执行文件默认在 dist/ 目录下。

方法 2:使用 auto-py-to-exe(GUI 版 PyInstaller)

如果你更喜欢图形界面,可以使用 auto-py-to-exe

安装

运行

然后按照 GUI 界面选择 Python 脚本、输出方式(单文件/多文件)、是否隐藏控制台等。

方法 3:使用 cx_Freeze

cx_Freeze 是另一个打包工具,适用于 Windows、macOS 和 Linux。

安装

创建 setup.py

打包

  • 输出文件在 build/ 目录下。

方法 4:使用 Nuitka(编译为 C 代码)

Nuitka 可以将 Python 代码编译成 C 代码,再编译成可执行文件,性能更好。

安装

打包

  • -standalone:生成独立可执行文件。
  • -onefile:打包成单个文件(可选)。

注意事项

  1. 依赖问题
      • 如果脚本依赖第三方库(如 requestsnumpy),PyInstaller 会自动打包它们。
      • 如果某些库未被正确打包,可以手动添加 -add-data 选项。
  1. 文件路径问题
      • 打包后,脚本的工作目录可能改变,建议使用 os.path.dirname(__file__) 获取当前路径。
  1. 反编译风险
      • .exe 文件仍然可以被反编译,如需保护代码,可考虑混淆或使用 Nuitka 编译。
  1. 使用nuitka打包后,提示INTEL oneMKL ERROR: 找不到指定的模块。
  • 手动复制 MKL DLL 文件
如果仍然需要 MKL,可以手动将缺失的 DLL 文件复制到打包目录:
  • 找到 MKL DLL 文件
    • 进入 Python 安装目录(如 C:\Python39\Lib\site-packages\numpy\.libs 或 C:\Users\YourName\AppData\Local\Programs\Python\Python39\Lib\site-packages\numpy\.libs)。
    • 查找 mkl_intel_thread.2.dll 和其他相关文件(如 mkl_core.2.dllmkl_def.2.dll)。
  • 复制到 Nuitka 输出目录
    • 打包后,Nuitka 会生成一个 your_script.dist 文件夹(如果使用 -standalone)。
    • 将缺失的 DLL 文件复制到该目录。
 
 

总结

工具
特点
适用平台
PyInstaller
简单易用,支持单文件打包
Windows, macOS, Linux
auto-py-to-exe
PyInstaller 的 GUI 版本
Windows, macOS, Linux
cx_Freeze
适用于复杂项目
Windows, macOS, Linux
Nuitka
编译为 C 代码,性能更好
Windows, macOS, Linux
推荐
  • 新手 → PyInstaller 或 auto-py-to-exe
  • 高级用户 → Nuitka(性能优化)
上一篇
MiHomo安装配置
下一篇
基础底座:MinerU