Python が仮想環境内で実行されているかどうかを確認するにはどうすればよいでしょうか? 質問する

Python が仮想環境内で実行されているかどうかを確認するにはどうすればよいでしょうか? 質問する

現在のスクリプトが virtualenv 環境内で実行されているかどうかを確認することは可能ですか?

ベストアンサー1

信頼性が高く文書化された方法は比較することですsys.prefixそしてsys.base_prefixこれらが等しい場合は仮想環境ではなく、等しくない場合は仮想環境です。venv 内では、sys.prefix仮想環境のディレクトリと、sys.base_prefix環境を作成するために使用された Python インタープリターを指します。

これは、venvsの仕組み:

sys.prefix != sys.base_prefix現在のインタープリターが仮想環境から実行されているかどうかを確認するだけで十分です。

これはPython stdlibで動作しますvenvそしてvirtualenv(バージョン 20 以降):

def in_venv():
    return sys.prefix != sys.base_prefix

の古いバージョンではの代わりにvirtualenvが使用され、仮想環境外には存在しませんでした。Python 3.3 以前では は存在しませんでした。そのため、いくつかのレガシーケースも処理するチェックは次のようになります。sys.real_prefixsys.base_prefixsys.real_prefixsys.base_prefix

import sys


def get_base_prefix_compat():
    """Get base/real prefix, or sys.prefix if there is none."""
    return (
        getattr(sys, "base_prefix", None)
        or getattr(sys, "real_prefix", None)
        or sys.prefix
    )


def in_virtualenv():
    return sys.prefix != get_base_prefix_compat()

環境変数の使用はVIRTUAL_ENV信頼できません。これは virtualenvactivateシェル スクリプトによって設定されますが、virtualenv は、virtualenv のbin/(またはScripts) ディレクトリから実行ファイルを直接実行することによってアクティブ化せずに使用できます。その場合、環境変数は$VIRTUAL_ENV設定されません。または、シェルで virtualenv がアクティブ化されている間に、非 virtualenv Python バイナリを直接実行することもできます。その場合、$VIRTUAL_ENV実際にはその virtualenv で実行されていない Python プロセスで環境変数が設定されることがあります。

おすすめ記事