amazon

28.12.12

ターミナルコマンドの呼び出し先の切り替え

一つのコマンド名対するプログラムが複数インストールされている環境では、ターミナルで、
$ コマンド名
と打つとインストールされているもののうち一つしか起動しない。

この起動する一つというのは、次のようにtypeやwhichで表示される一覧の一番上のものである。

以下の話は、「python」というコマンドを例に取って話を進める
$ type -a python
python is /Library/Frameworks/Python.framework/Versions/2.6/bin/python
python is /Library/Frameworks/Python.framework/Versions/2.7/bin/python
python is /usr/local/bin/python
python is /usr/bin/python
python is /opt/local/bin/python
となっているとき、
$ python
と打つと、/Library/Frameworks/Python.framework/Versions/2.6/bin/pythonのpythonが起動する。

起動するプログラムを変更するにはtypeで表示される順序を変更すればよい。
typeの順序は環境変数PATHの中から順に探してきているので、PATHの順番を変えてやる。

まず、PATHの確認。
$ echo $PATH
/Library/Frameworks/Python.framework/Versions/2.6/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/local/bin:/usr/bin:/opt/local/bin:/opt/local/sbin
typeと同じく/Library/Frameworks/Python.framework/Versions/2.6/binが一番先頭になっている。

例としてMacPortsでインストールしたpythonを使うためにはMacPortsのインストール先である/opt/local/binを先頭にに持っきてみる。
$ PATH=/opt/local/bin:$PATH
$ export PATH
または一行で書くなら、
$ export PATH=/opt/local/bin:$PATH
こうすると、
$ echo $PATH
/opt/local/bin:/Library/Frameworks/Python.framework/Versions/2.6/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/local/bin:/usr/bin:/opt/local/sbin
となって、
$ type -a python
python is /opt/local/bin/python
python is /Library/Frameworks/Python.framework/Versions/2.6/bin/python
python is /Library/Frameworks/Python.framework/Versions/2.7/bin/python
python is /usr/local/bin/python
python is /usr/bin/python
となる。

そうすると、
$ python
で起動するpythonはMacPortsのpythonになる。

MacPorts内のpythonの切り替えはこちら

25.12.12

Mac Python パッケージのパス

前回の記事で扱ったようにMacでは異なるPythonをインストールできる。
そのためライブラリのインストール先もそれぞれのPythonで異なるので注意。
以下はnumpyをインストールしたときの例。

MacPortsでインストールするとデフォルトでは、
/opt/local/var/macports/software

*.dmgファイルからインストールすると、
/Library/Frameworks/Python.framework/Versions/*.*/lib/python*.*/site-packages
(*.*はバージョン)
に保存される。


ライブラリのインストールが成功したのに、import時に、
>>> import ***
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named ***
こんなエラーが出てしまうときは、インストールしたライブラリがどこにインストールされたのか、また呼び出しているpythonがどのpythonなのか、確認してみるとよい。

pythonのパスを確認する方法はpythonで、
>>> sys
>>> sys.path

インストールされているpythonの一覧はターミナルで、
$ type -a python

前回の記事も参考にしてください。