Pythonは、インテリジェントに設定しようと真剣に取り組んでいsys.path
ます。設定方法は非常に 複雑になる可能性があります。以下のガイドはPythonの数字は何として使用するために出たときに何が起こるかのランクとファイルのPythonプログラマのための水で薄めた、やや不完全、やや-間違って、うまくいけば、有用な指針である初期値のsys.path
、
sys.executable
、sys.exec_prefix
、およびsys.prefix
上の通常
のpythonのインストール。
まず、Pythonは、オペレーティングシステムの指示に基づいて、ファイルシステム上の実際の物理的な場所を把握するために、そのレベルを最大限に発揮します。OSが「python」が実行されていると言うだけの場合、OSは$ PATHに自分自身を見つけます。シンボリックリンクを解決します。これが完了すると、見つかった実行可能ファイルのパスが、sys.executable
ifs、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_prefix
LinuxまたはMacに設定されます
。ファイル
lib/python<version>/os.py
がディレクトリまたはそのサブディレクトリのいずれかにある場合、そのディレクトリはsys.prefix
Linux、Mac、Windowsにsys.exec_prefix
設定され、sys.prefix
Windows と同じ値に設定さ
れます。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
、設定されている場合はに追加されます。applocal
pyvenv.cfg
<prefix>/lib/python35.zip
Linux / 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.prefix
andを使用していsys.exec_prefix
ます。空のヘッドはスキップされます。末尾部分については、空の文字列を使用してからlib/site-packages
(Windowsの場合)lib/pythonX.Y/site-packages
、次にlib/site-python
(UnixおよびMacintoshの場合)使用します。個別のヘッドテールの組み合わせごとに、既存のディレクトリを参照しているかどうかを確認し、参照している場合はそれをsys.pathに追加し、新しく追加されたパスで構成ファイルを調べます。