科普:requirements.txt 和 environment.yml
requirements.txt
和 environment.yml
都是用于管理项目依赖的文件,但它们分属不同的工具生态,用途和功能有明显区别:
1. requirements.txt
- 所属工具:主要用于 Python 的
pip
包管理工具(Python 官方推荐的包管理器)。 - 作用:记录项目依赖的 Python 库及其版本,确保在不同环境中安装一致的依赖。
- 格式示例:
# 只指定库名(会安装最新版)numpypandas# 指定具体版本torch==2.0.1transformers>=4.28.0scikit-learn<=1.2.2# 从 URL 安装(如 GitHub 上的库)git+https://github.com/user/repo.git@branch
- 使用方式:
# 安装依赖pip install -r requirements.txt# 导出当前环境的依赖到文件pip freeze > requirements.txt
- 特点:
- 仅支持 Python 库,不涉及系统级依赖或非 Python 工具。
- 语法简单,适合小型项目或纯 Python 环境。
- 缺点:无法精确锁定依赖的“子依赖”版本(可能导致不同环境安装的子依赖不一致)。
2. environment.yml
- 所属工具:用于
conda
或mamba
包管理工具(跨语言的包管理器,支持 Python、C++ 等语言的库)。 - 作用:不仅记录依赖库,还能定义虚拟环境的名称、Python 版本,甚至包含系统级依赖(如 C 库)。
- 格式示例:
name: my_project # 虚拟环境名称channels: # 安装源(优先从这些渠道下载包) - defaults - conda-forgedependencies: # 依赖列表 - python=3.9 # 指定 Python 版本 - numpy=1.24.3 - pandas=2.0.3 - pip: # 可以嵌套 pip 管理的库 - transformers==4.30.2 - git+https://github.com/user/repo.git
- 使用方式:
# 创建/更新环境(自动安装所有依赖)conda env create -f environment.ymlconda env update -f environment.yml# 导出当前环境到文件conda env export > environment.yml
- 特点:
- 支持跨语言依赖(如 C 库、R 包等),适合复杂项目(如深度学习、科学计算)。
- 能精确控制虚拟环境的所有配置(包括 Python 版本、安装源),复现性更强。
- 体积通常比
requirements.txt
大,因为会包含更多环境细节。
核心区别总结
如何选择?
- 若项目是纯 Python 且依赖简单,用
requirements.txt
更轻量。 - 若项目涉及多语言依赖、系统库,或需要严格复现环境(如科研、团队协作),优先用
environment.yml
。 - 实际开发中,两者可能共存(如
environment.yml
中通过pip:
嵌套requirements.txt
的内容)。 -
其它文件
除了 requirements.txt
和 environment.yml
,还有一些其它管理依赖和环境配置的文件,简要列举如下:
requirements.txt
pip
集成紧密。environment.yml
package.json
npm/yarn
生态深度整合,支持脚本命令和版本范围约束。pom.xml
/build.gradle
Cargo.toml
pyproject.toml
setup.py
,支持插件扩展和语义化版本。Dockerfile