rcmdnk's blog
Last update

Pythonスタートブック

色々Python周りをいじっていたら エラーが出る様になってしまったことについて。

Sponsored Links

症状

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

ここでも同じような症状になって同じ様に再インストールしたら治った、との話です。

追記

Pythonの環境変数とかを戻してもおかしくなったままなのがあれですが、

一度変更された時にVimの中に残る情報がある?(でも**~/.vim**を一時退避してみても駄目だった。。。)

やはりそんなことはなく最後に書いてあるように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してくれる様になると嬉しいかな、と。

追記ここまで

Sponsored Links
Sponsored Links

« manをVimで見る Vimでのタブや空白などの表示、CursorLineでの表示など »