現象
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つのディレクトリにまとめられます。普段からこちらを使う方が明快なのでは、という気もしました。