いろいろ備忘録日記

主に .NET とか Java とか Python絡みのメモを公開しています。

Pythonメモ-98 (venvでの仮想環境でのsys.prefixとbase_prefixの違い)

概要

小ネタ。

venvで仮想環境を作って activate した状態だと、sysモジュールの以下のプロパティの値が異なる状態となります。

  • sys.prefix
  • sys.exec_prefix
  • sys.base_prefix
  • sys.base_exec_prefix

仮想環境だと、baseなしの方が 仮想環境のパス、baseありの方がvenv元のパスを示します。

仮想環境で入っていない場合は、baseなしとありの両方が同じ値を示します。

サンプル

"""
sys モジュールについてのサンプルです.

venv 環境での
  - sys.prefix
  - sys.exec_prefix
  - sys.base_prefix
  - sys.base_exec_prefix
の値について.

REFERENCES:: http://bit.ly/2Vun6U9
             http://bit.ly/2Vuvqn6
"""
import sys

from trypython.common.commoncls import SampleBase
from trypython.common.commonfunc import pr, hr


class Sample(SampleBase):
    def exec(self):
        # --------------------------------------------
        # venv で仮想環境を作り、 activate している状態だと
        # sys モジュールの prefixとbase_prefixの値が異なる
        # 状態となる。仮想環境を使っていない場合、同じ値となる.
        # --------------------------------------------
        pr('prefix', sys.prefix)
        pr('exec_prefix', sys.exec_prefix)
        hr()
        pr('base_prefix', sys.base_prefix)
        pr('base_exec_prefix', sys.base_exec_prefix)

        pr('venv 利用している?', sys.prefix != sys.base_prefix)


def go():
    obj = Sample()
    obj.exec()


if __name__ == '__main__':
    go()

try-python/sys03.py at master · devlights/try-python · GitHub

仮想環境の中で実行すると、例えば以下のように出力されます。

prefix='/Users/xxxx/.local/share/virtualenvs/try-python'
exec_prefix='/Users/xxxx/.local/share/virtualenvs/try-python'
--------------------------------
base_prefix='/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7'
base_exec_prefix='/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7'
venv 利用している?=True

過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com