机器学习项目如何分离开发与生产环境的requirements.txt?
你提到的拆分notebook目录和部署目录、各自配置独立requirements.txt的方案完全合理可行,也是目前AI/ML项目分离开发分析与生产部署的主流实践之一。
<项目根目录> ├── notebooks/ # 存放所有Jupyter探索、实验、分析代码 │ ├── requirements.txt # 仅包含开发分析所需依赖:jupyter、可视化工具、调试工具等 │ ├── 01_数据探索.ipynb │ ├── 02_特征工程实验.ipynb │ └── 03_模型效果验证.ipynb ├── src/ # 存放生产部署可用的核心代码 │ ├── requirements.txt # 仅包含部署最小依赖,剔除所有notebook、开发调试类包 │ ├── data_process.py # 生产环境数据预处理逻辑 │ ├── model_infer.py # 模型推理核心逻辑 │ └── app.py # 部署服务入口(如Flask/FastAPI接口) ├── data/ # 统一存放数据集(可按raw、processed子目录划分,大文件配置到.gitignore) ├── tests/ # 单元测试用例 └── README.md # 项目说明文档
开发实验阶段进入notebooks/目录执行pip install -r requirements.txt安装全部分析工具,部署阶段进入src/目录执行pip install -r requirements.txt安装最小运行依赖即可。
依赖拆分的替代优化方案
如果不想维护两份独立的依赖清单,也可以在根目录维护单份依赖文件,通过分组实现按需安装:
- 在
requirements.txt中拆分公共依赖和开发侧可选依赖,示例格式:
# 公共依赖(开发、部署环境都需要) torch>=2.0.0 pandas>=1.5.3 numpy>=1.24.3 scikit-learn>=1.2.2 # 开发分析可选依赖 [dev] jupyter>=3.6.0 matplotlib>=3.7.1 seaborn>=0.12.2 ipdb>=0.13.13
部署时直接执行pip install -r requirements.txt仅安装公共依赖,开发环境执行pip install -r requirements.txt -r <(grep -A100 '\[dev\]' requirements.txt | tail -n +2)即可一键安装全部开发侧依赖。
- 如果使用poetry、pipenv等现代包管理工具,也可以直接在
pyproject.toml的optional-dependencies中配置开发依赖组,语法更规范。
落地注意事项
- 所有在notebook中验证通过的可复用逻辑(如数据清洗规则、模型推理逻辑)要及时同步到
src/的生产代码中,避免出现实验逻辑和生产逻辑不一致的问题 - 可配置git的过滤规则忽略notebook的输出单元格内容,避免提交大量执行结果导致仓库体积膨胀
内容的提问来源于stack exchange,提问作者Satrio Adi Prabowo
相关产品推荐
相关产品推荐

