Pythonは、インテリジェントに設定しようと真剣に取り組んでいsys.pathます。設定方法は非常に 複雑になる可能性があります。以下のガイドはPythonの数字は何として使用するために出たときに何が起こるかのランクとファイルのPythonプログラマのための水で薄めた、やや不完全、やや-間違って、うまくいけば、有用な指針である初期値のsys.path、
sys.executable、sys.exec_prefix、およびsys.prefix上の通常
のpythonのインストール。
まず、Pythonは、オペレーティングシステムの指示に基づいて、ファイルシステム上の実際の物理的な場所を把握するために、そのレベルを最大限に発揮します。OSが「python」が実行されていると言うだけの場合、OSは$ PATHに自分自身を見つけます。シンボリックリンクを解決します。これが完了すると、見つかった実行可能ファイルのパスが、sys.executableifs、ands、buts の値として使用されます。
次に、それはのための初期値を決定sys.exec_prefixして
sys.prefix。
pyvenv.cfg同じディレクトリsys.executableまたは1つ上のディレクトリに呼び出され
たファイルがある場合、pythonはそれを調べます。OSによって、このファイルの処理が異なります。
pythonが検索するこの構成ファイルの値の1つは、構成オプションhome = <DIRECTORY>です。Pythonはsys.executable
、sys.prefix後で初期値を動的に設定するときに含まれているディレクトリではなく、このディレクトリを使用します。場合はapplocal = true、設定がに表示され
pyvenv.cfg、Windows上のファイルではなく、home = <DIRECTORY>設定、そしてsys.prefix含むディレクトリに設定されますsys.executable。
次に、PYTHONHOME環境変数が調べられます。LinuxやMac上、
sys.prefixおよびsys.exec_prefixに設定されているPYTHONHOME、それは、存在する場合は、環境変数取って代わるどんなhome = <DIRECTORY>の設定をpyvenv.cfg。Windowsでは、
sys.prefixとsys.exec_prefixに設定されているPYTHONHOME、それは、存在する場合は、環境変数がない限りhome = <DIRECTORY>設定が存在であるpyvenv.cfg代わりに使用され、。
それ以外の場合は、これらsys.prefixとはsys.exec_prefixの場所から逆方向に歩いて発見されたsys.executable、またはhomeで指定されたディレクトリpyvenv.cfgがあれば。
ファイルlib/python<version>/dyn-loadがそのディレクトリまたはその親ディレクトリのいずれかにある場合、そのディレクトリはsys.exec_prefixLinuxまたはMacに設定されます
。ファイル
lib/python<version>/os.pyがディレクトリまたはそのサブディレクトリのいずれかにある場合、そのディレクトリはsys.prefixLinux、Mac、Windowsにsys.exec_prefix設定され、sys.prefixWindows と同じ値に設定さ
れます。applocal = trueが設定されている場合、このステップ全体はWindowsではスキップされます
。のディレクトリsys.executableが使用されるか、homeがで設定されている場合はpyvenv.cfg、の初期値として代わりに使用されますsys.prefix。
これらの「ランドマーク」ファイルsys.prefixが見つからないか、まだ見つからない場合、pythonはsys.prefix「フォールバック」値を設定します。値としてLinuxおよびMac、例えば、使用するコンパイル済みのデフォルトsys.prefixとsys.exec_prefix。Windows sys.pathは、がフォールバック値を設定するために完全に理解されるまで待機し
sys.prefixます。
次に、(皆さんが待ち望んでいたことですが)pythonがに含まれる初期値を決定しsys.pathます。
- pythonが実行しているスクリプトのディレクトリを追加し
sys.pathます。Windowsでは、これは常に空の文字列であり、スクリプトが配置されている場所の完全パスを使用するようにpythonに指示します。
- PYTHONPATH環境変数の設定は、Windowsを使用していて、でtrueに設定されている場合を除き
sys.path、設定されている場合はに追加されます。applocalpyvenv.cfg
<prefix>/lib/python35.zipLinux / Macおよびos.path.join(os.dirname(sys.executable), "python.zip")Windows 上
のzipファイルパスがに追加されsys.pathます。
- Windowsで、に何
applocal = trueも設定されていない場合pyvenv.cfgは、レジストリキーのサブキーのコンテンツが
HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\あれば追加されます。
- Windows上となした場合は、
applocal = trueに設定されたpyvenv.cfg、そしてsys.prefix、その後、見つかりませんでしたコアコンテンツレジストリキーののをHK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\、それが存在する場合、追加されます。
- Windowsで、に何
applocal = trueも設定されていない場合pyvenv.cfgは、レジストリキーのサブキーのコンテンツが
HK_LOCAL_MACHINE\Software\Python\PythonCore\<DLLVersion>\PythonPath\あれば追加されます。
- Windows上となした場合は、
applocal = trueに設定されたpyvenv.cfg、そしてsys.prefix、その後、見つかりませんでしたコアコンテンツレジストリキーののをHK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\、それが存在する場合、追加されます。
- WindowsでPYTHONPATHが設定されておらず、プレフィックスが見つからず、レジストリキーが存在しない場合、PYTHONPATHの相対的なコンパイル時の値が追加されます。それ以外の場合、このステップは無視されます。
- コンパイル時マクロPYTHONPATHのパスは、動的に検出されたを基準にして追加され
sys.prefixます。
- MacおよびLinuxでは、の価値
sys.exec_prefixが追加されます。Windowsでは、動的に検索するために使用された(または使用されたはずの)ディレクトリsys.prefixが追加されます。
Windowsのこの段階で、接頭辞が見つからなかった場合、Pythonは、以前のディレクトリで行ったように、すべてのディレクトリでsys.pathランドマークファイルを検索して、sys.executable何かが見つかるまでそれを特定しようとします。そうでない場合は、sys.prefix空白のままにします。
最後に、このすべての後、Pythonはsiteモジュールをロードしますsys.path。
最初に、先頭と末尾の部分から最大4つのディレクトリを作成します。ヘッド部にはsys.prefixandを使用していsys.exec_prefixます。空のヘッドはスキップされます。末尾部分については、空の文字列を使用してからlib/site-packages(Windowsの場合)lib/pythonX.Y/site-packages
、次にlib/site-python(UnixおよびMacintoshの場合)使用します。個別のヘッドテールの組み合わせごとに、既存のディレクトリを参照しているかどうかを確認し、参照している場合はそれをsys.pathに追加し、新しく追加されたパスで構成ファイルを調べます。