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

你描述问题总是不清楚,什么叫 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 文档了,读完你就不会有这些问题了。。。)

提问题前把相关的文档先读一遍。看了还不会来请教,把问题描述清楚,我相信大家很愿意帮忙。每次就那么一句,我的不行了、不工作了,让你改bug能行吗?

说起来,pyright 的那个 stub 库(里面就是一堆 Any(和没有没什么区别x

不好意思了!受教!

确实,我用pyright自己生成的还是不行,用github下载的就可以!

我上面都跟你解释了生成的不是用来补全用的,你都不看的么。。。。

但是可以用来补全,你是这么解决的吗,我把cv2.pyi拷到项目目录中就可以补全了

不是,补全与 pyi 应该没什么关系(