lsp-pyright 不自动使用 python-pyright 作为 flycheck checker

@seagle0128 大神,最近转到您写的 lsp-pyright, 发现它并没有自动启动 python-right 作为flycheck 的 python checker。启用lsp mode之后,默认都使用 lsp checker,不理解 lsp checker的背后原理,但是感觉也应该使用默认的 language server 获取 diagnostics 信息,但是至少在我的 python mode 下它并没有默认 fallback 到 python-pyright,求教为什么。 :pray:

有个 hack 的方法可以绕过去,但是感觉这个比较丑陋:

(use-package lsp-pyright
  :ensure t
  :hook (python-mode . (lambda ()
                         (setq lsp-diagnostics-provider :none) ;; don't use 'lsp as default flycheck checker, this will turn off the flycheck auto-start too.
                         (setq flycheck-checker 'python-pyright) ;; use 'python-pyright instead as python checker.
                         (global-flycheck-mode) ;; enable flycheck manually.
                         (require 'lsp-pyright) ;; use lsp-pyright lsp
                         (lsp-deferred)

使用lsp-mode默认使用的是lsp checker,用hook方式可以强制使用python-pyright。用flycheck-verify-checkerC-c ! v)可以查看当前buffer使用的checker信息。用flychecker-disable-checker可以禁用lsp.

1 个赞

大佬,我现在使用pyright 用virtualenv管理虚拟环境,怎么让pyright切换环境啊

  1. direnv 等自动切换,Emacs 中需要相关包配合
  2. .dir-locals.elpyproject.toml 指定虚拟环境

我现在用pyvenv激活环境然后再lsp-workspace-restart重启服务,但是找不到我装的cv2里面的方法

你这样说太泛了,不能确定问题在哪

除了 cv2 别的装的包的方法能找到么(或者 import 包的时候是否报错,如果不报错说明切换虚拟环境成功了)

image 环境切换成功了,但是cv里的函数都找不到,torch包有的能找到有的找不到,这该怎么排查啊

cv2 和 torch 可能很多不是用 Python 实现的,所以即使打开 useLibraryCodeForTypes 也不行。

微软维护了一个常见包的 type-stubs 包括 cv2,你可以把stubPath(也即 lsp-pyright-stub-path)设置成这个。GitHub - microsoft/python-type-stubs: A set of type stubs for popular Python packages. These are works in progress from the Microsoft Python team and others, with the intent that they are contributed to typeshed or to the associated packages once sufficiently complete.

建议去看下 pyright 的文档和配置,有个大概的理解。 然后有问题建议新开帖

感谢大佬,我重新开个贴