本文总结了如何在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