• 作成:

EmacsからPyrightを使う時にPipenvのライブラリを認識してもらう方法

一つ前の解決済みの問題

boto3-stubs · PyPI とかをインストールしてくれてるのにmypyが認識してくれない。つらい。

ドキュメントでもmypyより、 Pyright が優先されて書かれてるし変な意地はらずに使った方が良いのではと思って問題解決すれば良いなとダメ元で使ってみました。

boto3が認識されました。良かった。

問題

git submoduleで置いてるプライベートなパッケージを認識してくれない。

pipenv run pyright

みたいに動かせば認識してくれるんですが、 pyright単体だとダメです。

pyrightconfig.jsonを書きたくなかった

pyrightconfig.json を書く方法は嫌でした。

これでvenvPathを指定すれば動くのかもしれませんが、ユーザごとにハッシュ値みたいなのが入って決まるvenvをプロジェクトごとに一つ一つ決め打ち? 冗談ではない。

そういえばelpy動かすときもPipenvのパスで困ったなあと思い出しました

Emacsにelpyをpipenv環境でも動くように導入する - ncaq

の応用で行けるのではと思いました。

(leaf lsp-pyright
  :ensure t
  :require t
  :after python
  :defvar lsp-pyright-venv-path
  :init
  (defun lsp-pyright-setup-when-pipenv ()
    (setq-local lsp-pyright-venv-path python-shell-virtualenv-root)
    (lsp-restart-workspace))
  :hook
  (python-mode-hook . lsp))

のようにlsp-pyright-setup-when-pipenvを定義してあげて、 pipenv-auto-activateのようなpipenvを設定する関数の最後にこれを呼べば認識してくれるようです。

どうやら動くようです。何故か初期化する時に一度、 file-missing "Opening directory" "そのようなファイルやディレクトリはありません" と出てきますが…

動作に支障は無いようですね。

とりあえずは解決です。