Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How setup it to use the pyright installed in the environment? #95

Open
dhilst opened this issue Jul 2, 2024 · 1 comment
Open

How setup it to use the pyright installed in the environment? #95

dhilst opened this issue Jul 2, 2024 · 1 comment

Comments

@dhilst
Copy link

dhilst commented Jul 2, 2024

I have this example code:

from typing import Protocol, final

class Proto(Protocol):
    def foo(self, x: int) -> str: ...


@final
class Impl(Proto):
    def foo(self, x: int) -> int: ...

I have no errors in the editor, but if I install pyright manually and run the command I have the expected error

(mypyproject-py3.12) ➜  mypyproject poetry add pyright                                         
Using version ^1.1.369 for pyright

Updating dependencies
Resolving dependencies... (0.1s)

Package operations: 2 installs, 0 updates, 0 removals

  - Installing nodeenv (1.9.1)
  - Installing pyright (1.1.369)

Writing lock file
(mypyproject-py3.12) ➜  mypyproject pyright 
/nvme/geckos/home/code/mypyproject/mypyproject/foo.py
  /nvme/geckos/home/code/mypyproject/mypyproject/foo.py:9:9 - error: Method "foo" overrides class "Proto" in an incompatible manner
    Return type mismatch: base method returns type "str", override returns type "int"
      "int" is incompatible with "str" (reportIncompatibleMethodOverride)
1 error, 0 warnings, 0 information 

How can I tell to lsp-pyright to use the installed pyright?

I have this configuration in my .emacs

;; Required by lsp-pyright
(use-package lsp-pyright
  :ensure t
  :hook (python-mode . (lambda ()
                          (require 'lsp-pyright)
                          (lsp))))  ; or lsp-deferred

Also I'm using poetry as the package manager for my projects, and poetry.el package. I activate the environment by M-x poetry RET v and restart the lsp with lsp-workspace-restart

I guess lsp-pyright install its own version of pyright, but couldn't found by looking into the elisp code

I'm also using poetry config virtualenvs.in-project true, which make poetry create the virtual environment at .venv. When I ran M-: (lsp-pyright-locate-venv) I receive "~/code/mypyproject/.venv" in the minibuffer, but still no error reporting for the protocol implementation.

Note: This may be an Y/X problem. I want to have the proper error message (X) and I believe the problem that the plugin is using whatever other version of pyright that is not the same of the command line(Y), but maybe Y is not the case

@zipy124
Copy link
Contributor

zipy124 commented Aug 25, 2024

I guess lsp-pyright install its own version of pyright, but couldn't found by looking into the elisp code

It does not. The user must supply it.

Your problem is that lsp-pyright looks for pyright in the general $PATH, not with your environment active. That is it looks for your system pythons pyright.

I'm unsure as to the best solution to your problem, but it is likely either adding your poetries environment to the $PATH, or installing pyright into the system, itself, not in a venv. (though it would be possible to modify lsp-pyright to use your poetry version of pyright, I don't think it is the intended usecase)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants