我無法安裝 PyInstaller。還有其他方法可以在 Raspberry Pi 上將 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。