Nuitka 在 Linux 下将 Python 脚本转换为二进制
1. 安装 Nuitka
在 Linux 下,先确保 Python 和 Nuitka 已安装:
pip install nuitka
如果你的系统缺少 C 编译器(如 gcc
),可以使用以下命令安装(以 Ubuntu 为例):
sudo apt update && sudo apt install -y gcc g++
2. 基本编译命令
将 Python 脚本转换为可执行文件的基本命令格式:
nuitka --follow-imports your_script.py
选项说明:
--follow-imports
:自动跟踪并包含所有 Python 模块。your_script.py
:你的 Python 脚本文件。
3. 生成独立可执行文件(无需 Python 运行环境)
如果希望在目标系统上运行时不依赖 Python 解释器,使用 --standalone
选项:
nuitka --standalone --follow-imports your_script.py
此命令会生成一个独立的文件夹,其中包含:
- 可执行文件
your_script.bin
- 相关的 Python 运行库和 C 扩展文件
运行方式:
./your_script.bin
4. 生成单个二进制文件
如果希望打包成单个可执行文件,可以使用 --onefile
选项:
nuitka --standalone --onefile --follow-imports your_script.py
注意:
--onefile
会将所有依赖压缩进一个二进制文件,但运行时需要先解压到临时目录,可能导致启动时间变长。
5. 包含额外数据文件
如果你的程序依赖额外的文件(如 config.json
),可以使用 --include-data-files
选项:
nuitka --standalone --include-data-files=config.json=./config.json --follow-imports your_script.py
6. 额外优化
6.1 去除调试信息,减少体积
strip your_script.bin
6.2 静态链接 Python 运行时
让 Python 运行时库静态链接,避免依赖:
nuitka --standalone --static-libpython=yes --follow-imports your_script.py
7. 常见问题
Q1: 为什么 --onefile
生成的文件较大?
因为 --onefile
会将所有 Python 运行时、依赖库等打包进可执行文件。如果想要更小的体积,可以使用 upx
进行压缩:
upx --best --lzma your_script.bin
Q2: 生成的文件无法运行,提示缺少共享库?
可以尝试运行:
ldd your_script.bin
如果有 not found
依赖项,需安装缺失的库。
Q3: 运行 --onefile
版本时,启动速度很慢?
--onefile
需要解压所有文件到 /tmp
,可以使用 --onefile-tempdir-spec=/custom/path
来加速。
8. 总结
需求 | 推荐命令 |
---|---|
仅编译 Python 脚本 | nuitka --follow-imports your_script.py |
生成独立运行的可执行文件 | nuitka --standalone --follow-imports your_script.py |
生成单个可执行文件 | nuitka --standalone --onefile --follow-imports your_script.py |
额外包含数据文件 | nuitka --standalone --include-data-files=config.json=./config.json --follow-imports your_script.py |
静态链接 Python 运行时 | nuitka --standalone --static-libpython=yes --follow-imports your_script.py |
这样,你就可以成功使用 Nuitka 将 Python 脚本转换为 Linux 上的二进制可执行文件了!🚀