Emacs上のlspでpython-language-server
を使おうとしたら、こんなエラーが‘lsp::pyls‘バッファに出てpylsの起動に失敗してしまいました。
Traceback (most recent call last):
File "/home/pluser/.local/bin/pyls", line 6, in <module>
from pyls.__main__ import main
ModuleNotFoundError: No module named 'pyls'
私の環境では、Pythonのインストールパスを非標準なものへと変更しており、Pythonライブラリの検索パスをPYTHONUSERBASE環境変数でシェルに別途設定しています。
Emacs上のlspクライアントはEmacsの環境変数をそのまま引き継いでクライアントとの通信を行うので、何らかの理由(シェルではなくデスクトップ環境から起動した、など)で普段とは異なる環境変数でEmacsが起動されてしまうと、今回のようなケースではPYTHONUSERBASEなどの環境変数が設定されておらず、LSPの起動や実行に支障をきたしてしまいます。
LSPのプロセスはEmacsの環境変数を引き継ぐので、手っ取り早く対処するには、Emacsを適切な環境変数で起動してあげるとよいです。シェルの環境変数がきちんとしている場合には、デスクトップエントリなどを編集して、 /bin/bash -c 'emacs'
としてEmacsを起動するようにすると良いでしょう。
または、Emacsがプロセス起動する時の環境変数であるprocess-environment
変数を調整すると良いでしょう。(setenv "PYTHONUSERBASE" "/path/to/python")
などとすると任意の環境変数を設定できます。