fix(health): errors in :checkhealth with pyenv-virtualenv #35865

Problem:
pyenv-virtualenv sets a different path for VIRTUAL_ENV than the path to the
python binary it provides, but these paths both symlink to the same file, so
there should be no disparity. The python health-check reports an error, since it
only checks if these paths are equal, not where they point to (resolve to).

Solution:
- Resolve the python symlinks before checking if they are equal.
- Deduplicate some code.
This commit is contained in:
SkrrtBacharach
2025-09-21 22:25:14 +01:00
committed by GitHub
parent c947b8da10
commit cfe10b4014

View File

@@ -805,27 +805,32 @@ local function python()
local nvim_py_bin = python_exepath(vim.fn.exepath(py_bin_basename)) local nvim_py_bin = python_exepath(vim.fn.exepath(py_bin_basename))
if nvim_py_bin then if nvim_py_bin then
local subshell_py_bin = python_exepath(py_bin_basename) local subshell_py_bin = python_exepath(py_bin_basename)
if venv_bin ~= nvim_py_bin then local bintable = {
errors[#errors + 1] = '$PATH yields this ' ['nvim'] = {
.. py_bin_basename ['path'] = nvim_py_bin,
.. ' executable: ' ['hint'] = '$PATH ambiguities arise if the virtualenv is not '
.. nvim_py_bin
local hint = '$PATH ambiguities arise if the virtualenv is not '
.. 'properly activated prior to launching Nvim. Close Nvim, activate the virtualenv, ' .. 'properly activated prior to launching Nvim. Close Nvim, activate the virtualenv, '
.. 'check that invoking Python from the command line launches the correct one, ' .. 'check that invoking Python from the command line launches the correct one, '
.. 'then relaunch Nvim.' .. 'then relaunch Nvim.',
hints[hint] = true },
end ['subshell'] = {
if venv_bin ~= subshell_py_bin then ['path'] = subshell_py_bin,
errors[#errors + 1] = '$PATH in subshells yields this ' ['hint'] = '$PATH ambiguities in subshells typically are '
.. py_bin_basename
.. ' executable: '
.. subshell_py_bin
local hint = '$PATH ambiguities in subshells typically are '
.. 'caused by your shell config overriding the $PATH previously set by the ' .. 'caused by your shell config overriding the $PATH previously set by the '
.. 'virtualenv. Either prevent them from doing so, or use this workaround: ' .. 'virtualenv. Either prevent them from doing so, or use this workaround: '
.. 'https://vi.stackexchange.com/a/34996' .. 'https://vi.stackexchange.com/a/34996',
hints[hint] = true },
}
for bintype, bin in pairs(bintable) do
if vim.fn.resolve(venv_bin) ~= vim.fn.resolve(bin['path']) then
local type_of_path = bintype == 'subshell' and '$PATH' or '$PATH in subshell'
errors[#errors + 1] = type_of_path
.. ' yields this '
.. py_bin_basename
.. ' executable: '
.. bin['path']
hints[bin['hint']] = true
end
end end
end end
end end