3. 基础环境管理:创建、激活、列出、删除

基础环境管理,说白了就是 Conda 中最核心的那几个操作。你可能觉得这很简单,不就是一个 create、一个 activate 嘛。但我在实际项目中见过太多人因为“基础不牢”而翻车——环境删错了、激活错了、依赖包版本对不上。这些坑,我今天一次性给你讲清楚。

我的个人习惯:每开始一个新项目,第一件事就是创建独立环境。你想想看,如果所有项目都挤在 base 环境里,依赖冲突会让人崩溃。

3.1 创建环境:conda create

创建环境的命令很简单。但我提醒你,别只记参数,要理解背后的逻辑。

conda create --name myenv python=3.9

这里的 myenv 是环境名,python=3.9 指定了 Python 版本。为什么不装最新版?我曾在一个生产项目中用了 Python 3.11 的测试版,结果某个库死活装不上。后来才明白,尽量用稳定版本,比如 3.8、3.9 或 3.10。

小技巧:创建环境时直接指定依赖包列表,可以省掉后续安装步骤。

conda create --name myenv python=3.9 numpy pandas scikit-learn

如果你有一个 environment.yml 文件,可以直接从文件创建。

conda env create -f environment.yml

我记得有一次接手同事的项目,他用的是 environment.yml 但没锁定版本,结果两个月后我重建环境时,依赖包版本全变了,代码跑不动。所以,从文件创建环境时,一定要确保 environment.yml 包含精确版本号。这个我们后续章节会深入讲。

创建环境的常用参数

参数 作用 我的经验
--name / -n 指定环境名称 命名要有规律,比如 project_name_py39
--prefix / -p 指定环境路径 我很少用这个,除非项目要求环境放在特定目录
python= 指定 Python 版本 版本号必须精确到小版本,如 3.9.13
-f / --file 从文件创建 文件必须是 .yml 或 .yaml 格式

3.2 激活与退出环境

环境创建好了,得进去才能用。激活环境就是告诉终端:“我现在要在这个环境里工作”。

conda activate myenv

激活后,你会发现终端前面多了 (myenv) 字样。这是确认你已经进入环境的直观提示。退出环境更简单:

conda deactivate

嗯,这里有个小陷阱。在 Windows 上,如果你用的是 conda 的旧版本,可能会提示 activate 命令找不到。别慌,升级一下 conda 就好。

我曾经在服务器上远程调试,忘了激活环境就直接装包。结果包装到了 base 环境里,整个服务器的 base 环境被我搞坏了。从那以后,我每次操作前都会先检查当前环境——用 conda info --envs 确认激活状态。

激活环境的正确姿势

  • 检查是否已激活:看终端前缀,或者用 conda info --envs 查看当前激活的环境(前面有 * 标记)。
  • 避免嵌套激活:在环境 A 中激活环境 B,容易混乱。我建议先 conda deactivate 退回到 base,再激活目标环境。
  • 使用脚本时注意:在 shell 脚本中激活环境,需要用 conda run 或者 source activate(取决于 shell 配置)。

3.3 列出所有环境

当你创建了十几个环境后,怎么知道哪些环境还在、哪些该删了?这时候就需要列出环境。

conda env list

或者用更简短的命令:

conda info --envs

输出结果会显示所有环境的路径,当前激活的环境前面会有一个 * 符号。

我发现很多人只记 conda env list 这一种写法。其实 conda info --envs 也可以,而且它和 conda config 等命令风格更统一。我个人习惯用后者。

列出环境时要注意什么

  • 检查环境是否被激活:带 * 的就是当前活动环境。如果你试图删除一个被激活的环境,Conda 会报错。
  • 查看环境路径:默认环境存在 envs/ 目录下。如果你用 --prefix 指定了路径,那个环境会显示完整路径。
  • 脚本中使用:在脚本里获取环境列表,可以用 conda env list --json,输出 JSON 格式,方便解析。

3.4 删除环境

环境用完了,或者搞坏了,就得删掉。删除命令很简单:

conda env remove --name myenv

但我要提醒你:删除前务必确认你不在那个环境中。否则会提示“你无法删除正在使用的环境”。

我曾经有一次想删除一个叫 experiment 的环境,但忘了退出来。结果 Conda 提示“无法删除当前活动环境”。我那时急着下班,直接强制删除了环境目录……第二天发现 base 环境也被我误删了。血的教训:删除前先 conda deactivate。

删除环境的注意事项

情况 操作 后果
环境正在使用 先 conda deactivate 无法直接删除活动环境
环境包含重要包 先用 conda list -n myenv 导出包列表 删除后包列表不可恢复
环境名称拼写错误 用 conda env list 确认名称 误删其他环境

3.5 知识体系:环境生命周期

下面这张图概括了环境从创建到删除的完整流程。你看,每个环节都有对应的命令和注意事项。

Conda 环境生命周期 1. conda create 2. conda activate 3. 安装/使用包 4. conda deactivate 5. conda env remove 避坑要点 • 创建时指定 Python 版本 • 删除前先 deactivate • 用完包务必退出环境 常用命令 • conda env list • conda list • conda info --envs

3.6 常见问题与实战技巧

我再分享几个项目中遇到的真实问题,希望能帮你少走弯路。

问题1:环境创建慢怎么办?

国内网络环境,创建大环境时经常卡在“Solving environment”这一步。我的解决方案是:使用国内镜像源。

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/

如果你遇到“环境创建超时”,可以设置超时时间:

conda config --set remote_read_timeout_secs 120

问题2:环境激活后找不到包?

我曾遇到一位同事,激活环境后输入 python,结果调用了 base 环境的 Python。原因是他的 PATH 设置有问题。检查方法:

which python

如果显示的不是环境路径,说明激活没生效。修复方法:重新激活环境,或者检查 shell 配置文件(.bashrc、.zshrc)中是否有冲突的路径设置。

问题3:误删了重要环境怎么办?

如果环境目录没有彻底销毁,可以尝试恢复。但说实话,最好的防御是事前备份。我在管理重要环境时,会定期做一次 conda env export 导出环境配置。

conda env export > myenv_backup.yml

这样即使环境被删了,也能一键重建。

我的终极建议:把基础环境管理命令背下来,特别是 create、activate、deactivate、list、remove 这五个。每次用之前,先在脑子里过一遍“我当前在哪个环境?我要操作哪个环境?”。