概要
過去に emacs+pylsp の連携方法を紹介しました
今回は pipenv を使って pypi からインストールしたモジュールの補完を pylsp を使って行う方法を紹介します
環境
- macOS 11.6.3
- Python 3.9.10
pylsp を無理やり上書きする
グローバルにインストールした pylsp を pipenv 配下にインストールした pylsp で無理やり上書きします
具体的には以下のようにシンボリックリンクを貼れば OK です
- cd /path/to/project
-
ln -sf $(pipenv --venv)/bin/pylsp /usr/local/bin/pylsp
ちなみに上記は pylsp のパスが上記の場合になります
$ which pylsp
/usr/local/bin/pylsp
ただこれの場合は1プロジェクトにしか対応できないのとプロジェクトを切り替えるたびにシンボリックリンクも切り替えなければいけないので大変です
pylsp 用に一つプロジェクトを作成してそこに補完してほしいモジュールをどんどんインストールするのもありかなと思います
pyenv 配下のプロジェクトの場合は別のファイルを上書きする
pyenv 配下のプロジェクトの場合 pylsp のスクリプトは一度別のスクリプトのスクリプトを経由するので which で表示されるスクリプトではなく実体のスクリプトを上書きしましょう
# which pylsp
/root/.pyenv/shims/pylsp
# pyenv version
3.10.1 (set by /root/.pyenv/version)
# ls /root/.pyenv/versions/3.10.1/bin/pylsp
/root/.pyenv/versions/3.10.1/bin/pylsp
# ln -sf $(pipenv --venv)/bin/pylsp /root/.pyenv/versions/3.10.1/bin/pylsp
グローバルな pip にインストールする
python-lsp-server が起動している pip 環境と同じ環境にモジュールをインストールします
これでも対応可能ですが補完が必要なモジュールがあるたびにグローバルな環境にモジュールをインストールする必要があります
また pipenv の環境間で同じモジュールのバージョン違いがある場合は補完候補が間違うことがあります
pyls_jsonrpc.endpoint - Received cancel notification for unknown message id
pylsp::stderr バッファーになぜかこれが出力されるケースがありました
これが出力されていると補完時に「No matches」と表示されて補完がうまく動作しません
原因は不明です
emacs の lsp-mode の対応に期待する
pylsp の設定で pipenv 配下の pylsp を実行するような設定が出てくるのを待ちましょう
もしくは自分で修正しましょう
最後に
emacs の lsp-mode の solargraph には bundler 配下にインストールした solargraph を使用するというオプションがあるのですが pylsp にはないので今回のような少しトリッキーな対応が必要になります
0 件のコメント:
コメントを投稿