lsp-mode使用pyright补全python提示未知模块名

使用cv时找不到里面的函数

2 个赞

起码要把我说的尝试一下吧,另外我用的时候都是把 type check 关了

大佬,我试了,确实是可以的,但是我的torch还是不行 stub这种方法不能一劳永逸啊

stub 里面没有 torch,当然不行了。去找个 torch 的 stub,或者我记得可以自己生成的。

pyright --createstub xxxxx

参见 pyright/type-stubs.md at main · microsoft/pyright · GitHub

必须要用stub吗?有没有别的解决方法啊?我用spacemacs的时候没有出现这种问题

要不换其他的 language-server, python 好像有比较多选择,例如 pylsp, jedi-language-server 之类的。pyright 好像就是利用 stub 的。他自己自带了一些核心的 stub。 这和你使用 spacemacs 还是什么的没关系

你描述问题总是不清楚,什么叫 torch 不行。

Screen Shot 2022-03-24 at 14.40.47

你 Spacemacs 的时候用的 lsp 么,后端是什么,如果都是 pyright 跟你用 spacemacs 什么的没有关系,你用 vscode 也是这样,只不过 pylances 默认把他们写的 stub 已经加上了,不需要手动加。


别的后端好久没用了,不清楚什么情况。反正 Pyright 的原理就是这样,我是把 type check 关了,只用补全。

不好意思 对的,spacemacs的时候用的也是pyright,补全什么的都没问题,是为啥呢? 现在用了stub,torch里面有的成员能找到,但是像torch.cuda就找不到

type check是这样关的吗 (setq lsp-pyright-typechecking-mode nil)

应该是

这个问题我重新生成了torch的stub解决了,感谢 ,我想问一下大佬,我有了lsp为啥还要lsp-pyright 我还需要装python-mode吗,不装行不行啊

这里补充一下,如果开了 lsp-pyright-use-library-code-for-types 应该可以把生成的 torch stub 删掉。因为这个生成的 stub 只是一个草稿,是为了方便人写 stub 用的,不是用来补全的。

因为 lsp 默认不支持 pyright :person_shrugging:t2:

可以 Emacs 有自带的 python

是不是意味着我添加了(setq lsp-pyright-stub-path "/home/max/.emacs.d/typings/")就不需要切换pyvenv的环境了啊

不是,typings 和 venv 是两回事,建议看文档理解

我的意思是补全我都放在typeings中,切换venv运行,这样写代码就不需要切换环境,运行时再切换

但是这个也有个副作用,有些喜欢用奇技淫巧的包(如 transformers)开了会卡死

你不可能给所有用到的包都找到一个 stubs 或者手动生成吧,如果你需要 lsp-pyright-use-library-code-for-types 是需要切换环境的。

确实,感谢大佬,还有,我没装python-mode,我切换环境必须用pyvenv吗?我看lsp-pyright有 lsp-pyright-venv-path但是好像没用

有用,还要指定 venv (都说让你去读 pyright 文档了,读完你就不会有这些问题了。。。)