一句话
VSCode 本体不认 uv ✗ —— 认环境的是 Python 扩展;uv 建的 venv 就是普通 venv(目录里有 pyvenv.cfg),只要落在它能扫的位置就能被识别。
先决条件(本机现状)
| 项 | 现状 |
|---|---|
| VSCode | pkgs.vscode 1.119.0(MS 正版)✓ 已装 |
| 扩展 | 零扩展(~/.vscode/extensions 里只有 extensions.json)⇒ 必须先装 ms-python.python |
| uv 环境 | /s500data/envs/{py368,ju314,py313,py313B},都是普通 venv;bin/python 是指向托管解释器的符号链接 |
识别设置已由 nix 托管(不用手写 ✓)
/etc/nixos/modules/desktop/ide/vscode.nix 的托管段里已经有这两行 ⇒ rebuild 后自动进入 ~/.config/Code/User/settings.json:
"python.venvPath": "/s500data/envs", // 父目录 ⇒ 一次暴露 py313/ju314/py368/py313B
"python.locator": "native"想改/关:就在那个文件里改行尾的值,或行首加 // 关掉 ⇒ rebuild 生效 ✓(已实测:注释中间行、最后一行都安全 ✓ 取消注释即恢复 ✓ 幂等 ✓)
Python 扩展扫哪里(识别顺序)
| 位置 | 说明 |
|---|---|
工作区内的 .venv | 优先级最高;项目里 uv venv 后自动命中,无需配置 |
python.venvPath + python.venvFolders | 父目录 + 子目录名(本机用前者指到 /s500data/envs) |
python.defaultInterpreterPath | 固定指定一个解释器(不看列表);全局设会把所有项目锁死,慎用 |
| PATH 上的 python | 系统 python、已激活环境里的 python |
| conda / pyenv 目录 | uv 不走这些引流器;uv 托管解释器在 ~/.local/share/uv/python/,不在默认扫描列表 |
操作与判据
code --install-extension ms-python.python # 先决条件(本机目前零扩展)
Ctrl+Shift+P → Python: Select Interpreter # 列表应出现 py313 / ju314 / py368 / py313B
# 状态栏右下角显示当前解释器;选中后新开终端自动激活
# 不靠 UI 的核对:
cat /s500data/envs/py313/pyvenv.cfg # 有它 ⇒ 被认定为 venv ✓
/s500data/envs/py313/bin/python -V # 3.13.15 ✓与 uv 配合的常用命令
uv venv # 项目内建 .venv ⇒ 扩展自动命中
uv python pin 3.13 # 写 .python-version
uv run python xxx.py # 不依赖 IDE 选择
source /s500data/envs/py313/bin/activate # 手动激活机制(这套设置是怎么落地的)
nix 只托管 settings.json 里带标记的一小段(隐私/遥测/AI/更新 + uv 识别);文件本身保持可写 ⇒ 界面里改其它设置照旧落盘 ✓。每次 rebuild 的 activationScript 只重写那段标记区间,段外内容(含你的注释)永不被碰 ✓;合并结果若非法则拒绝写入并留备份为 settings.json.vscode-bad-<时间> ✓。项目级覆盖写项目内 .vscode/settings.json(优先级更高)。