はじめに
実行しているpythonインタプリタはどこにあるの? という疑問が生まれたときは、標準モジュールのsysを使って調べることができます。
見るものの選択肢は幾つかあります。なお、この記事の内容はすべて公式ドキュメントに基づきます。
見るべきもの
sys.executable
インタプリタ本体のパス。linuxでいう「which python」(windowsではwhere)と同じだと思います。
sys.path
pythonのモジュール読み込みに使われるパス。これを見ればインタプリタがどこにあるのかもだいたいわかります。
その他
prefixというものがあります。関連するものとしては、
- sys.base_exec_prefix
- sys.base_prefix
- sys.exec_prefix
- sys.prefix
たぶんこれですべてだと思います。これらには仮想環境(といってもvenvのことです)を反映するかどうかの違いがあります。
venvのページによると、
仮想環境が有効な場合 (すなわち、仮想環境の Python インタープリタを実行しているとき)、 sys.prefix と sys.exec_prefix は仮想環境のベースディレクトリを示します。 代わりに sys.base_prefix と sys.base_exec_prefix が仮想環境を作るときに使った、仮想環境ではない環境の Python がインストールされている場所を示します。 仮想環境が無効の時は、 sys.prefix は sys.base_prefix と、 sys.exec_prefix は sys.base_exec_prefix と同じになります (全て仮想環境ではない環境の Python のインストール場所を示します)。
ということらしいのですが、基本的にはvenvを反映するsys.prefixを見ておけば確実だと思います。
使い方
次のようなワンライナーを実行して確認します。
import sys;print(sys.prefix)
対話的インタプリタを立ち上げて実行しても良いですし、-cオプションで直接実行することもできます。
$ python -c "import sys;print(sys.prefix)" $ # あるいは $ python >>> import sys;print(sys.prefix)