Python での sys.path 初期化の詳細
Python の sys.path の初期化プロセスを理解することは、Python のモジュール検索パスを理解するために重要です。 。 PYTHONPATH がこの初期化を排他的に実行するという誤解にもかかわらず、Python の複雑なアルゴリズムは他のさまざまなソースを考慮します。
次の手順でこのプロセスを説明します。
sys.executable、sys.exec_prefix、および sys の初期化.prefix
- Python は、オペレーティング システムの情報に基づいてその場所を細心の注意を払って特定し、実際の物理的な実行可能ファイルのパスを sys.executable に反映します。
- 実行可能ファイル内の pyvenv.cfg ファイルディレクトリまたは 1 つ上のレベルには、sys.prefix に影響を与える構成オプションが保持されます。特に、ホーム構成は、sys.executable を含むデフォルトのディレクトリをオーバーライドできます。
- PYTHONHOME 環境変数が存在する場合、以前に設定された sys.prefix および sys.exec_prefix の値はオーバーライドされます。
- 上記の条件では、これらの値は、sys.executable から逆方向にたどり、シンボリック リンクまたはランドマーク ファイルを探してディレクトリとそのプレフィックスを確立することによって導出されます。
sys.path の決定
-
sys.path の初期値は以下で構成されます:
- 実行中のスクリプトを含むディレクトリ。
- 設定されている場合は、PYTHONPATH の内容。
- Python zip ファイルへのパス。
- Windows 上のレジストリ キーが存在する場合、追加のパスとして読み取られます。
- PYTHONPATH のコンパイル時の値が含まれます。
- Mac および Linux では、sys.exec_prefix の値が追加されます。
初期化後のアクション
- サイト モジュールがロードされ、動的に追加されますsys.prefix および sys.exec_prefix に基づくパス。
- 追加されたパス内から構成ファイルが調べられ、sys.path をさらに変更します。
落とし穴と重要な注意事項
- home = が誤って設定されていますpyvenv.cfg 内の sys.prefix 値が null になり、コンパイル済みのデフォルトへのフォールバックが発生する可能性があります。
- PYTHONHOME 環境変数が存在すると、Linux および Mac 上の pyvenv.cfg 設定が中断される可能性があります。
- Windows に PYTHONHOME がなく、pyvenv.cfg に home = がないと、フォールバック sys.prefix 値が発生する可能性があります。
- sys.path 中に sys.prefix が解決されない場合初期化時に、Windows はランドマーク ファイルを特定するために詳細な検索を開始します。
以上がPython はどのように sys.path を初期化しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。