静かなる名辞

pythonとプログラミングのこと



【python】sysを使ってpythonインタプリタについて調べる

はじめに

 実行しているpythonインタプリタはどこにあるの? という疑問が生まれたときは、標準モジュールのsysを使って調べることができます。

 見るものの選択肢は幾つかあります。なお、この記事の内容はすべて公式ドキュメントに基づきます。

29.1. sys — システムパラメータと関数 — Python 3.6.5 ドキュメント

見るべきもの

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 のインストール場所を示します)。

28.3. venv — 仮想環境の作成 — Python 3.6.5 ドキュメント

 ということらしいのですが、基本的にはvenvを反映するsys.prefixを見ておけば確実だと思います。

使い方

 次のようなワンライナーを実行して確認します。

import sys;print(sys.prefix)

 対話的インタプリタを立ち上げて実行しても良いですし、-cオプションで直接実行することもできます。

$ python -c "import sys;print(sys.prefix)"
$ # あるいは
$ python
>>> import sys;print(sys.prefix)