python环境|conda项目实战中使用
Conda 主要用于 环境隔离 和 依赖管理,确保项目在不同机器上能稳定复现
源码(conda-1目录)
https://gitee.com/kcnf-python/sample
相关步骤流程
创建项目进入目录
mkdir conda-1
cd conda-1
为项目创建独立Conda环境
- conda create -n conda-1 python=3.11 -y
激活环境
- conda activate conda-1
安装项目所需的包
# 安装数据科学常用包
conda install numpy pandas matplotlib jupyter -y
# 如果某个包 conda 没有,再用 pip
pip install xxxx
导出环境配置
conda env export > environment.yml

conda env export --from-history > environment.yml (只导出项目依赖的,而不是整个环境)
environment.yml内容
name: conda-1
channels:
- conda-forge
dependencies:
- _openmp_mutex=4.5=20_gnu
- anyio=4.13.0=pyhcf101f3_0
- argon2-cffi=25.1.0=pyhd8ed1ab_0
- argon2-cffi-bindings=25.1.0=py311h3485c13_2
- arrow=1.4.0=pyhcf101f3_0
- asttokens=3.0.1=pyhd8ed1ab_0
- async-lru=2.3.0=pyhcf101f3_0
- attrs=26.1.0=pyhcf101f3_0
- babel=2.18.0=pyhcf101f3_1
- backports.zstd=1.5.0=py311h71c1bcc_0
prefix: D:\pro\Python\miniforge3\envs\conda-1
团队伙伴导入项目
- conda env create -f environment.yml

environment.yml 和 pyproject.toml比较
| 维度 | environment.yml | pyproject.toml |
|---|---|---|
| 所属工具 | Conda / Mamba(跨语言环境管理) | PEP 621 标准,被 pip、uv、Poetry、PDM、Hatch 等支持 |
| 主要用途 | 定义 Conda 环境的完整内容(Python 版本、Conda 包、pip 包、非 Python 依赖) | 定义 Python 项目的元数据、运行时依赖、构建系统、开发工具配置 |
| 是否包含 Python 版本 | ✅ 在 dependencies 中明确列出 python=3.x | ✅ 在 requires-python 字段指定版本范围(如 >=3.9) |
| 是否包含非 Python 依赖 | ✅ 是(如 CUDA、OpenCV、R、C/C++ 库) | ❌ 否(仅限 Python 包) |
| 依赖声明方式 | 直接列出包名和版本(可精确或宽松) | 遵循 PEP 508,可指定版本范围、环境标记等 |
| 锁定文件 | 可选:conda env export 可生成精确版本的环境文件 | 外部工具生成锁文件:uv.lock、poetry.lock、requirements.lock |
| 构建系统配置 | ❌ 不涉及 | ✅ 通过 [build-system] 指定构建后端(setuptools, poetry-core 等) |
| 工具配置 | ❌ 不支持 | ✅ 通过 [tool.*] 统一配置 black、ruff、pytest、mypy 等 |
| 跨平台可复现性 | 较好(但不同 OS 可能有细微差异) | 较好(结合锁文件可实现精确复现) |
| 典型文件名 | environment.yml | pyproject.toml |
| 主要使用场景 | 数据科学、机器学习、需要复杂二进制依赖的项目 | 通用 Python 项目(Web、库、脚本、应用) |
两种不同demo对比
- environment.yml (Conda)
name: ml_project
channels:
- conda-forge
- pytorch
dependencies:
- python=3.10
- pytorch=2.0
- cudatoolkit=11.8 # 非 Python 依赖
- numpy=1.24
- pandas>=2.0
- pip
- pip:
- transformers
- datasets
- pyproject.toml (Python 标准)
[project]
name = "ml_project"
version = "0.1.0"
description = "An ML project"
requires-python = ">=3.10"
dependencies = [
"numpy>=1.24",
"pandas>=2.0",
"transformers",
"datasets",
]
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[tool.black]
line-length = 88
[tool.pytest.ini_options]
testpaths = ["tests"]
如何配合
只用environment.yml(传统 Conda 工作流)
- 适合:项目依赖复杂二进制库(CUDA、OpenCV、GDAL 等)
- 缺点:不提供标准的 Python 项目元数据,打包发布困难
pyproject.toml + uv/poetry(现代纯 Python 工作流)
- 适合:纯 Python 项目,无非 Python 依赖
- 操作:uv venv → uv pip install -e . 或 poetry install
- 优点:标准化、工具链统一、快速
两者结合使用(推荐用于复杂项目)
- environment.yml 负责:定义 Conda 环境(Python 版本 + 非 Python 依赖 + pip + 项目本身的可编辑安装)
- pyproject.toml 负责:定义项目的元数据、纯 Python 依赖、工具配置
