创建和管理 Conda 环境:create、activate、deactivate、remove

创建和管理 Conda 环境,说白了就是给每个项目搭一个独立的小窝。我刚开始做分子模拟时,就因为 NumPy 和 OpenBabel 的版本冲突,折腾了整整两天。从那以后,我老老实实给每个项目都建独立环境。你想想看,一个环境崩了,其他项目还能正常跑,这不香吗?

这章我们直接上手四个核心命令:create、activate、deactivate、remove。掌握了它们,你就能自如地给项目分配“独立房间”,用完还能彻底清理。先看一张整体流程图,混个眼熟。

Conda 环境生命周期管理 conda create -n myenv conda activate myenv 安装依赖 & 运行项目 conda deactivate conda remove -n myenv --all 回到 base / 重新创建 💡 生命周期闭环 删除后可重新创建 环境管理灵活可控 ① 创建 ② 激活 ③ 使用 ④ 停用 ⑤ 删除 ⑥ 重建

conda create — 为项目搭建独立空间

创建环境是第一步,也是最常用的一步。我个人习惯用 -n 或 --name 来指定环境名,简单直接。

conda create -n molsim

这样会创建一个空环境,里面只有最基本的依赖。但大多数时候,我们创建环境的同时就要指定 Python 版本和常用包。比如做分子模拟,我通常会这样:

conda create -n molsim python=3.9 numpy pandas rdkit openbabel

等号后面写版本号,Conda 会自动帮你搞定依赖兼容。我在项目中遇到过好几次因为没指定 Python 版本,结果装了个 Python 3.12,一堆分子模拟包还不支持,最后只能重建环境。嗯,这里要注意:创建时就定好 Python 大版本,能省去后面很多麻烦。

小技巧: 如果团队协作,建议把环境定义写在 environment.yml 文件里,别人一行命令就能复刻你的环境:
conda env create -f environment.yml
文件内容类似这样:
name: molsim
channels:
  - conda-forge
  - defaults
dependencies:
  - python=3.9
  - numpy
  - pandas
  - rdkit
  - openbabel

conda activate — 进入你的工作环境

环境建好了,怎么进去?用 activate 命令。Windows 和 Linux/macOS 用法一样:

conda activate molsim

执行完这条命令,你会发现命令行前面多了 (molsim) 这个前缀,这说明你已经成功进入该环境了。我第一次用的时候,盯着终端看了半天,心想这就算激活了?没错,就是这么简单。

判断是否激活: 看命令行提示符最前面的括号内容。(base) 表示在根环境,(molsim) 表示在 molsim 环境。如果没有任何括号,说明 Conda 还没初始化,可能需要先执行 conda init。

激活后,你安装的所有包、运行的脚本,都只影响当前环境,不会污染其他项目。我在项目中遇到过一位同事,直接在 base 环境里装各种包,结果某天更新了一个依赖,整个 base 环境崩了,所有项目都受影响……从那以后,他跟我一样,每个项目都用独立环境。

注意: 不要直接在 base 环境里安装项目依赖!base 环境是 Conda 自己用的,搞乱了可能连 conda 命令本身都会出问题。我曾经就因为手滑在 base 里装了不兼容的包,导致 conda 命令都报错,最后只能重装 Conda……嗯,血的教训。

conda deactivate — 退出当前环境

活干完了,想回到 base 环境?直接:

conda deactivate

执行后,命令行前面的 (molsim) 就会消失,回到 (base) 或者没有前缀的状态。有朋友问我:“直接关终端行不行?” 行是行,但不够优雅。你想想看,如果是在脚本或自动化流程里,总不能靠关终端来切换环境吧?

deactivate 还有一个隐藏用法:如果你在嵌套环境里(比如先激活了 A,又在 A 里面激活了 B),执行一次 deactivate 只会退出一层,再执行一次才回到 base。我个人习惯是连续执行两次,确保退干净。

conda deactivate
conda deactivate
快速切换: 如果你想去另一个环境,不用先 deactivate 再 activate,直接 conda activate 另一个环境名 就行,Conda 会自动帮你切换。省一步是一步嘛。

conda remove — 清理不再需要的环境

项目做完了,或者环境搞坏了,怎么删?用 remove 命令:

conda remove -n molsim --all

注意 --all 这个参数,它表示删除整个环境,包括里面所有的包。如果不加 --all,那就是只删除环境里的某个包:

conda remove -n molsim numpy

我个人建议:确定不要的环境,直接加 --all 删干净,否则残留的环境配置文件还占着磁盘空间。我见过有人 base 目录下堆了十几个废弃环境,占了几个 G 空间……嗯,定期用 conda env list 检查一下,该删就删。

删除前确认: 执行 conda remove -n 环境名 --all 之前,一定要确认当前没有激活这个环境。如果正在使用中,Conda 会提示你先 deactivate。我曾经在一个重要环境里忘记 deactivate 就直接删,结果删了一半报错,环境变得半残……最后还是手动清理的,麻烦得很。

快速参考:命令对比

这四种命令在开发流程中各司其职,我整理了一张表,方便你快速查阅:

命令 作用 常用参数 使用场景
conda create 创建新环境 -n 环境名,python=3.9 新项目开始时,搭建独立沙箱
conda activate 激活指定环境 环境名 进入环境,安装依赖或运行代码
conda deactivate 退出当前环境 无 切换项目前,先回到 base
conda remove 删除环境或其中的包 -n 环境名,--all 项目归档或环境修复失败时
一句话总结: create 建房子,activate 住进去,deactivate 搬出来,remove 拆房子。Conda 环境管理就是这么四步循环。

把这四个命令练熟了,你的开发环境就能做到“即用即建,用完即弃”,再也不用担心依赖冲突了。我个人现在每开一个新项目,第一件事就是 conda create -n 项目名 python=3.9,已经形成肌肉记忆了。