CentOS、ubuntu、ky10 server 高效部署利器:Nuitka 打包 Python 程序,实现零依赖运行-- 已验证可用

在 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/

 

 安装完成

还需要 安装 patchelf

方法一:使用 EPEL 源安装

如果你的 CentOS 已启用 EPEL 仓库,可直接通过yum安装:

bash

# 1. 安装EPEL仓库(若未安装)
sudo yum install -y epel-release

# 2. 安装patchelf
sudo yum install -y patchelf

# 3. 验证安装
patchelf --version  # 应显示版本信息
方法二:从源码编译安装

适合需要最新版本或自定义编译选项的场景:

bash

# 1. 安装编译依赖
sudo yum install -y gcc make autoconf automake libtool

# 2. 下载源码(以0.17.2版本为例)
wget https://github.com/NixOS/patchelf/archive/0.17.2.tar.gz
tar -xf 0.17.2.tar.gz
cd patchelf-0.17.2

# 3. 编译和安装
./bootstrap.sh
./configure
make
sudo make install

# 4. 验证安装
patchelf --version

方法三:使用预编译二进制文件,centos、ubuntu、ky10  server都支持

适合快速安装,无需编译:

bash

# 1. 下载预编译二进制文件(根据系统架构选择)
wget https://github.com/NixOS/patchelf/releases/download/0.17.2/patchelf-0.17.2-x86_64.tar.gz
tar  -zxvf  patchelf-0.17.2-x86_64.tar.gz

# 2. 将二进制文件移动到PATH路径
sudo cp bin/patchelf /usr/local/bin/

# 3. 验证安装
patchelf --version

验证安装

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. 常见问题解决

  1. 缺少依赖库

    bash

    # 手动包含缺失的包
    nuitka --standalone --onefile --include-package=missing_package your_script.py
    
  2. 文件过大

    bash

    # 使用UPX压缩
    nuitka --standalone --onefile --enable-plugin=upx your_script.py
    
    # 移除不必要的依赖
    pip uninstall unused_package
    
  3. 运行时错误

    bash

    # 添加调试信息
    nuitka --standalone --onefile --debug your_script.py
    

8. 性能优化建议

  • 使用--optimize=3启用最高级优化。
  • 对于大型项目,使用--jobs=$(nproc)并行编译。
  • 优先选择静态链接的 Python 解释器。

通过 Nuitka 打包的 Python 程序具有接近原生代码的执行速度,且无需在目标机器上安装 Python 环境,非常适合分发和部署。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三希

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值