用 conda 固定默认环境 normal

先说目标

机器上同时有三套 Python 很容易搅在一起:

  1. 系统自带的 /usr/bin/python3
  2. conda 的 base
  3. 自己建的业务 / 学习环境

想要的结果很简单:不管终端还是 Cursor,一律只用名为 normal 的 conda 环境 ,不要再落到 base 或系统 Python 上。

下面以 miniforge(路径 /home/charlie/miniforge3)为例,过程对 Anaconda / Miniconda 同样适用,改一下前缀即可。

1. 创建 normal 环境

选用相对稳妥的 3.12:

ini 复制代码
conda create -n normal python=3.12 -y

创建完成后确认:

shell 复制代码
conda env list
# base                     /home/charlie/miniforge3
# normal                   /home/charlie/miniforge3/envs/normal

解释器路径固定为:

bash 复制代码
/home/charlie/miniforge3/envs/normal/bin/python

网络不稳时下载可能被 Connection reset by peer 打断,直接重跑同一条 conda create 即可,已下完的包会复用缓存。

2. 关掉 base 自动激活

默认安装后,新开 shell 会进 base。先关掉:

arduino 复制代码
conda config --set auto_activate_base false

新版 conda 会把这个键写成 auto_activate~/.condarc 里最终可以是:

vbnet 复制代码
auto_activate: false

这样登录时不会再默认进 base

3. 让 bash 登录后自动进 normal

~/.bashrc 的 conda initialize 块末尾加上激活语句:

bash 复制代码
# >>> conda initialize >>>
__conda_setup="$('/home/charlie/miniforge3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/home/charlie/miniforge3/etc/profile.d/conda.sh" ]; then
        . "/home/charlie/miniforge3/etc/profile.d/conda.sh"
    else
        export PATH="/home/charlie/miniforge3/bin:$PATH"
    fi
fi
unset __conda_setup
# Always use the `normal` env (never conda base / system Python)
conda activate normal 2>/dev/null
# <<< conda initialize <<<

要点:

  • 必须写在 conda hook 初始化之后 ,否则 conda activate 可能不可用
  • 2>/dev/null 避免环境尚未创建时刷一堆报错
  • 新开终端后提示符应显示 (normal)

已打开的旧终端不会自动生效,手动执行一次:

css 复制代码
conda activate normal

4. 让 Cursor 也指向 normal

只改 shell 不够,编辑器里跑 Python / 选解释器时仍可能跳到别的环境。在 Cursor 用户设置里加上:

json 复制代码
{
  "python.defaultInterpreterPath": "/home/charlie/miniforge3/envs/normal/bin/python",
  "python.terminal.activateEnvironment": true,
  "terminal.integrated.env.linux": {
    "CONDA_DEFAULT_ENV": "normal"
  }
}

路径按本机 conda 前缀调整。改完后重开集成终端,或在命令面板里重新选一次解释器确认。

5. 验收

干净登录测一下(或新开一个终端):

bash 复制代码
echo "$CONDA_DEFAULT_ENV"   # 期望:normal
which python                # .../envs/normal/bin/python
python --version            # Python 3.12.x
conda env list              # normal 前有 *

再确认没有误用系统解释器:

bash 复制代码
command -v python
command -v python3
# 两者都应落在 .../envs/normal/bin/ 下

系统里的 /usr/bin/python3 可以还在,但只要 PATH 里 normal 在前,日常敲 python / python3 就不会撞上它。

The End

做法
独立环境 conda create -n normal python=3.12
禁用 base auto_activate: false
终端默认 ~/.bashrcconda activate normal
编辑器默认 Cursor python.defaultInterpreterPath 指向 normal

之后装包、写脚本、跑实验,默认都进 normal;需要隔离的项目再单独 conda create -n xxx,用完切回来即可。

相关推荐
隐退山林1 小时前
JavaEE进阶:SpringBoot统一功能处理
java·spring boot·后端
Charlie_Byte1 小时前
Py 邮件集成与密码重置,并用 Mailpit 测试
后端
Charlie_Byte1 小时前
Webhook 与飞书机器人集成
后端
源代码•宸2 小时前
前置准备:架构设计方法论
经验分享·后端
geovindu2 小时前
java: Task Scheduler
java·开发语言·后端
代码不停2 小时前
Spring Boot 配置文件
spring boot·后端
IT_陈寒2 小时前
为什么我的Java Stream操作总是默默吃掉异常?
前端·人工智能·后端
江湖十年3 小时前
Go 虚荣域名详解:我用 go get -x 抓了个包,终于看清了 Go 工具链“对暗号”的全过程
后端·面试·go
Lost of 程序猿3 小时前
船岸数据同步链路实战:SendFlag、单调版本号与断网三天后的续传
后端·c#·asp.net