# 29 `user` -- ユーザー設定のフック

ポリシーとして、Pythonは起動時にユーザー毎の設定を行うコードを実行することは しません(ただし対話型セッションで環境変数PYTHONSTARTUPが設定されて いた場合にはそのスクリプトを実行します。)。

しかしながら、プログラムやサイトによっては、プログラムが要求した時に ユーザーごとの設定ファイルを実行できると便利なこともあります。このモジュー ルはそのような機構を実装しています。この機構を利用したいプログラムでは、 以下の文を実行してください。

    import user

`user`モジュールはユーザーのホームディレクトリの .pythonrc.pyファイルを探し、オープンできるならグローバル名前空間 で実行します(`execfile()`を利用します)。 この段階で発生したエラーはcatchされません。`user`モジュー ルをimportしたプログラムに影響します。ホームディレクトリは環境変数 HOMEが仮定されていますが、もし設定されていなければカレントディ レクトリが使われます。

ユーザーの.pythonrc.pyではPythonのバージョンに従って異なる動作を 行うために`sys.version`のテストを行うことが 考えられます。

ユーザーへの警告: .pythonrc.pyファイルに書く内容には慎重になって ください。どのプログラムが利用しているかわからない状況で、標準のモジュール や関数のふるまいを替えることはおすすめできません。

この機構を使おうとするプログラマへの提案: あなたのパッケージ向けのオプションをユーザーが設定できるようにするシンプ ルな方法は、.pythonrc.pyファイルで変数を定義して、あなたのプログ ラムでテストする方法です。たとえば、`spam`モジュールで メッセージ出力のレベルを替える `user.spam_verbose`変数を参照するに は以下のようにします:

    import user

    verbose = bool(getattr(user, "spam_verbose", 0))

(ユーザが`spam_verbose`を ファイル.pythonrc.py内で定義していない時に`getattr()` の3引数形式は使われます。)

大規模な設定の必要があるプログラムではプログラムごとの設定ファイルを作る といいです。

セキュリティやプライバシーに配慮するプログラムではこのモジュールをimport しないでください。このモジュールを使うと、ユーザーは .pythonrc.pyに任意のコードを書くことで簡単に侵入することができて しまいます。

汎用のモジュールではこのモジュールをimportしないでください。 importしたプログラムの動作にも影響してしまいます。

参考:

`site`:モジュール
  サイト毎のカスタマイズを行う機構.