extract python venv utils
This commit is contained in:
59
lua/utils/python_venv.lua
Normal file
59
lua/utils/python_venv.lua
Normal file
@ -0,0 +1,59 @@
|
||||
local M = {}
|
||||
function M.getVenvSuffix()
|
||||
if vim.loop.os_uname().sysname == 'Linux' then
|
||||
return 'bin/python'
|
||||
elseif vim.loop.os_uname().sysname == 'Windows_NT' then
|
||||
return 'Scripts/python.exe'
|
||||
end
|
||||
end
|
||||
|
||||
function M.getVenvFromJson(jsonfile)
|
||||
if not vim.fn.filereadable(jsonfile) then
|
||||
return nil
|
||||
end
|
||||
local f = io.open(jsonfile, 'r')
|
||||
if not f then
|
||||
return nil
|
||||
end
|
||||
local data = f:read('*a')
|
||||
f:close()
|
||||
if data then
|
||||
local jdata = vim.json.decode(data)
|
||||
if jdata['venvPath'] ~= nil and jdata['venv'] ~= nil then
|
||||
return jdata['venvPath'] .. '/' .. jdata['venv']
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
function M.getPythonEnv()
|
||||
local venv = os.getenv('VIRTUAL_ENV')
|
||||
if venv ~= nil then
|
||||
return string.format('%s/%s', venv, M.getVenvSuffix())
|
||||
end
|
||||
local conda = os.getenv('CONDA_PREFIX')
|
||||
if conda ~= nil then
|
||||
return string.format('%s/%s', conda, 'python.exe')
|
||||
end
|
||||
|
||||
local cwd = vim.fn.getcwd()
|
||||
|
||||
local jsonVenv = M.getVenvFromJson(cwd .. '/pyrightconfig.json')
|
||||
if jsonVenv ~= nil then
|
||||
return jsonVenv .. '/' .. M.getVenvSuffix()
|
||||
end
|
||||
|
||||
if vim.fn.executable(cwd .. '/venv/' .. M.getVenvSuffix()) == 1 then
|
||||
return cwd .. '/venv/' .. M.getVenvSuffix()
|
||||
elseif vim.fn.executable(cwd .. '/.venv/' .. M.getVenvSuffix()) == 1 then
|
||||
return cwd .. '/.venv/' .. M.getVenvSuffix()
|
||||
else
|
||||
if vim.loop.os_uname().sysname == 'Linux' then
|
||||
return '/usr/bin/python'
|
||||
elseif vim.loop.os_uname().sysname == 'Windows_NT' then
|
||||
return os.getenv('SCOOP') .. '/apps/python/current/python.exe'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
Reference in New Issue
Block a user