我查了网上的一些配置, 大部分函数已经过期了 我 在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
环境来解决