MacOS下NVChad的null-ls调用mypy失败的排查修复咨询
排查与解决null-ls找不到pyenv环境中mypy的问题
核心问题
Neovim(NVChad)启动时未继承shell的pyenv环境变量,导致null-ls调用mypy时,找不到你指定的pupdb-3.12.2环境里的命令。
先做排查
- 打开NVChad,输入
:!echo $PATH和:!pyenv version,对比终端里的输出:- 如果NVChad里的PATH没包含
~/.pyenv/versions/pupdb-3.12.2/bin,说明环境变量没传进来 - 如果
pyenv version输出不是pupdb-3.12.2,说明局部环境没在Neovim里生效
- 如果NVChad里的PATH没包含
- 终端里激活pupdb-3.12.2,执行
which mypy,复制这个绝对路径备用
解决办法
方法1:让Neovim继承shell环境(最稳妥)
MacOS用zsh的话,编辑~/.zprofile,添加两行:
export PATH="$HOME/.pyenv/bin:$PATH" eval "$(pyenv init --path)"
保存后重启电脑,再打开NVChad验证:!pyenv version和:!which mypy,应该就和终端一致了。
注:如果是从Spotlight/启动台打开NVChad,必须改.zprofile,因为GUI程序不会读.zshrc
方法2:直接给null-ls指定mypy绝对路径
找到NVChad的null-ls配置文件(一般是custom/configs/null-ls.lua),修改mypy的配置:
local null_ls = require("null-ls") null_ls.setup({ sources = { -- 给mypy指定绝对路径 null_ls.builtins.diagnostics.mypy.with({ command = "/Users/你的用户名/.pyenv/versions/pupdb-3.12.2/bin/mypy", }), -- 其他代码保持不变 }, })
保存后重启NVChad,null-ls就能直接找到正确的mypy了。
方法3:重置项目局部pyenv环境
到项目目录下,先删了.python-version,再执行pyenv local pupdb-3.12.2重新生成,确保文件里没有多余空格或换行,避免pyenv识别出错。
内容的提问来源于stack exchange,提问作者Simply Seth
相关产品推荐
相关产品推荐

