lsp-mode python 虚拟环境支持应该如何设置?

我查了网上的一些配置, 大部分函数已经过期了 我 在Python Language Server Issue上查到可以使用一个VIRTUAL_ENV的环境变量来设置,我在打开一个python lsp前手动运行这个命令是它确实是可以生效 代码如下

(defun b-setenv ()
  (interactive)
    (setenv "VIRTUAL_ENV" (expand-file-name (read-directory-name "Select python venv directory")))
    )

然后我想在打开一个python lsp的时候都询问设置python虚拟环境路径,我的代码是这样的

(defun b-setenv ()
  (interactive)
    (setenv "VIRTUAL_ENV" (expand-file-name (read-directory-name "Select python venv directory")))
    )
(add-hook 'python-mode-hook #'lsp)
(add-hook 'lsp-before-initialize-hook #'b-setenv)

我查到lsp-before-initialize-hook的描述是

List of functions to be called before a Language Server has been initialized for a new workspace.

我发现在选择一个venv路径的时候pyls进程就已经启动了(而我还没有选择这个环境变量),环境变量这个时候并没有加进来, 但是我使用lsp-restart-workerspace重启之后 环境变量能正确的工作

不知道大家是怎么配置这个lsp python的?

根据这里的描述,spacemacs 会在打开 python 文件时运行 pipenv,doom 要自己折腾下

另外一种方案是:先在命令行里选择虚拟环境,然后再运行 emacs

谢谢 我现在为python-mode-hook增加了一个hook,先于lsp执行询问设置一个VIRTUAL_ENV环境来解决