在 CentOS 系统上使用 Nuitka 将 Python 程序打包为可执行文件的详细步骤如下:
1. 安装 Nuitka
首先需要安装 Nuitka 及其依赖项:
bash
# 1. 安装编译工具和依赖 gcc gcc-c++ 必须安装
sudo yum install -y gcc gcc-c++ python3-devel
# 2. 使用pip安装Nuitka
pip3 install nuitka
# 3. (可选)安装UPX以压缩可执行文件
wget https://github.com/upx/upx/releases/download/v4.0.2/upx-4.0.2-amd64_linux.tar.xz
tar -xf upx-4.0.2-amd64_linux.tar.xz
sudo cp upx-4.0.2-amd64_linux/upx /usr/local/bin/
编辑
安装完成
编辑
2. 基本打包命令
以下是 Nuitka 的常用打包选项:
bash
# 直接用这个就行了,可以打包出来的
nuitka your_script.py
# 简单打包(生成独立目录)
nuitka --standalone your_script.py
# 生成单个可执行文件(需UPX)
nuitka --standalone --onefile your_script.py
# 启用优化(推荐)
nuitka --standalone --onefile --enable-plugin=tk-inter --optimize=3 your_script.py
# 指定Python解释器版本
nuitka --python-version=3.9 your_script.py
# 包含额外数据文件
nuitka --standalone --onefile --include-data-files=config.ini=. --include-data-files=images/*=images your_script.py
下图就是我对对应的py文件进行打包
编辑
编辑
3. 处理常见依赖
GUI 应用(如 tkinter、PyQt)
bash
# 打包tkinter应用
nuitka --standalone --onefile --enable-plugin=tk-inter your_gui_app.py
# 打包PyQt5应用
nuitka --standalone --onefile --include-package=PyQt5 your_pyqt_app.py
数据库依赖(如 SQLite、MySQL)
bash
# 打包SQLite应用
nuitka --standalone --onefile --include-data-files=/path/to/your/database.db=. your_db_app.py
# 打包MySQL应用
nuitka --standalone --onefile --include-package=mysql.connector your_mysql_app.py
科学计算库(如 NumPy、Pandas)
bash
nuitka --standalone --onefile --include-package=numpy --include-package=pandas your_data_app.py
4. 高级选项
bash
# 启用多进程编译(加速打包)
nuitka --jobs=$(nproc) your_script.py
# 使用UPX压缩可执行文件(减小体积)
nuitka --standalone --onefile --enable-plugin=upx your_script.py
# 生成详细日志(用于调试)
nuitka --standalone --onefile --verbose your_script.py
5. 示例:打包 Flask Web 应用
bash
# 假设项目结构:
# myapp/
# ├── app.py
# ├── templates/
# │ └── index.html
# └── static/
# └── style.css
# 打包命令
nuitka --standalone --onefile \
--include-data-dir=templates=templates \
--include-data-dir=static=static \
--include-package=flask \
app.py
6. 打包后测试
打包完成后,在目标环境中测试:
bash
# 1. 复制生成的可执行文件到目标机器
scp dist/your_script.bin user@target_machine:/path/
# 2. 在目标机器上运行(无需Python环境)
chmod +x your_script.bin
./your_script.bin
编辑
7. 常见问题解决
-
缺少依赖库:
bash
# 手动包含缺失的包 nuitka --standalone --onefile --include-package=missing_package your_script.py -
文件过大:
bash
# 使用UPX压缩 nuitka --standalone --onefile --enable-plugin=upx your_script.py # 移除不必要的依赖 pip uninstall unused_package -
运行时错误:
bash
# 添加调试信息 nuitka --standalone --onefile --debug your_script.py
8. 性能优化建议
- 使用
--optimize=3启用最高级优化。 - 对于大型项目,使用
--jobs=$(nproc)并行编译。 - 优先选择静态链接的 Python 解释器。
通过 Nuitka 打包的 Python 程序具有接近原生代码的执行速度,且无需在目标机器上安装 Python 环境,非常适合分发和部署。