Commits

Naoki INADA committed 3940fe7

module: 検索パスを追加

Comments (0)

Files changed (1)

 
 明示的な相対インポートは Python 2 でも使えます。他の __future__ の要素 (`division`, `print_function`)
 とともに積極的に利用して、 Python 3 に備えましょう。
+
+検索パス
+--------
+
+`import foo.bar` を実行するときに、 `foo` をまずどこから探すかは検索パスで定義されます。
+検索パスの実体は `sys` モジュールにある `sys.path` というリストです。
+
+通常、ライブラリを `pip` や `easy_install` でインストールすると、自動的に Python 起動時にそのライブラリの
+インストール場所がは自動的に sys.path に登録されるように構成されます。
+モジュールを検索するときはこのリストの前から順番に検索されます。
+
+また、スクリプトを実行するときはそのスクリプトのあるディレクトリが、インタラクティブシェルを
+起動するときはカレントディレクトリが自動的に sys.path の先頭に追加されます。
+
+その他のディレクトリを検索パスに追加する方法はたくさんありますが、直接的な方法を2つだけ
+紹介します。
+
+追加したい検索パスをスクリプト自体が知っている場合は、そのスクリプトで sys.path を編集します。
+たとえばあるプロジェクトで、 projname/ と scripts/ というディレクトリがあるばあい、 scripts/
+の中のスクリプトは次のように書くことで `projname` をインポートできます。 ::
+
+    import os
+    import sys
+    sys.path.append(os.path.dirname(os.path.dirname(__file__)))
+    import projname
+
+逆に、単にライブラリを使いたいスクリプトがあって、 pip などでインストールされてない
+ライブラリの場所を教えたい場合は、 `PYTHONPATH` 環境変数を利用します。 ::
+
+    $ PYTHONPATH=$(pwd) scripts/foo.py
+
+どちらも面倒な場合は、 `distribute` を使った `setup.py` ファイルを作って、
+`python setup.py develop` コマンドでモジュールをインストールせずにプロジェクトのディレクトリを
+直接登録することができます。最小限の `setup.py` は次のようになります。 ::
+
+    from setuptools import setup
+    setup(packages=['projname'])
+