我无法安装 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 更快。
安装步骤:
- 首先安装必要的 C 编译器(树莓派系统通常自带,但建议更新):
sudo apt update
sudo apt install build-essential python3-dev
- 安装 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 失败,通常是因为缺少 binutils 或 Python 开发库。如果你想再尝试一次,可以先运行:
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。