Warning

不推荐混用两者,不如 uv+poetry 的方案

Poetry 和 Conda 可以结合使用,但需要明确各自的职责分工。

三种使用策略

策略 1:Conda 管理环境 + Poetry 管理依赖(推荐)

这是最常见也最推荐的方式,使用 Conda 创建环境但不用于包管理,始终使用 Poetry 来安装和更新包以避免工具不同步。

适用场景:

  • 需要特定 Python 版本(系统未安装)
  • 需要非 Python 依赖(如 CUDA、MKL)
  • 机器学习/科学计算项目

配置步骤:

# 1. 创建 Conda 环境(仅指定 Python 版本)
conda create -n myproject python=3.11 -y
conda activate myproject
 
# 2. 在 Conda 环境中安装 Poetry
pip install poetry
 
# 3. 配置 Poetry 不创建虚拟环境(使用当前 Conda 环境)
poetry config virtualenvs.create false --local
 
# 4. 使用 Poetry 管理依赖
poetry init
poetry add fastapi uvicorn
poetry install

项目配置文件:

# pyproject.toml
[tool.poetry]
name = "myproject"
version = "0.1.0"
description = ""
 
[tool.poetry.dependencies]
python = "^3.11"
numpy = "^1.24.0"
pandas = "^2.0.0"
scikit-learn = "^1.3.0"
 
[tool.poetry.group.dev.dependencies]
pytest = "^7.4.0"
ruff = "^0.1.0"
 
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
# environment.yml(可选,用于团队共享 Conda 环境配置)
name: myproject
channels:
  - conda-forge
  - defaults
dependencies:
  - python=3.11
  - pip
  - pip:
    # 不在这里列出 Python 包,使用 Poetry 管理

策略 2:完全使用 Poetry(推荐新项目)

如果不需要 Conda 特有功能,完全使用 Poetry 更简洁:

# 直接使用 Poetry
poetry new myproject
cd myproject
poetry env use python3.11
poetry install

策略 3:Conda 主导(不推荐)

仅在必须使用 Conda 特有包时考虑:

conda create -n myproject python=3.11
conda activate myproject
conda install numpy pandas scikit-learn
conda install pytorch torchvision -c pytorch
pip install other-packages  # 其他包用 pip

缺点:

  • 依赖管理混乱
  • 难以复现环境
  • 缺少锁定文件

最佳实践配置示例

完整的工作流程

# === 初始化项目 ===
 
# 1. 创建并激活 Conda 环境
conda create -n ml-project python=3.11 -y
conda activate ml-project
 
# 2. 安装系统级依赖(如果需要)
conda install cudatoolkit=11.8 -c nvidia
 
# 3. 安装 Poetry
pip install poetry
 
# 4. 配置 Poetry
poetry config virtualenvs.create false --local
poetry config virtualenvs.in-project false --local
 
# 5. 初始化项目
poetry init
poetry add numpy pandas scikit-learn
poetry add pytest ruff --group dev
 
# === 日常开发 ===
 
# 激活环境
conda activate ml-project
 
# 添加依赖(只用 Poetry)
poetry add requests
poetry add httpx --group dev
 
# 运行代码
poetry run python main.py
poetry run pytest
 
# === 团队协作 ===
 
# 导出 Conda 环境(仅 Python 版本和系统依赖)
conda env export --from-history > environment.yml
 
# Poetry 依赖自动锁定在 poetry.lock
git add pyproject.toml poetry.lock environment.yml

项目结构

ml-project/
├── pyproject.toml           # Poetry 配置
├── poetry.lock             # Poetry 锁定文件
├── environment.yml         # Conda 环境配置(可选)
├── .python-version         # Python 版本声明
├── README.md
├── src/
│   └── ml_project/
│       ├── __init__.py
│       └── main.py
└── tests/
    └── test_main.py

团队成员环境复现

# 新团队成员设置环境
 
# 方法 1:使用 environment.yml(如果存在)
conda env create -f environment.yml
conda activate ml-project
pip install poetry
poetry config virtualenvs.create false --local
poetry install
 
# 方法 2:手动创建
conda create -n ml-project python=3.11
conda activate ml-project
pip install poetry
poetry config virtualenvs.create false --local
poetry install

关键配置说明

Poetry 配置选项

# 不创建虚拟环境(使用当前激活的环境)
poetry config virtualenvs.create false
 
# 项目级配置(推荐)
poetry config virtualenvs.create false --local
 
# 查看当前配置
poetry config --list

依赖分工原则

工具负责内容示例
CondaPython 版本、系统级依赖python=3.11, cudatoolkit, mkl
PoetryPython 包依赖、项目管理numpy, pandas, fastapi

常见问题和解决方案

问题 1:Poetry 仍然创建虚拟环境

# 确保配置正确
poetry config virtualenvs.create false --local
 
# 删除已创建的虚拟环境
poetry env remove python

问题 2:包安装冲突

# 只使用 Poetry 安装 Python 包
poetry add package-name
 
# 不要混用
# ❌ conda install package-name
# ❌ pip install package-name

问题 3:CI/CD 配置

# .github/workflows/ci.yml
name: CI
 
on: [push, pull_request]
 
jobs:
  test:
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v4
    
    - name: Setup Miniconda
      uses: conda-incubator/setup-miniconda@v3
      with:
        auto-update-conda: true
        python-version: 3.11
        activate-environment: test-env
    
    - name: Install Poetry
      run: pip install poetry
    
    - name: Configure Poetry
      run: poetry config virtualenvs.create false
    
    - name: Install dependencies
      run: poetry install
    
    - name: Run tests
      run: poetry run pytest

新兴替代方案

Pixi

最新信息表明,有一个叫 “Pixi” 的工具被强烈推荐,它以更简单、更集成的形式提供了 Conda 和 Poetry 的功能。如果你在开始新项目,可以考虑:

# 使用 Pixi(新兴工具)
pixi init myproject
pixi add python=3.11
pixi add numpy pandas

UV

# 用# 用 UV 创建虚拟环境
uv venv --python 3.12 .venv
 
# 让 Poetry 使用这个环境
poetry env use .venv/bin/python3
 
# 或者配置 Poetry 使用项目内的 .venv
poetry config virtualenvs.in-project true
poetry install

总结建议

最推荐的方式:

  1. 机器学习/科学计算项目: Conda 管理环境 + Poetry 管理依赖
  2. 纯 Python 项目: 完全使用 Poetry
  3. 新项目(实验性): 考虑 Pixi

核心原则:

  • ✅ 使用 Conda 创建环境和安装系统依赖
  • ✅ 使用 Poetry 管理所有 Python 包
  • ❌ 不要混用 conda installpoetry add
  • ✅ 配置 virtualenvs.create = false
  • ✅ 使用 poetry.lock 确保依赖可复现