(setq python-shell-interpreter "python3")
(setq lsp-python-ms-python-executable-cmd "python3")
Add lsp-python-ms-extra-paths
to .dir-locals.el
(setq python-shell-interpreter "python3")
(setq lsp-python-ms-python-executable-cmd "python3")
Add lsp-python-ms-extra-paths
to .dir-locals.el
(use-package lsp-python-ms
:ensure t
;需要延迟加载,因为脚本regist client时候依赖动态改变的lsp-python-ms-extra-paths
:defer t
:custom
;; lsp-python-executable-cmd, 用来解决在 PATH 里面存在 python2 和 python3,
;; 并且 python 默认指向 python2(例如 macos), 而平时使用都用 python3,
;; 这样不能引用python3 下面的包
(lsp-python-ms-python-executable-cmd "python3")
:config
)
(use-package python-mode
:ensure t
:hook (
(python-mode . lsp-deferred)
(python-mode . (lambda ()
(setq lsp-python-ms-extra-paths (list (file-name-directory buffer-file-name)))
(require 'lsp-python-ms)
))
)
:config
)
不想使用dir-locals,我试了一下,这样配置比较符合我使用的场景
当前模块下面其实重点是你的工程设置,例如 projectile 的。 extra-path 这个变量是防止一些不在 site-packages 里面的额外库的。一般不需要特别设置。
这里就是有个奇怪的地方,为什么lsp-python-ms-python-executable-cmd设置成python3以后,没有把当前buffer所在的当前目录传递给python ms lsp解析呢,默认的python2就不存在这个问题
最简单的办法,创建一个 symlink,python3
→ python
。
Update:GitHub - emacs-lsp/lsp-python-ms: lsp-mode Microsoft's python language server
试过这种方法了,没有效果,依然不能import当前同目录下的py文件
看下你贴出来的图,主要的问题是,其中有一句 "Workspace root: /home/…/app_config ", 所以ms-pyls补全时候默认是寻找的 app_config 里面的模块,而你要补全的库在 …app_config/test 下面, 所以找不到。
这里我现在忽然发现,当前目录下的包如果使用 from . import xxxx 这种方式引用的话,lsp-python-ms是可以正常解析的,这么写也比较规范,以前是我用错了
好棒!回头试试!