はてブロ@ama_ch

https://twitter.com/ama_ch

EmacsのシェルモードでPythonを起動すると違うとこから起動する

Emacsをめでたくフルスクリーンでも使えるようになり、

  1. コード編集画面
  2. 実行・デバッグのためのシェルモード
  3. バッファ一覧など

という感じで3つのウィンドウを配置するようになりました。


シェルモードのおかげでEmacs上で実行までできて便利だなーと思っていたら、インストールしてあるはずのモジュールが「ありません」というエラーが。あれ?
変だなと思ってEmacsとiTermでsys.pathの出力を比べてみました。


・iTerm

>>> import sys
>>> for i in sys.path:
...     print i
... 

/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/simplejson-1.9.1-py2.5-macosx-10.3-i386.egg
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/MySQL_python-1.2.2-py2.5-macosx-10.3-i386.egg
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/setuptools-0.6c8-py2.5.egg
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/mechanize-0.1.7b-py2.5.egg
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/ClientForm-0.2.7-py2.5.egg
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/py2app-0.3.6-py2.5.egg
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/bdist_mpkg-0.4.3-py2.5.egg
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/macholib-1.1-py2.5.egg
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/modulegraph-0.7-py2.5.egg
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/altgraph-0.6.7-py2.5.egg
/Library/Frameworks/Python.framework/Versions/2.5/lib/python25.zip
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-darwin
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac/lib-scriptpackages
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-tk
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/pygoogle
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/gtk-2.0
>>> len(sys.path)
21


Emacs

>>> import sys
>>> for i in sys.path:
...     print i
... 

/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python25.zip
/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5
/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-darwin
/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac
/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac/lib-scriptpackages
/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-tk
/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload
/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages
/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/PIL
/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/gtk-2.0
>>> len(sys.path)
11


んん、明らかに違う場所から読み込んでる。本来はiTermの方が正しい(普段使ってる)んだけど・・・
ひとまずiTermの方のsys.pathをコピーしてPYTHONPATHを指定したらモジュールの読み込みはできるようになったものの、これじゃ応急処置だなぁ。なんでEmacsのシェルモードだと全然違うんだろう?原因は一体なんなんだー
あと、シェルモードでPythonのインタラクティブシェルを使っている時、for文中などでTabを押してもインデントされない。これもなかなか困る。