hunamizawa’s blog

無い物は作りたい人のメモ帳

VSCode + Remote WSL で Python を書く

ずっと Visual Studio 一本でコードを書いてきたけど、最近 VSCode の方も触るようになった。しばらく触ってなかった Python3 を書こうと思い立ち、環境を整えたのでメモ。

Remote WSL の使い方を知らなかった

最初、「Remote WSL って、統合ターミナルで Bash on WSL が開ける拡張かな~」と大きな勘違いをしていた。

code.visualstudio.com

上の記事を読んで分かったのだが、Remote WSL を使うと WSL 上に VSCode Server が立って、あたかも Linux 上で VSCode を使っているような環境を構築してくれるのだ。ビルドもデバッグも WSL 上でやって、その結果を Windows 側の GUI に表示してくれるという、便利極まりない機能だ。

今まで node.js も Python も、実際に動かすのは Linux だけど、開発のためだけに Windows にも環境を整える……ということをやっていた。二度手間になっていたし、Windows だとうまく動かないパッケージがあって開発を諦めることもあった。Remote WSL なら Linux 実機と同じフローで環境整備ができるし、実機にかなり近い環境でデバッグができる。

拡張機能のインストールは別々に

Windows 側の VSCode と、WSL 側の VSCode Server は別インスタンスになっているので、拡張機能をそれぞれにインストールする必要がある。でも WSL 側へのインストールも "Install on WSL" のボタンをクリックすれば済むので簡単。

今回は Python3 を書きたいので、WSL 側には Python Extension Pack さえ入れておけばおk。

pipenv

npm でいうところの package.json 的なものは何か?

調べると、Python のパッケージマネージャーって、なんかやたら種類がある。とりあえず pipenv を使うことにした。

初期化:

$ pipenv --python=/usr/bin/python3

この時、python インタプリタのパスを必ず明示的に指定する。pipenv --python 3 とかだと、Windows 側の python.exe を実行しようとして死んでしまう。

これで仮想環境が自動的に構築される(裏では virtualenv が走っている)。

パッケージのインストール:

$ pipenv install hogehoge

npm i hogehoge --save 相当。--dev オプションをつけると、npm i hogehoge --save-dev と同じ意味になる。

パッケージの依存関係は PipfilePipfile.lock に記録される。この2つのファイルの関係は npm でいう package.jsonpackage-lock.json と一緒。

復元:

$ pipenv sync

npm i --production に相当する。--dev をつければ npm i(引数なし)と一緒の意味。

qiita.com

仮想環境?

pipenv は virtualenv を使って仮想環境を作る。でも仮想環境って何なん?

python.keicode.com

この記事で大体把握した。npm なら node.js バージョン間の違いは小さいし、後方互換性が保たれてるから、たいして問題にはならないけど、Python だと 2.x と 3.x で文法が違うから、仮想環境に閉じ込めて管理するのがラク、ってことなのかな。

モジュールを認識しない?

Q: インストールしたはずのパッケージを、VSCode がいつまで経っても認識しなくて赤線が出っぱなし。ナンデ?

A: そのパッケージは virtualenv で作った箱庭(=仮想環境)に閉じ込められてるから、外から参照できない。VSCode をその仮想環境に入れる必要がある。

で、デフォルトでは VSCode が仮想環境を認識してくれないから、設定をいじる必要がある。詳しくはここを読んでほしい。

tekunabe.hatenablog.jp

pipenv + virtualenv では、仮想環境は ~/.local/share/virtualenvs/<名前> に生成されるようだ。したがって、

  • リモート [WSL] 設定の python.venvFolders.local/share/virtualenvs を追加
  • ワークスペース.vscode/settings.json"python.venvPath": ".local/share/virtualenvs" と書く

のどちらかの設定をしてから、画面左下の Python バージョンが書いてある所を押すと、作った仮想環境が出てくる。

これで IntelliSense も効くようになったし、快適に Python が書けそうだ。