29.13。 サイト —サイト固有の構成フック
ソースコード: :source: `Lib / site.py`
このモジュールは初期化中に自動的にインポートされます。インタープリターの -S オプションを使用すると、自動インポートを抑制できます。
このモジュールをインポートすると、 -S が使用されていない限り、サイト固有のパスがモジュール検索パスに追加され、いくつかの組み込みパスが追加されます。 その場合、このモジュールは、モジュールの検索パスを自動的に変更したり、組み込みに追加したりすることなく、安全にインポートできます。 通常のサイト固有の追加を明示的にトリガーするには、 site.main()関数を呼び出します。
バージョン3.3で変更: -S を使用している場合でも、パス操作をトリガーするために使用されるモジュールをインポートします。
それは、頭と尾の部分から最大4つのディレクトリを構築することから始まります。 ヘッド部分はsys.prefix
とsys.exec_prefix
を使用。 空のヘッドはスキップされます。 テール部分には、空の文字列を使用してから、lib/site-packages
(Windowsの場合)またはlib/pythonX.Y/site-packages
(UnixおよびMacintoshの場合)を使用します。 個別のヘッドテールの組み合わせごとに、既存のディレクトリを参照しているかどうかを確認し、参照している場合はsys.path
に追加し、新しく追加された構成ファイルのパスも調べます。
バージョン3.5で変更:「site-python」ディレクトリのサポートが削除されました。
「pyvenv.cfg」という名前のファイルがsys.executableの1つ上のディレクトリに存在する場合、sys.prefixとsys.exec_prefixがそのディレクトリに設定され、サイトパッケージもチェックされます(sys.base_prefixとsys.base_exec_prefixは常にPythonインストールの「実際の」プレフィックス)。 「pyvenv.cfg」(ブートストラップ構成ファイル)に「false」(大文字と小文字を区別しない)以外に設定されたキー「include-system-site-packages」が含まれている場合でも、システムレベルのプレフィックスでサイトが検索されます-パッケージ; そうでなければ、彼らはしません。
パス構成ファイルは、名前がname.pth
の形式で、上記の4つのディレクトリのいずれかに存在するファイルです。 その内容は、sys.path
に追加される追加アイテム(1行に1つ)です。 存在しないアイテムがsys.path
に追加されることはなく、アイテムがファイルではなくディレクトリを参照していることは確認されません。 sys.path
に2回以上アイテムが追加されることはありません。 空白行と#
で始まる行はスキップされます。 import
で始まる行(その後にスペースまたはタブが続く)が実行されます。
たとえば、sys.prefix
とsys.exec_prefix
が/usr/local
に設定されているとします。 次に、PythonXYライブラリが/usr/local/lib/pythonX.Y
にインストールされます。 これにサブディレクトリ/usr/local/lib/pythonX.Y/site-packages
があり、3つのサブディレクトリfoo
、bar
、spam
、および2つのパス構成ファイルfoo.pth
と[ X156X] 。 foo.pth
に次のものが含まれていると仮定します。
# foo package configuration
foo
bar
bletch
bar.pth
には次のものが含まれます。
# bar package configuration
bar
次に、次のバージョン固有のディレクトリがsys.path
にこの順序で追加されます。
/usr/local/lib/pythonX.Y/site-packages/bar
/usr/local/lib/pythonX.Y/site-packages/foo
bletch
は存在しないため、省略されていることに注意してください。 bar
ディレクトリはfoo
ディレクトリの前にあります。これは、bar.pth
がアルファベット順にfoo.pth
の前にあるためです。 spam
は、どちらのパス構成ファイルにも記載されていないため、省略されています。
これらのパス操作の後、sitecustomize
という名前のモジュールをインポートしようとします。このモジュールは、任意のサイト固有のカスタマイズを実行できます。 これは通常、システム管理者によってsite-packagesディレクトリに作成されます。 このインポートが ImportError 例外で失敗した場合、それは黙って無視されます。 Windowsのpythonw.exe
(デフォルトでIDLEの開始に使用されます)のように、Pythonが出力ストリームを使用せずに開始された場合、sitecustomize
からの出力の試行は無視されます。 ImportError 以外の例外は、プロセスのサイレントでおそらく不可思議な失敗を引き起こします。
この後、 ENABLE_USER_SITE がtrueの場合、usercustomize
という名前のモジュールをインポートしようとします。このモジュールは任意のユーザー固有のカスタマイズを実行できます。 このファイルは、 -s によって無効にされない限り、sys.path
の一部であるユーザーsite-packagesディレクトリ(以下を参照)に作成されることを目的としています。 ImportError は黙って無視されます。
一部の非Unixシステムでは、sys.prefix
とsys.exec_prefix
が空であり、パス操作がスキップされることに注意してください。 ただし、sitecustomize
およびusercustomize
のインポートは引き続き試行されます。
29.13.1。 Readline構成
readline をサポートするシステムでは、Pythonがインタラクティブモードで起動され、 -Sがない場合、このモジュールは rlcompleter モジュールもインポートして構成します。 オプション。 デフォルトの動作は、タブ補完を有効にし、履歴保存ファイルとして~/.python_history
を使用することです。 無効にするには、sitecustomize
またはusercustomize
モジュールまたは PYTHONSTARTUP の sys .__ Interactivehook __ 属性を削除(またはオーバーライド)します。 ] ファイル。
バージョン3.4で変更: rlcompleterと履歴のアクティブ化が自動化されました。
29.13.2。 モジュールの内容
- site.PREFIXES
- サイトパッケージディレクトリのプレフィックスのリスト。
- site.ENABLE_USER_SITE
- ユーザーsite-packagesディレクトリのステータスを示すフラグ。
True
は、有効になっていてsys.path
に追加されたことを意味します。False
は、ユーザーの要求によって無効にされたことを意味します( -s または PYTHONNOUSERSITE を使用)。None
は、セキュリティ上の理由(ユーザーまたはグループIDと有効IDの不一致)または管理者によって無効にされたことを意味します。
- site.USER_SITE
- ユーザーサイトへのパス-実行中のPythonのパッケージ。 getusersitepackages()がまだ呼び出されていない場合は、
None
にすることができます。 デフォルト値は、UNIXおよび非フレームワークMac OSXビルドの場合は~/.local/lib/pythonX.Y/site-packages
、Macフレームワークビルドの場合は~/Library/Python/X.Y/lib/python/site-packages
、Windowsの場合は%APPDATA%\Python\PythonXY\site-packages
です。 このディレクトリはサイトディレクトリです。つまり、その中の.pth
ファイルが処理されます。
- site.USER_BASE
- ユーザーsite-packagesのベースディレクトリへのパス。 getuserbase()がまだ呼び出されていない場合は、
None
にすることができます。 デフォルト値は、UNIXおよびMac OSXの非フレームワークビルドの場合は~/.local
、Macフレームワークビルドの場合は~/Library/Python/X.Y
、Windowsの場合は%APPDATA%\Python
です。 この値は、スクリプト、データファイル、Pythonモジュールなどのインストールディレクトリを計算するためにDistutilsによって使用されます。 ユーザーインストールスキームの場合。 PYTHONUSERBASE も参照してください。
- site.main()
すべての標準サイト固有のディレクトリをモジュール検索パスに追加します。 この関数は、Pythonインタープリターが -S フラグで開始されていない限り、このモジュールがインポートされるときに自動的に呼び出されます。
バージョン3.3で変更:この関数は以前は無条件に呼び出されていました。
- site.addsitedir(sitedir, known_paths=None)
- sys.pathにディレクトリを追加し、その
.pth
ファイルを処理します。 通常、sitecustomize
またはusercustomize
で使用されます(上記を参照)。
- site.getsitepackages()
すべてのグローバルサイトパッケージディレクトリを含むリストを返します。
バージョン3.2の新機能。
- site.getuserbase()
ユーザーベースディレクトリのパス USER_BASE を返します。 まだ初期化されていない場合、この関数は PYTHONUSERBASE を尊重して設定します。
バージョン3.2の新機能。
- site.getusersitepackages()
ユーザー固有のサイトパッケージディレクトリ USER_SITE のパスを返します。 まだ初期化されていない場合、この関数は PYTHONNOUSERSITE および USER_BASE を尊重して設定します。
バージョン3.2の新機能。
site モジュールは、コマンドラインからユーザーディレクトリを取得する方法も提供します。
$ python3 -m site --user-site
/home/user/.local/lib/python3.3/site-packages
引数なしで呼び出された場合、 sys.path の内容が標準出力に出力され、続いて USER_BASE の値とディレクトリが存在するかどうかが出力され、同じことが USER_SITE 、最後に ENABLE_USER_SITE の値。
- --user-base
- ユーザーベースディレクトリへのパスを出力します。
- --user-site
- ユーザーsite-packagesディレクトリへのパスを出力します。
両方のオプションを指定すると、ユーザーベースとユーザーサイトが os.pathsep で区切られて(常にこの順序で)印刷されます。
オプションを指定すると、スクリプトは次のいずれかの値で終了します。ユーザーのsite-packagesディレクトリが有効になっている場合は0
、ユーザーによって無効にされている場合は1
、 [ X175X]セキュリティ上の理由または管理者によって無効にされている場合。エラーがある場合は2より大きい値。