29.13. site
— サイト固有の設定フック¶
ソースコード: Lib/site.py
このモジュールは初期化中に自動的にインポートされます。 自動インポートはインタプリタの -S
オプションで禁止できます。
Importing this module will append site-specific paths to the module search path
and add a few builtins, unless -S
was used. In that case, this module
can be safely imported with no automatic modifications to the module search path
or additions to the builtins. To explicitly trigger the usual site-specific
additions, call the site.main()
function.
バージョン 3.3 で変更: Importing the module used to trigger paths manipulation even when using
-S
.
It starts by constructing up to four directories from a head and a tail part.
For the head part, it uses sys.prefix
and sys.exec_prefix
; empty heads
are skipped. For the tail part, it uses the empty string and then
lib/site-packages
(on Windows) or
lib/pythonX.Y/site-packages
(on Unix and Macintosh). For each
of the distinct head-tail combinations, it sees if it refers to an existing
directory, and if so, adds it to sys.path
and also inspects the newly
added path for configuration files.
バージョン 3.5 で変更: “site-python” ディレクトリのサポートは削除されました。
If a file named “pyvenv.cfg” exists one directory above sys.executable, sys.prefix and sys.exec_prefix are set to that directory and it is also checked for site-packages (sys.base_prefix and sys.base_exec_prefix will always be the “real” prefixes of the Python installation). If “pyvenv.cfg” (a bootstrap configuration file) contains the key “include-system-site-packages” set to anything other than “false” (case-insensitive), the system-level prefixes will still also be searched for site-packages; otherwise they won’t.
A path configuration file is a file whose name has the form name.pth
and exists in one of the four directories mentioned above; its contents are
additional items (one per line) to be added to sys.path
. Non-existing items
are never added to sys.path
. No item is added to sys.path
more than
once. Blank lines and lines beginning with #
are skipped. Lines starting
with import
(followed by space or tab) are executed.
例えば、 sys.prefix
と sys.exec_prefix
が /usr/local
に設定されていると仮定します。そのときPython X.Y ライブラリは /usr/local/lib/pythonX.Y
にインストールされています。ここにはサブディレクトリ /usr/local/lib/pythonX.Y/site-packages
があり、その中に三つのサブディレクトリ foo
, bar
および spam
と二つのパス設定ファイル foo.pth
と bar.pth
をもつと仮定します。 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
が真であれば、任意のユーザ固有のカスタマイズを行うことが出来る usercustomize
と名付けられたモジュールのインポートが試みられます。このファイルはユーザの site-packages ディレクトリ(下記参照)に作られることを意図していて、その場所はオプション -s
によって無効にされない限りは sys.path
に含まれます。ImportError
は黙って無視されます。
いくつかの非Unixシステムでは、 sys.prefix
と sys.exec_prefix
は空で、パス操作は省略されます。しかし、 sitecustomize
と usercustomize
のインポートはそのときでも試みられます。
29.13.1. readline の設定¶
readline
をサポートするシステムではこのモジュールは、Python を 対話モード で -S
オプションなしで開始した場合に rlcompleter
モジュールをインポートして設定します。デフォルトの振る舞いでは、タブ補完を有効にし、履歴保存ファイルに ~/.python_history
を使います。これを無効にするには、あなたの sitecustomize
または usercustomize
あるいは PYTHONSTARTUP
ファイル内で sys.__interactivehook__
属性を削除 (または上書き) してください。 (—訳注: site モジュールは __interactivehook__
に readline 設定関数を設定後に sitecustomize
等のユーザ設定を実行します。 __interactivehook__
のチェックが行われるのは site モジュール実行の後です。 —)
バージョン 3.4 で変更: rlcompleter とhistory のアクティベーションが自動で行われるようになりました。
29.13.2. モジュールの内容¶
-
site.
PREFIXES
¶ siteパッケージディレクトリのprefixのリスト。
-
site.
ENABLE_USER_SITE
¶ ユーザーサイトディレクトリのステータスを示すフラグ。
True
の場合、ユーザーサイトディレクトリが有効でsys.path
に追加されていることを意味しています。False
の場合、ユーザによるリクエスト(オプション-s
かPYTHONNOUSERSITE
)によって、None
の場合セキュリティ上の理由(ユーザまたはグループIDと実効IDの間のミスマッチ)あるいは管理者によって、ユーザーサイトディレクトリが無効になっていることを示しています。ユーザーサイトディレクトリのステータスを示すフラグ。True
の場合、ユーザーサイトディレクトリが有効でsys.path
に追加されていることを意味しています。False
の場合、ユーザによるリクエスト(オプション-s
かPYTHONNOUSERSITE
)によって、None
の場合セキュリティ上の理由(ユーザまたはグループIDと実効IDの間のミスマッチ)あるいは管理者によって、ユーザーサイトディレクトリが無効になっていることを示しています。
-
site.
USER_SITE
¶ Python 実行時のユーザの site-packages へのパスです。
getusersitepackages()
がまだ呼び出されていなければNone
かもしれません。デフォルト値は UNIX と frameworkなしの Mac OS X ビルドでは~/.local/lib/pythonX.Y/site-packages
、Mac framework ビルドでは~/Library/Python/X.Y/lib/python/site-packages
、Windows では%APPDATA%\Python\PythonXY\site-packages
です。このディレクトリは site ディレクトリなので、 ここにいる.pth
ファイルが処理されます。
-
site.
USER_BASE
¶ ユーザの site-packages のベースとなるディレクトリへのパスです。
getuserbase()
がまだ呼び出されていなければNone
かもしれません。デフォルト値は UNIX と frameworkなしの Mac OS X ビルドでは~/.local
、Mac framework ビルドでは~/Library/Python/X.Y
、Windows では%APPDATA%\Python
です。この値は Distutils が、スクリプト、データファイル、Python モジュールなどのインストール先のディレクトリを user installation scheme で計算するのに使われます。PYTHONUSERBASE
も参照してください。
-
site.
main
()¶ モジュール検索パスに標準のサイト固有ディレクトリを追加します。この関数は、Python インタプリタが
-S
で開始されていない限り、このモジュールインポート時に自動的に呼び出されます。バージョン 3.3 で変更: この関数は以前は無条件に呼び出されていました。
-
site.
addsitedir
(sitedir, known_paths=None)¶ sys.path にディレクトリを追加し、その
.pth
ファイル群を処理します。典型的にはsitecustomize
かusercustomize
内で使われます(上述)。
-
site.
getsitepackages
()¶ 全てのグローバルな site-packages ディレクトリのリストを返します。
バージョン 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 ディレクトリを表示します。
両方のオプションが指定された場合、ユーザのベースとユーザの site が(常にこの順序で) os.pathsep
区切りで表示されます。
いずれかのオプションが与えられた場合に、このスクリプトは次のいずれかの終了コードで終了します: ユーザの site-packages が有効ならば O
、ユーザにより無効にされていれば 1
、セキュリティ的な理由あるいは管理者によって無効にされている場合 2
、そして何かエラーがあった場合は 2 より大きな値。
参考
PEP 370 – ユーザごとの site-packages
ディレクトリ