症状
MacでPython周りを色々といじっていて、 Python自体をHomebrew経由でアップデートしたり、
if [ -d $(brew --prefix)/lib/python2.7/site-packages ];then
export PYTHONPATH=$(brew --prefix)/lib/python2.7/site-packages:$PYTHONPATH
fi
みたいな設定を.bashrc
に追加したりしてたら、
VimでPythonファイルを開こうとすると
"a.py" [New File]Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/site.py", line 75, in <module>
__boot()
File "/usr/local/lib/python2.7/site-packages/site.py", line 3, in __boot
import os
ImportError: No module named os
な感じのエラーが出るようになって開けなくなりました。
そこで上のPYTHONPATHの設定を外した所、Vimは立ち上げられる様になったんですが、 編集しようとすると今度は
ImportError: No module named site
的なエラーが出る様になりました。 恐らくjedi-vim がPython編集時に働いてPythonを呼んでおかしくなってる感じ。
さらにGundo が、中でPythonスクリプトを使ってるらしく起動すると落ちます。
Gundoが使えない時点で結構こまりますが、 その後、jedi-vimを外してもPythonファイルを編集しようとすると落ちてしまいました。
Python関連なのは明らかなんですが、 環境変数周りなんかを色々いじってみても 1 結局上手く行きませんでした。
対処法
対処法と言うまでもないですが、 結局のところVimを再インストールしたら治りました。
Mountain Lion and homebrew vim: “ImportError: No module named site” – Wizard Mode: http://wizardmode.com/2012/07/mountain-lion-and-homebrew-vim-importerror-no-module-named-site/
ここでも同じような症状になって同じ様に再インストールしたら治った、との話です。
追記
Pythonの環境変数とかを戻してもおかしくなったままなのがあれですが、
やはりそんなことはなく最後に書いてあるようにPython自体のバージョンの問題っぽい。
もうちょっと調べてみようと再現にトライ。
やったことはHomebrewでbrew-pipとか使ってみようと思って
$ brew install brew-pip
$ brew pip asciinema
とかやってこれによってインストールされるものがPYTHONPATHやPATHが通って無いところにインストールされるので、 上にあるようなPATH
export PYTHONPATH=$(brew --prefix)/lib/python2.7/site-packages:$PYTHONPATH
や
export PATH=$(brew --prefix)/share/python:$PATH
を設定する必要が有りました。
この辺、もう一度インストールして設定してちょっと動かした後に Vimを起動してみましたが、特に問題なく動いています。
なので、これらが問題、ということではなさそう。
問題があるとするとやはりPython自体で、 Homebrewで自動的にアップデートさせてる時に、 Pythonの履歴を見てみると7月の頭当たりで2.7.8にアップデートされてるので、 丁度その頃だった様な気がしないでもなかったり。
History for Library/Formula/python.rb - Homebrew/homebrew
ただ、otoolとかで調べてみると
$ otool -L /usr/local/bin/vim
/usr/local/bin/vim:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
/usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 20.0.0)
/usr/local/lib/liblua.5.1.5.dylib (compatibility version 5.1.0, current version 5.1.5)
/usr/local/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.0)
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib (compatibility version 2.0.0, current version 2.0.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 855.17.0)
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1265.21.0)
/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 59.0.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1056.13.0)
$
な感じで2.7.0のフレームワークを使ってる、となってますが、実際には3桁目のバージョンにも依存している?
この辺のフレームワーク?周りのバージョンとかがどう言う意味を持つかイマイチ理解してませんが、
ここで取り敢えずHomebrewで入れてあるPythonを一度アンインストールしてやってみると
(Homebrewバージョン:2.7.8, Macデフォルト(/usr/bin/python
:2.7.5))
再び.pyファイルを開いたりGundoなどを起動する時に
ImportError: No module named siteが出るように。。。
ということで、やはり単にPythonのアップデートで何らかの互換性が切れた様で、 Pythonのアップデート時に3桁目のマイナーアップデートでさえも 2、 Vim内での互換性を保つことが出来ずに Vim自体をそのPythonのインストール下でコンパイルし直さないと駄目なこともある、 ということっぽいです。
追記ここまで
追記: 2014/07/23
ここで話に出てる話と同じっぽいですね。
エラー終了の取り扱いを変えて、Pythonが使えなくても Pythonをdisableして続けるようにする、と言うパッチを作ってる感じです。
敢えて互換性の無いPythonとVimを同時に使わなければいけない現象があれば disableするだけで良いかもしれませんが、 Pythonをアップデートした後に気付かずにPythonの機能をVimで使えなくて 困ることもあると思うので、 きちんとその旨warningしてくれる様になると嬉しいかな、と。
追記ここまで
-
まあ、もうPythonが2.8.Xとかにアップデートされることはまず無いわけですが。。。 ↩