3. Conda 基本命令:创建、激活、删除环境
进入正题之前,我想先问你一个问题:你平时是怎么管理 Python 版本的?
很多新手直接 pip install 装到 base 环境里,装到后面一团乱。项目 A 要 Python 3.8 + TensorFlow 1.x,项目 B 要 Python 3.11 + PyTorch 2.0。你让 base 怎么兼容?
Conda 的虚拟环境就是解决这个问题的。每个环境是独立的箱子,你随便折腾,坏了就删掉重来。今天我把最常用的三个命令——创建、激活、删除——掰开揉碎讲清楚。
3.1 创建环境:conda create
创建环境是 Conda 最基础的操作。命令很简单:
conda create --name myenv python=3.9
这条命令会创建一个名为 myenv 的环境,安装 Python 3.9 以及所有基础依赖。注意,如果你不加 python 版本号,Conda 只会创建一个空环境,什么包都没有——进去之后连 python 都找不到,别问我怎么知道的,我曾经就踩过这个坑。
project_python版本 的格式,比如 ml_pipeline_py39。这样一看名字就知道这个环境是干嘛的,避免半年后面对一堆 test1、test2 抓耳挠腮。
如果你还需要安装其他包,可以一次性追加:
conda create --name myenv python=3.9 numpy pandas scikit-learn
Conda 会自动解析依赖冲突。嗯,这里有个小细节:推荐使用 conda-forge 频道,因为官方频道很多包更新慢。加 -c conda-forge 即可:
conda create -c conda-forge --name myenv python=3.10 opencv
-c conda-forge 要放在环境名前面,顺序别搞反了。我遇到过有人写成 conda create --name myenv -c conda-forge python,虽然也能用,但逻辑上包源优先设置更清晰。
3.2 激活环境:conda activate
环境创建好之后,你得激活它才能用里面的包。命令:
conda activate myenv
激活后,终端行前面会出现 (myenv) 标识。这时候你运行 python --version,看到的就是你指定的版本。
不同操作系统的注意事项:
| 系统 | 首次使用需要 | 常见问题 |
|---|---|---|
| Linux / macOS | conda init(通常安装时已配好) |
如果 conda activate 报错,先跑 source ~/.bashrc 或重启终端 |
| Windows | 默认安装在 Anaconda Prompt 里使用 | 在 PowerShell 中用 conda activate 可能需要先 conda init powershell |
我个人习惯在激活环境后,立马执行 python -c "import sys; print(sys.executable)" 确认一下解释器路径,确保真的是在用新环境。这个习惯帮我发现过好几次路径污染问题。
conda deactivate 即可。不用记名字,Conda 会自动回退到 base 环境。
3.3 删除环境:conda remove --name [环境名] --all
环境不要了就删掉,干净利落。命令:
conda remove --name myenv --all
注意 --all 这个参数,不加的话只会删除指定的包,不会删环境本身。我曾经犯过糊涂,只写了:
conda remove --name myenv python
结果环境还在,只是 Python 没了,成了一个「残疾环境」。后来进都进不去了,还得手动去 envs/ 目录下 rm -rf。所以一定要带上 --all。
-y 参数:conda remove --name myenv --all -y。但手工操作时我不建议用 -y,万一打错了环境名……嗯,反正我删错过一次。
如果你想删除当前已激活的环境,需要先 deactivate 再删,否则会报错。因为 Conda 不允许删除正在使用的环境。
3.4 列出所有环境:conda env list
作为补充,列出环境的命令:
conda env list
或者用简写:conda info --envs。输出类似:
# conda environments:
#
base * /home/user/miniconda3
myenv /home/user/miniconda3/envs/myenv
ml_pipeline_py39 /home/user/miniconda3/envs/ml_pipeline_py39
带 * 的就是当前激活的环境。平时排查问题时,我第一件事就是跑这个命令,确认我到底在哪个环境里——相信我,你会经常搞混的。
3.5 完整的工作流示例
把上面的命令串起来,看看一个典型的使用流程:
- 创建环境并安装依赖
- 激活环境
- 跑代码或做实验
- 退出环境
- (可选)删除环境
# 1. 创建
conda create -c conda-forge --name my_project python=3.9 pandas numpy -y
# 2. 激活
conda activate my_project
# 3. 验证
python -c "import pandas; print(pandas.__version__)"
# 4. 运行你的代码
python train.py
# 5. 用完退出
conda deactivate
# 6. 再也不用了?删掉
conda remove --name my_project --all -y
最后,我把本章的知识脉络整理成一张图,帮你快速建立整体认知: