无需提前创建虚拟环境,如何生成仅含实际使用库的requirements.txt?
无需提前搭建虚拟环境的精准依赖检测方案
核心问题匹配
Colab、AWS SageMaker这类开箱即用的预装环境虽然用着方便,但直接导出依赖时会带出大量项目根本没用到的预装库,而现有工具的能力缺口刚好踩中两个高频漏判场景:
- 像
watermark这类工具默认只采集当前全局命名空间直接导入的顶层库,识别不到通配导入、嵌套间接导入的依赖 - 对jupyter扩展、服务端插件这类不通过普通Python import链路加载的组件完全无感知
可直接在现有预装环境运行的落地方法
完全不需要额外新建隔离虚拟环境,在日常使用的现成会话里就能完成全链路检测:
运行时全链路导入追踪方案
放弃静态扫描代码找import语句的思路,在你完整跑通项目全流程(从数据加载、模型推理到最终服务启动)的过程中,拦截所有被Python解释器实际加载的第三方模块,自动匹配对应的pip包名和准确版本,同时自动采集当前环境启用的jupyter扩展清单。
实际操作流程:- 打开新的Colab会话后,安装支持运行时监控的依赖收集工具
!pip install pip-requirements-tracker - 在所有项目代码执行前,初始化全局导入监控
from req_tracker import start_tracking start_tracking(include_jupyter_ext=True) - 正常执行所有业务操作:升级安装fastai、安装voila、启用voila的jupyter服务扩展、导入fastai视觉模块、跑通完整的项目逻辑
- 全流程验证完成后,直接导出生成的精准依赖清单
from req_tracker import export_requirements export_requirements("requirements.txt")
这种方案刚好补上
watermark的两个能力短板:- 不会因为你用
from fastai.vision.all import *的通配导入方式就漏判fastai本身的依赖项 - 会自动识别voila这类通过jupyter扩展机制启用、没有走普通Python import流程的服务类依赖,不需要手动补录清单
- 打开新的Colab会话后,安装支持运行时监控的依赖收集工具
零额外工具的环境快照对照法
如果不想安装第三方监控工具,用两次环境快照比对的方式也能拿到最小依赖集:- 刚打开空白Colab会话、还没安装任何项目依赖时,先导出一份当前环境的全量预装包清单
pip freeze > base_snapshot.txt - 后续正常安装项目所需的所有依赖、跑通完整业务流程
- 流程验证完成后,再导出一份当前环境的全量包清单
pip freeze > current_snapshot.txt - 通过简单的文本差集运算,筛出你手动安装的、以及运行时实际被加载的包,去掉所有预装但没被调用过的冗余项,就能生成可用的requirements.txt
- 刚打开空白Colab会话、还没安装任何项目依赖时,先导出一份当前环境的全量预装包清单
避坑提醒
绝对不要在跑完全部项目流程后直接执行
pip freeze导出依赖,这样得到的清单会把环境里所有预装的、哪怕从来没被调用过的库全部列进去,完全失去依赖文件的实际价值。watermark的设计定位是版本信息展示,而非全链路依赖采集,即便手动指定要检查的包名,也需要人工挨个核对,无法实现自动全量收集的目标。
内容的提问来源于stack exchange,提问作者G. Macia
相关产品推荐
相关产品推荐

