はじめに
ここすきここすきここすきここすき nikkieです。
pipx run
にまつわるVS Codeの小ネタです。
目次
前回まで:pipx runはいいぞ!仮想環境レス🙌
このブログで最近取り上げていますが、pipxはPEP 723(Inline script metadata)の一部をサポートしています。
Pythonスクリプトにコメントとしてmetadataを書き、
# /// script # dependencies = ["rich"] # ///
pipx run
で実行することで、スクリプトに必要なライブラリを仮想環境にインストールするという管理の手間をpipxにお任せできます!
仮想環境の管理から解き放たれるので、別の環境でもスクリプトを簡単に再現性高く動かせて、私にはとってもよいです。
さらに、pipxが管理する、スクリプト用の仮想環境にアクセスするには、PYTHONINSPECT=1 pipx run
と実行すればよいことを見出しました。
VS Codeで補完を受けたい
すでに動くスクリプトを別の環境でも動かす場合、pipxはめちゃめちゃ力を発揮するのですが、仮想環境をpipxが管理するがゆえに開発中はやりづらさがあります。
依存するライブラリが不慣れな場合、VS Codeの補完が受けられないのがやややりづらいです (※Copilotは元気よく提案してきます)
# /// script # dependencies = [ # "requests<3", # "rich", # ] # /// import requests from rich.pretty import pprint
importしたモジュールに黄色い線が引かれており、(requestsは該当しませんが)pprintは型がAnyとなっていて、いい感じの補完が受けられません。
PythonとVS Codeの知識をつなぎ合わせて、この状態を解決していきます!
解決案:pipxが管理する仮想環境をSelect Interpreterする
(macOSにbrewでインストールしたpipxを使っています1)
% pipx --version 1.5.0
PYTHONINSPECT
環境変数を指定して上記スクリプトを実行し、対話モードに入ります。
% PYTHONINSPECT=1 pipx run ./script.py >>>
sys.executable
を確認します。
https://docs.python.org/ja/3/library/sys.html#sys.executable
>>> import sys >>> sys.executable '/.../.local/pipx/.cache/2cdf4afd53bcfd9/bin/python'
これを控えたら対話モードは抜けます。
次はVS Codeの設定です。
https://code.visualstudio.com/docs/python/environments#_select-and-activate-an-environment
- コマンドパレット(
⇧⌘P
)2にて、「Python: Select Interpreter」 - 「Enter interpreter path...」を選び、
sys.executable
の値を入力
(VS Codeのドキュメントは英語ではありますが、画像付きで操作が分かりやすいです)
これでpipxが管理する仮想環境に入っているライブラリがVS Codeに認識され、補完が受けられます!
見てください、pprintに色がついてます3!関数の定義も見られますよ🙌
なお、sys.executable
のPythonについて-m pip list
とすると、pipxが仮想環境で管理してくれているライブラリが一覧できます。
手順まとめ
- スクリプトにdependenciesをコメントで書く
- 1のスクリプトを
PYTHONINSPECT
環境変数を指定の上、pipx run
で実行 - 対話モードで
sys.executable
を確認 - 3で確認したPythonインタプリタのパスをVS Codeの「Select Interpreter」で指定
終わりに
pipx run
に寄せていく中で直面した、スクリプトを書いている最中にVS Codeの補完を十分に受けられないという課題を解決しました。
Pythonの知識とVS Codeの知識を組み合わせていったら解決に至れました。
この解決案は簡単ではないので、簡単にする方法は考えてみたいですね。
全人類よ、Pythonスクリプトの実行にはpipxを使うのです!
コメントとして依存を書くだけで仮想環境の管理から解き放たれ、とっても楽ですよ〜
この記事の元ネタ
pipx runで実行するスクリプトを書く時に、VS Codeの補完を受ける方法を模索。
— nikkie / にっきー (@ftnext) 2024年4月29日
dependenciesを挙げた後、PYTHONINSPECT環境変数指定で仮想環境に入り、sys.executableを確認してVS Codeの「Select Interpreter」に指定(右下赤い箇所)。
requestsやpprintに色がつくようになり、補完も受けられるぞ! https://t.co/f2zxf11m17 pic.twitter.com/N9R2NJKIze