本文总结了如何在conda中混合使用conda和pip命令。

环境管理基础

使用venv和pip

这是venv和pip虚拟环境的使用方法,不在本文介绍范围内

# 创建虚拟环境
python -m venv myenv

# 激活环境
source myenv/bin/activate

# 安装包
pip install <package_name>

使用conda

本文主要介绍这个环境下的conda和pip命令使用注意事项。

# 创建环境
conda create --name my-env

# 激活环境
conda activate my-env

# 安装包
conda install <package_name>

environment.yml声明式工作流

environment.yml示例

这是conda环境中,管理conda和pip依赖的推荐方式。

name: my-scientific-project
channels:
  - conda-forge
  - defaults
dependencies:
  # --- conda包 ---
  - python=3.9
  - numpy
  - pandas
  - gdal
  - pip   # 必须将pip本身作为conda依赖

  # --- pip包 ---
  - pip:
    - "fastapi[all]==0.85.0"
    - beautifulsoup4
    - -r requirements-dev.txt # 引用一个独立的pip需求文件

创建、更新与导出环境

# 从文件创建环境
conda env create -f environment.yml

# 更新环境并移除文件中不再声明的包
conda env update --file environment.yml --prune

# 导出已存在的环境到yml文件
conda activate my-existing-env
conda env export > environment.yml

管理非Python依赖

安装系统级库

# 安装编译器
conda install gcc g++ clang

# 安装科学计算库
conda install gdal hdf5 netcdf4

# 安装系统工具
conda install git redis ffmpeg

构建C++包的配置示例(meta.yaml)

这是 conda-build 用来构建非Python包的配置文件核心。

package:
  name: my-cpp-library
  version: 1.0.0

source:
  path:../

requirements:
  build:
    - {{ compiler('cxx') }} # 声明需要C++编译器
    - cmake
    - make                # [not win]
  host:
    - zlib                # 链接时依赖
  run:
    - zlib                # 运行时依赖

高级开发工作流

可编辑安装

用于在conda环境中开发本地Python包。

# 假设所有依赖已在当前conda环境中通过conda安装完毕
# --no-deps: 不安装依赖
# --no-build-isolation: 不创建隔离的构建环境,使用当前环境的工具
pip install --no-deps --no-build-isolation -e .

检查已安装的包

# 列出环境中所有包(pip安装的包会标记为pypi)
conda list

# 仅列出由conda管理的包
conda list --no-pip

避免环境损坏的命令

危险操作示例(应避免)

# 错误示范:在conda环境中随意使用pip升级,可能覆盖conda管理的二进制文件
pip install --upgrade <package_name>

# 错误示范:在激活的conda环境中使用 --user,会破坏环境隔离
pip install --user <package_name>

推荐的pip标志

# 在磁盘配额受限的环境中,避免pip缓存占用主目录空间
pip install --no-cache-dir <package_name>

PEP 668强制覆盖

# 在受外部工具(如conda)管理的环境中强制使用pip安装(需谨慎)
pip install --break-system-packages <package_name>

pip自动卸载依赖包

通过pip卸载软件包,同时卸载依赖包,保持所有pip包最新:

# remove unused packages
pip install pip-autoremove
pip-autoremove jupyterhub

# keep packages up-to-date
pip install pip-review
pip-review --auto