python环境|conda项目实战中使用

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.lockpoetry.lockrequirements.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 依赖、工具配置