手元の環境 (macOS 10.12 Sierra) に入っている SciPy がプリインストールされたものか、自分でインストールしたものか分からなくなったので調査しました。
まずは sys.path
から。 スクリプト(または対話シェル)で import
文を使うと、sys.path
に含まれるフォルダを先頭から順に検索していきます。
$ # macOS Sierra (10.12) + Homebrew
$ python
Python 2.7.10 (default, Feb 7 2017, 00:08:15)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> for x in sys.path: print "'%s'" % x
...
''
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip'
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7'
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin'
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac'
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages'
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk'
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old'
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload'
'/Library/Python/2.7/site-packages'
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python'
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC'
リストは 4 つのカテゴリーに分かれています。
-
''
カレントディレクトリ。ユーザーが定義したモジュールは最優先で読み込まれます。 -
Python.framework/Versions/2.7/lib
Python の標準モジュールがインストールされているディレクトリです。 -
site-packages
ユーザーがインストールしたパッケージを置くためのディレクトリです。 -
Python.framework/Versions/2.7/Extras/lib
macOS 独自のディレクトリで、Apple がプリインストールしたパッケージが置かれています。
NumPy, SciPy, matplotlib のインストールパス
すべて Apple の拡張ディレクトリに置かれています。
$ python
>>> import numpy, scipy, matplotlib
>>> numpy.__file__
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/__init__.pyc'
>>> scipy.__file__
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/scipy/__init__.pyc'
>>> matplotlib.__file__
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/matplotlib/__init__.pyc'
自分でインストールしたパッケージは site-packages
以下に置かれます。
$ python
>>> import pycodestyle
>>> pycodestyle.__file__
'/Library/Python/2.7/site-packages/pycodestyle.pyc'
したがって、macOS Sierra には NumPy, SciPy, matplotlib が標準でインストールされる、ということになります。
おまけ:サイト固有のパスを読み込まずに Python を起動する
$ python -S
Python 2.7.10 (default, Feb 7 2017, 00:08:15)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
>>> import sys
>>> for x in sys.path: print "'%s'" % x
...
''
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip'
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/'
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin'
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac'
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages'
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk'
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old'
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload'
ここまでが Python のコアで、site-packages
以降のディレクトリは Python の動作そのものには影響しない、ということのようです。
https://stackoverflow.com/questions/897792/where-is-pythons-sys-path-initialized-from
おまけ: mac に python3 環境をつくる
Python 3.4 以降をインストールすると、pip が自動的にインストールされます。
https://pip.pypa.io/en/stable/installing/
$ # macOS Sierra (10.12) + Homebrew
$ brew install python3
$ pip3 install numpy
$ pip3 install scipy
$ pip3 install matplotlib
参考資料
めくるめく Python モジュールの世界。奥が深い…
-
sys — システムパラメータと関数
https://docs.python.jp/2.7/library/sys.html -
cpython / Lib / site.py
https://github.com/python/cpython/blob/2.7/Lib/site.py -
Installation — pip 9.0.1 documentation
https://pip.pypa.io/en/stable/installing/ -
Homebrew — macOS 用パッケージマネージャー
https://brew.sh/index_ja.html -
Python パッケージ管理技術まとめ (pip, setuptools, easy_install, etc)
http://www.yunabe.jp/docs/python_package_management.html -
Python の module search path について調べてみる
http://hagifoo.hatenablog.com/entry/2013/07/29/132740 -
Where is Python’s sys.path initialized from?
https://stackoverflow.com/questions/897792/where-is-pythons-sys-path-initialized-from -
What sets up sys.path with Python, and when?
https://stackoverflow.com/questions/4271494/what-sets-up-sys-path-with-python-and-when