前言
在 Python 开发中,不同项目往往依赖不同版本的库,直接混装在系统 Python 里迟早会遇到依赖冲突。Conda 是解决这一痛点的利器------它不仅能管理 Python 版本,还能隔离整个依赖环境,让每个项目"自给自足"。
本文将系统梳理 Conda 虚拟环境的常用操作,覆盖创建、切换、管理、导入/导出等全流程,适合作为案头速查手册。
环境说明: 本文命令在 Windows / Linux / macOS 下均可使用,路径写法请根据系统自行调整。
一、查看环境
在开始操作前,先看看系统里已经有哪些环境:
bash
# 列出所有环境(当前激活的环境前方带 * 号)
conda env list
# 等价命令
conda info --envs
示例输出:
# conda environments:
#
base * C:\Users\Administrator\miniconda3
ml C:\Users\Administrator\miniconda3\envs\ml
二、创建环境
2.1 基础创建
bash
# 创建名为 myenv 的环境,指定 Python 版本
conda create --name myenv python=3.12
# 使用 --prefix 指定自定义路径(适合需要把环境放在项目目录下的场景)
conda create --prefix "E:/software/miniconda3/envs/myenv" python=3.12 -y
-y参数可跳过安装确认,适合脚本化操作。
2.2 创建时同步安装包
bash
# 创建环境的同时安装常用包,减少后续单独安装的步骤
conda create --name myenv python=3.10 numpy pandas matplotlib
2.3 指定 Python 版本的最佳实践
不同的项目可能对 Python 版本有不同要求,创建时务必显式指定版本号,避免未来 CI/CD 中版本不一致导致的玄学问题:
bash
conda create --name dl_project python=3.10 # PyTorch 生态推荐 3.10
conda create --name web_project python=3.12 # 新项目可用最新稳定版
三、激活与切换环境
bash
# 激活指定环境
conda activate myenv
# 激活后,终端提示符前会显示环境名,例如 (myenv) $
# 可通过以下命令确认当前环境
conda info --envs
# 退出当前环境,回到 base
conda deactivate
注意: 在 PowerShell 中首次使用
conda activate可能需要先执行conda init powershell,然后重启终端。
四、安装与管理包
4.1 从 conda 源安装
bash
conda activate myenv
conda install numpy
4.2 从 pip 安装
当 conda 源没有某个包或版本不够新时,可以混用 pip:
bash
pip install numpy
顺序建议: 先用 conda 安装尽量多的包(conda 能更好地解决依赖),再用 pip 补充 conda 源里没有的包。不要在 conda 和 pip 之间来回切换着装同一个包的不同版本,容易把依赖搞乱。
4.3 批量安装
bash
# 将依赖写入 requirements.txt,一行一个包
pip install -r requirements.txt
4.4 常用组合
bash
# 数据分析三件套
pip install numpy pandas matplotlib
# 机器学习常用
pip install scikit-learn xgboost lightgbm
# 深度学习(建议用 conda 安装 PyTorch,以获得更好的 CUDA 兼容性)
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
五、删除与重命名环境
5.1 删除环境
bash
# 删除整个环境及其所有包
conda remove --name myenv --all
删除前建议先用
conda env list确认环境名,避免误删。
5.2 重命名环境
Conda 本身不支持直接重命名,需要通过"克隆 → 删除"两步实现:
bash
# 第一步:克隆原环境为新名称
conda create --name myenv_new --clone myenv
# 第二步:确认新环境可用后,删除旧环境
conda remove --name myenv --all
六、导出与导入环境
这是团队协作和项目复现的核心操作。
6.1 导出环境
bash
# 激活目标环境
conda activate myenv
# 导出为 environment.yml(包含精确版本号,适合精确复现)
conda env export > environment.yml
conda env export会锁定到小版本号,适合在同一个操作系统间复现。如果需要在不同 OS 间共享(如 Windows ↔ Linux),建议只保留顶层依赖,手动编辑 yml 文件去掉版本锁定。
6.2 从 yml 文件创建环境
bash
# 从 environment.yml 一键重建完整环境
conda env create --file environment.yml
6.3 仅导出顶层依赖(跨平台友好)
bash
# 导出时只保留显式安装的包(不包含依赖的子包)
conda env export --from-history > environment.yml
--from-history vs 默认导出的区别:
| 导出方式 | 内容 | 适用场景 |
|---|---|---|
conda env export |
所有包 + 精确版本 | 同机器 / 同 OS 精确复现 |
--from-history |
仅显式安装的包 | 跨平台共享,依赖由 conda 自行解析 |
七、查看环境中的包
bash
# 列出当前环境中所有已安装的包及其版本
conda list
# 搜索 conda 源中是否有某个包
conda search numpy
# 搜索特定版本的包
conda search numpy=1.24
八、环境清理与维护
bash
# 清理无用的缓存、索引、临时文件,释放磁盘空间
conda clean --all
# 仅清理已解压的包缓存(保留压缩包)
conda clean --tarballs
# 更新当前环境中所有可升级的包
conda update --all
# 更新 conda 自身
conda update conda
九、典型工作流
场景一:从零搭建新项目
bash
conda create --name my_project python=3.10
conda activate my_project
pip install numpy pandas scikit-learn
# 开始写代码...
场景二:接手已有项目(有 environment.yml)
bash
git clone <repo-url>
cd <repo>
conda env create --file environment.yml
conda activate <env-name>
场景三:为项目做环境迁移
bash
conda activate old_project
conda env export > environment.yml
conda deactivate
conda env create --file environment.yml # 在新机器或新路径重建
场景四:定期清理,释放磁盘空间
bash
conda clean --all # 动辄释放几个 G
conda env list # 顺便检查有没有废弃环境
conda remove --name unused_env --all
十、常见问题与排错
Q: conda activate 报错 CommandNotFoundError
- 执行
conda init初始化 shell,然后重启终端。
Q: 安装包时一直卡在 Solving environment
- Conda 在解依赖冲突时可能很慢,改用
mamba(Conda 的 C++ 重实现)可显著加速,或者先用 pip 安装核心包。
Q: conda 和 pip 混用后环境乱了
- 尽量避免混用。如果确实需要,原则是:先 conda 后 pip,用 pip 时加
--no-deps避免覆盖 conda 的依赖解析结果。
Q: 环境占用空间太大
- 执行
conda clean --all,定期清理缓存。Conda 的 pkg 缓存目录可能积攒大量历史版本。
总结
Conda 的核心价值在于 环境隔离------每个项目拥有独立的 Python 解释器和包集合,互不干扰。本文覆盖了从环境创建、包管理、导入导出到清理维护的完整生命周期。把这篇文章加入收藏,遇到问题随时回来查。
顺手推荐一个加速神器:mamba ------
mamba是conda命令的 drop-in 替换,依赖解析速度提升数倍,用法完全一致,将conda替换为mamba即可。