创建和管理 Conda 环境:create、activate、deactivate、remove
创建和管理 Conda 环境,说白了就是给每个项目搭一个独立的小窝。我刚开始做分子模拟时,就因为 NumPy 和 OpenBabel 的版本冲突,折腾了整整两天。从那以后,我老老实实给每个项目都建独立环境。你想想看,一个环境崩了,其他项目还能正常跑,这不香吗?
这章我们直接上手四个核心命令:create、activate、deactivate、remove。掌握了它们,你就能自如地给项目分配“独立房间”,用完还能彻底清理。先看一张整体流程图,混个眼熟。
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 环境崩了,所有项目都受影响……从那以后,他跟我一样,每个项目都用独立环境。
conda 命令本身都会出问题。我曾经就因为手滑在 base 里装了不兼容的包,导致 conda 命令都报错,最后只能重装 Conda……嗯,血的教训。
conda deactivate — 退出当前环境
活干完了,想回到 base 环境?直接:
conda deactivate
执行后,命令行前面的 (molsim) 就会消失,回到 (base) 或者没有前缀的状态。有朋友问我:“直接关终端行不行?” 行是行,但不够优雅。你想想看,如果是在脚本或自动化流程里,总不能靠关终端来切换环境吧?
deactivate 还有一个隐藏用法:如果你在嵌套环境里(比如先激活了 A,又在 A 里面激活了 B),执行一次 deactivate 只会退出一层,再执行一次才回到 base。我个人习惯是连续执行两次,确保退干净。
conda deactivate
conda deactivate
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 |
项目归档或环境修复失败时 |
把这四个命令练熟了,你的开发环境就能做到“即用即建,用完即弃”,再也不用担心依赖冲突了。我个人现在每开一个新项目,第一件事就是 conda create -n 项目名 python=3.9,已经形成肌肉记忆了。