如何将Python程序打包成树莓派4B的二进制文件?

我无法安装 PyInstaller。还有其他方法可以在树莓派上将 Python 文件打包成二进制可执行文件吗?

可以使用 pip 安装 pyinstaller

pip install pyinstaller

参考:https://www.cnblogs.com/wendaobiancheng/p/9772509.html

使用此命令将导致以下错误,安装将无法成功。

pip install pyinstaller
error: externally-managed-environment

× 当前环境为外部管理环境
╰─→ 若要在系统范围内安装 Python 包,请尝试使用 apt install
python3-xyz,其中 xyz 是你试图安装的包。

如果你想安装非 Debian 打包的 Python 包,
请使用 python3 -m venv path/to/venv 创建一个虚拟环境。
然后使用 path/to/venv/bin/python 和 path/to/venv/bin/pip。请确保已安装 python3-full。

更多信息请访问 http://rptl.io/venv

注意:如果你认为这是个错误,请联系你的 Python 安装程序或操作系统发行版提供商。你可以通过传递 --break-system-packages 来覆盖此限制,但这可能会破坏你的 Python 安装或操作系统。
提示:详见 PEP 668 的详细规范。

使用此命令:sudo apt install python3-pyinstaller

无法找到对应的安装包。
正在读取软件包列表… 完成
正在构建依赖关系树… 完成
正在读取状态信息… 完成
E: 无法定位软件包 python3-pyinstaller

https://www.cnblogs.com/clark1990/p/17942952

建议使用 pipx 安装

在树莓派(Raspberry Pi 4B)上,如果你无法使用 PyInstaller,最强力的替代方案是 Nuitka。与 PyInstaller 只是“打包”不同,Nuitka 会将你的 Python 代码转换为 C 代码并编译成真正的机器码二进制文件。

以下是几种在树莓派上将 Python 打包为二进制文件的常用方法:


1. Nuitka(最推荐:高性能、真编译)

Nuitka 是目前 Python 社区中非常流行的打包工具,尤其适合在树莓派这种 Linux 环境下运行。它生成的二进制文件运行速度通常比原生 Python 更快。

安装步骤:

  1. 首先安装必要的 C 编译器(树莓派系统通常自带,但建议更新):
sudo apt update
sudo apt install build-essential python3-dev
  1. 安装 Nuitka:
pip install nuitka

打包命令:

在你的程序目录下运行:

python3 -m nuitka --standalone --onefile --remove-output your_script.py
  • --standalone: 包含所有依赖库。
  • --onefile: 将所有内容打包成一个单一的可执行文件。
  • --remove-output: 编译完成后删除临时生成的 C 代码文件夹。

2. cx_Freeze(成熟稳定的替代品)

如果你觉得 Nuitka 编译时间太长(因为它要执行复杂的优化),cx_Freeze 是更接近 PyInstaller 的方案。

安装步骤:

pip install cx_Freeze

使用方法:

创建一个名为 setup.py 的文件:

from cx_Freeze import setup, Executable

setup(
    name = "我的程序",
    version = "1.0",
    description = "描述",
    executables = [Executable("your_script.py")]
)

然后在终端运行:

python3 setup.py build

这会在 build 文件夹下生成一个包含可执行文件及其依赖库的文件夹。


3. Shiv (Zipapp 方案:轻量级)

如果你的目标只是“一个文件分发”,而不是严格意义上的“加密/机器码二进制”,Shiv 是非常好的选择。它利用了 Python 原生的 zipapp 功能。

使用方法:

pip install shiv
shiv -e your_module.main -o my_app .

它会将你的代码和所有依赖库压缩成一个巨大的 .pyz 文件(在 Linux 下可以直接赋予执行权限 ./my_app)。优点是打包速度极快且极其稳定。


4. 为什么 PyInstaller 无法安装?(常见修复)

在树莓派上安装 PyInstaller 失败,通常是因为缺少 binutilsPython 开发库。如果你想再尝试一次,可以先运行:

sudo apt install python3-dev binutils libffi-dev
pip install pyinstaller

如果报错信息包含 arm-linux-gnueabihf-gcc 相关内容,通常就是缺少 build-essential


方案对比

工具 原理 优点 缺点
Nuitka 编译成 C 代码 运行快、代码难以反编译、真二进制 编译时间长、对复杂库兼容性需调试
cx_Freeze 冻结环境 (Freeze) 配置灵活、跨平台性好 生成的是文件夹(除非配合 AppImage)
Shiv 压缩包 (Zipapp) 100% 兼容所有库、打包极快 目标机器必须安装了 Python 解释器

建议:
如果你追求程序的安全性和性能,请使用 Nuitka;如果你希望快速打包且不介意目标机上是否有 Python 环境,请使用 Shiv