第七讲:数据科学项目专场 —— 把 500 MB 的 Numpy / Pandas / PyTorch 砍到 150 MB 以内
👉 项目官网:https://www.python-office.com/ 👈
👉 本开源项目的交流群 👈
大家好,这里是程序员晚枫,正在all in AI编程实战,全网同名。
开场 30 秒
“一个 import torch 直接让可执行文件膨胀到 1 GB?”
本讲 20 分钟,教你用 4 把手术刀:排除、裁剪、替换、延迟加载,把常见 DS 栈瘦身 70 % 以上,并给出一套可复制粘贴的 .spec 模板。
7.1 体积元凶排行榜(先认清敌人)
| 包 | 裸体积 | 主要肥肉 | 可裁剪 % |
|---|---|---|---|
| PyTorch (GPU) | 1.2 GB | CUDA 库、MKL、debug symbols | 70 % |
| TensorFlow | 500 MB | XLA、protobuf、avx512 指令 | 60 % |
| Pandas | 100 MB | 测试集、compat、json table | 40 % |
| scikit-learn | 30 MB | tests、doc、未用算法 | 30 % |
| Numpy | 20 MB | tests、f2py、docs | 20 % |
7.2 手术刀 1:exclude-module(2 min)
.spec 片段
1 | a = Analysis( |
经验:用 --collect-submodules torch 打印子包,按需剔除。
7.3 手术刀 2:替换轻量轮子(3 min)
| 场景 | 原包 | 轻量替代 | 体积差 |
|---|---|---|---|
| 纯 CPU 推理 | torch | torch-cpu (pip install torch==2.1.0+cpu) | -800 MB |
| 矩阵计算 | numpy+mkl | numpy+openblas | -15 MB |
| 数据读写 | pandas | polars / pyarrow | -50 % |
| 序列化 | joblib | pickle5 / orjson | -5 MB |
requirements-build.txt 示例
1 | --extra-index-url https://download.pytorch.org/whl/cpu |
7.4 手术刀 3:按需动态加载(延迟加载)
思路:把可选算法包放在子进程或插件目录,主程序启动后再 importlib.import_module。
.spec 仅打包主链路,插件目录用 --add-data 带过去,启动时按需 pip install --no-deps --target plugins/。
7.5 手术刀 4:strip & UPX 组合(2 min)
.spec 片段
1 | exe = EXE( |
实测 Linux 可再减 20 %。
7.6 实战:PyTorch CPU + Pandas CLI 打包全过程(8 min)
- 环境
1 | python -m venv venv && source venv/bin/activate |
- 主程序(极简推理脚本)
1 | # predict.py |
- 检查子模块(防止误杀)
1 | python -c "import torch, pkgutil; print([m for m in pkgutil.iter_modules(torch.__path__)])" |
- .spec 模板
1 | # -*- mode: python -*- |
- 打包
1 | pyinstaller predict.spec |
结果:
- 原 PyTorch GPU 1.2 GB → 最终单文件 145 MB
- 运行验证
1 | ./dist/PredictCLI sample.csv # 输出 out.csv |
7.7 进阶:TorchScript + 删减算子(可选)
如果只用 10 个算子,可
1 | import torch.utils.bundled_inputs |
编译时裁剪未用算子,可再减 30 %。此步骤需 C++ 环境,留作彩蛋。
7.8 常见错误速查
| 错误 | 原因 | 解决 |
|---|---|---|
Illegal instruction (core dumped) | CPU 指令集不匹配 | 用 torch-cpu 或 --cpu-baseline=avx2 |
libgomp.so.1: cannot open shared object file | 缺失 OpenMP | Linux 打包时 --add-binary "/usr/lib/x86_64-linux-gnu/libgomp.so.1:." |
Windows 报 numpy.core._exceptions._ArrayMemoryError | 32 位 Python | 强制 64 位解释器 |
小结 & 作业(30 秒)
• 4 把刀:exclude、替换、延迟、strip+UPX
• 提供可复制的 .spec 模板,实测 145 MB 完成 PyTorch 推理
• 作业:把你的训练脚本按本讲思路瘦身,下节课《第八讲:CI/CD 跨平台打包》一键推送到 GitHub Release。
大家在学习课程中有任何问题,欢迎+微信和我交流👉我的联系方式:微信、读者群、1对1、福利



🎓 AI 编程实战课程
程序员晚枫专注AI编程培训,通过 《30讲 · AI编程训练营》,让小白也能用AI做出实际项目。帮你从零上手!
- 👉 免费试看:B站免费试看前3讲,先看看适不适合自己
- 👉 课程报名:点击这里报名,现在报名还送书📖


