最近pythonを使い出したのですがPYTHONPATHというものがあると知りました。  
このPATHの設定の仕方と設定する理由を教えていただけないでしょうか。  
よろしくおねがいします。
CC BY-SA 3.0
2015-07-09T01:45:49.463
12174
2015-07-09T07:49:16.163
10284
question
python
PYTHONPATHとは
<http://docs.python.jp/2.7/using/cmdline.html#envvar-PYTHONPATH>

Pythonが `import` 文で利用するモジュールを探す際のパスです。

以下のコードで、起動時にデフォルト設定されているパスが確認できます。

```

    $ python
    >>> import sys
    >>> print(sys.path)
    
```

環境変数PYTHONPATHを設定すると、この値に追加されます。
CC BY-SA 3.0
2015-07-09T04:58:39.250
12188
2015-07-09T04:58:39.250
806
12174
answer
### `PYTHONPATH` とはなにか，とその設定方法について

Python の [Documentation » Python Setup and
Usage](https://docs.python.org/3/using/cmdline.html?highlight=pythonpath#envvar-
PYTHONPATH)より:

> Augment the default search path for module files. The format is the same as
> the shell’s PATH: one or more directory pathnames separated by os.pathsep
> (e.g. colons on Unix or semicolons on Windows). Non-existent directories are
> silently ignored.（中略）The default search path is installation dependent, but
> generally begins with prefix/lib/pythonversion (see PYTHONHOME above). It is
> always appended to PYTHONPATH.

すなわち，この環境変数は，python
がモジュールを読み込む時に，デフォルト(典型的には`なんとか/lib/python（とそのバージョン）`）に加えて探しにいくディレクトリを設定するものです．記法はPATH
とおなじで，Linux 系なら例えば `~/.bashrc` に

```

    export PYTHONPATH="/path/to/the/directory/to/add:$PYTHONPATH"
    
```

のように記述しておくことで設定することができます．今何が設定されているかは `echo $PYTHONPATH` などで見ることができます．

### `sys.path` には何が入っているか

`sys.path` には `PYTHONPATH`
で設定したディレクトリ，デフォルトのパスに加えていくつかディレクトリが入っている場合があります．`'/usr/lib/python2.7/dist-
packages/gtk-2.0'` などはこの範疇ですね．

これについては英語ですが stackoverflow の
[この回答](https://stackoverflow.com/a/4271619/3026489) が参考になります．インタープリタの起動時に
(`-S` をつけなければ）自動的に読み込まれる
[`site.py`](https://docs.python.org/3/library/site.html)が `*.pth` なファイルを読んで
`sys.path` にディレクトリを加えるなどし，例えば Debian や Ubuntu で
`/usr/local/lib/python<version>/dist-packages`
にあるようなものはこのタイミングで加えられるようです．また自前で `sys.path` にディレクトリを加えるようなモジュールもあるということです．

### いつ設定するか

`PYTHONPATH` は上のように，「追加で探して欲しい場所」を指定するものなので，`apt` や `pip`
を使ってモジュールをインストールする分には，特段設定しなければならないことはあまりないようにおもいます．自作のモジュール（例えば
`~/Documents/my/amazing/project/` 下に置いてある）をどこからでも `import`
したいとか，どこかで見つけたモジュールを使うのだけれどシステムを汚したくないとか，そういうのが典型的な使い方だろうと思います．

`import` の仕組みについて興味があれば [documentation
をどうぞ](https://docs.python.org/3/reference/import.html#the-import-system)．[この
blog 記事](http://atkonn.blogspot.jp/2008/02/python-python34_15.html)
は簡潔でいいかも知れません．
CC BY-SA 3.0
2015-07-09T07:42:31.840
12195
2015-07-09T07:49:16.163
2017-05-23T12:38:56.083
-1
2901
12174
answer