現象
Visual Studio Code で Python の Language Server である Pylance が起動しなくなってしまい、数日悩みました。
OUTPUT のプルダウンには Python Language Server が表示されなくなっていました。
OUTPUT の Extension Host には Error: Channel has been closed といったエラーが出ていました。
解消手順
-
~/.vscode/argv.jsonにms-python.python=debugのようなログレベルの設定があるのを確認。他には大した設定が書かれていないのを確認 -
~/.vscode/argv.jsonを削除 -
⌘+Shift+Pで>Python Clear Cache and Reload Windowを実行
で動くようになりました。
再現手順
問題は手元の Mac で起きていて、Windows では再現しませんでした。
macOS のバージョンは Ventura 13.7.2 と Sequoia 15.3 です。途中でバージョンを上げました。1台の Mac です。
OUTPUT から Python を選び、歯車アイコン
でログレベルを Warning に変更 (どれでもいいようです)、Set As Default で保存すると ~/.vscode/argv.json に以下のように保存されます。
"log-level": [
"ms-python.python=warn"
]
この状態で >Python Clear Cache and Reload Window を実行すると Pylance が起動しなくなります。
JSON を編集して設定を消しても直りませんでした。
解消までに試したこと
プロファイル
新しいプロファイルを使い、最小限の機能拡張だけいれて試しても直りませんでした。
Trust Mode
⌘+Shift+P で >Workspaces: Manage Workspace Trust を実行、ワークスペースを Restricted Mode (信用しない) に切り替えると、問題なく起動することがわかりました。
シェルの設定を変えてみる
.zshrc や .zprofile など、全てのシェル関係のファイル名を変え、シェルの影響を受けないようにしても直りませんでした。
シェルの設定を変える時は、HISTSIZE が小さくなって、コマンド履歴が消えないように要注意です。
Python ランタイムの変更を検討
Python のバージョンを管理している mise や homebrew の影響を受けているのではと疑いましたが、mise はともかく homebrew の python は依存が多くて気軽には消せませんでした。
OS のバージョンを上げる
OS を Ventura 13.7.2 から Sequoia 15.3 にアップデートしても直りませんでした。
デバッガでコードを見てみる
Help > Toggle Developer Tools のコンソールから、エラー行を開いてブレイクポイントを設定し、ソースを見たりしたのですが、わからず。
ポータブルモードを試す
ポータブルモードに切り替えた所、問題なく動くようになったので、やはり設定が悪いのだろうと当たりを付けました。
Mac だと Visual Studio Code.app を空のフォルダにコピーして、同じ階層に code-portable-data フォルダを作るだけでした。
設定ファイルを一新する
まっさらな環境になるよう、~/.vscode/ と ~/Library/Application\ Support/Code の両方をリネームして再起動、>Python Clear Cache and Reload Window を実行したら動くようになりました。
過去の設定を捨てて一からやり直しても良かったのですが、~/.vscode/ を見ていたところ、argv.json が怪しそうだったので、これを消して起動し直したら動くようになりました。
どうしたらもっと早く解決できたか
普段使う道具の、設定がどこに保存されていて、どういう役割なのかくらいは把握しておかないと、いざという時に苦労するなと思いました。
~/.vscode/ と ~/Library/Application\ Support/Code がどういう使い分けなのかは、調べてもよくわかりませんでしたが……。
~/.vscode/ には、機能拡張が保存されています。また、起動オプションに関わる argv.json が保存されています。起動時に必要な設定、クラッシュレポーターやログレベルがここに保存されるようです。 ~/.vscode-cli/ にもコマンドラインの設定らしきファイルがありますが、よくわかりません。
~/Library/Application\ Support/Code/User/ にはユーザレベルの設定 settings.json が保存されています。
OUTPUT で見られるログは、~/Library/Application\ Support/Code/logs/{起動時刻}/window{番号} 以下にありました。
ポータブルモードを使うと、設定の一切合切を1つのディレクトリにまとめられます。普段からこちらを使う方が明快なのでは、という気もしました。