HomebrewでインストールしたMacVimがpyenvのpythonでビルドされない問題を解決

  • 6
    いいね
  • 0
    コメント

場当たり的な解決方法です。細かいところは間違っていると思いますが、とりあえずこれで上手くいったのでまとめておきます。いい方法、正しい方法があったら教えて下さい。

こんな問題でお悩みの方を救う記事です

  • pyenvのPythonではなく、システムやHomebrewのPythonでMacVimがビルドされてしまう
  • Homebrewでpython3をインストールしないと、+python/dyn +python3/dyn にならない
  • brew install python3 して --with-properly-linked-python2-python3 でインストール後、pythonファイルを開くとSegmentaion fault

MacVimのインストール手順

macvimのレポジトリをtap

brew install macvimは、ビルド済みのものをインストールするだけなので、macvimのリポジトリからソースコードをとってきてビルド&インストールします。

$ brew tap macvim-dev/macvim

pyenvのPythonをDLL付きでインストール

pyenvで普通にインストールした場合、MacVimのビルドに必要なDLLが作成されないので、以下の様な環境変数を付け加えてビルドします。python3は-undefined dynamic_lookupがないとpip install greenletなどでエラーが出ます。

バージョン数字は自分が使っているものに変更しましょう。

PYTHON_CONFIGURE_OPTS="--enable-shared" \
    LDSHARED="clang -bundle" \
    LDCXXSHARED="clang++ -bundle" \
    BLDSHARED="clang -bundle -lpython2.7" \
    pyenv install 2.7.12

PYTHON_CONFIGURE_OPTS="--enable-shared" \
    LDSHARED="clang -undefined dynamic_lookup -bundle"\
    LDCXXSHARED="clang++ -undefined dynamic_lookup -bundle" \
    BLDSHARED="clang -bundle -undefined dynamic_lookup -lpython3.5m" \
    pyenv install 3.5.2

brew editでビルドの設定を変更

ビルドの引数がソースコードで設定されているのでbrew editで、ソースコードを書き換えていきます。(brewに不慣れなので気づくのに1日かかりました。)

$ brew edit macvim-dev/macvim/macvim

Rubyのコードが表示されるので、上部のdef installを変更します。コメントアウトしている部分がデフォルトの値です。HomebrewでインストールしたPython3しかみないようになっていますので、pyenvのPython3を参照するようパスを変更します。python2もMacOSのSystemライブラリを参照しようとしたりするので、python2もpyenvのpython2を参照するよう変数とパスを追記します。
enushiの部分は自分のユーザ名に変更しましょう。

  def install
    perl_version = '5.16'
    ENV.append 'VERSIONER_PERL_VERSION', perl_version
    ENV.append 'VERSIONER_PYTHON_VERSION', '2.7'
    ENV.append 'vi_cv_path_python', "/Users/enushi/.pyenv/versions/2.7.10/bin/python2"
    ENV.append 'vi_cv_path_python3', "/Users/enushi/.pyenv/versions/3.4.3/bin/python3"
    ENV.append 'vi_cv_path_plain_lua', "#{HOMEBREW_PREFIX}/bin/lua"
    ENV.append 'vi_cv_dll_name_perl', "/System/Library/Perl/#{perl_version}/darwin-thread-multi-2level/CORE/libperl.dylib"
    ENV.append 'vi_cv_dll_name_python3', "/Users/enushi/.pyenv/versions/3.4.3/lib/libpython3.4m.dylib"
    ENV.append 'vi_cv_dll_name_python', "/Users/enushi/.pyenv/versions/2.7.10/lib/libpython2.7.dylib"
    #ENV.append 'vi_cv_path_python3', "#{HOMEBREW_PREFIX}/bin/python3"
    #ENV.append 'vi_cv_path_plain_lua', "#{HOMEBREW_PREFIX}/bin/lua"
    #ENV.append 'vi_cv_dll_name_perl', "/System/Library/Perl/#{perl_version}/darwin-thread-multi-2level/CORE/libperl.dylib"
    #ENV.append 'vi_cv_dll_name_python3', "#{HOMEBREW_PREFIX}/Frameworks/Python.framework/Versions/3.5/Python"

MacVimのインストール

--with-properly-linked-python2-python3は必須です。
--with-override-system-vimは、OSにデフォルトで入っているvim(コンソール上で動くvim)をmvim -vに置き換えてくれるオプションです。お好みで使いましょう。

brew install --HEAD --with-properly-linked-python2-python3 --with-override-system-vim macvim-dev/macvim/macvim

インストール後の確認

mvimを起動して以下のコマンドを実行しましょう。

:python print(sys.path)
:py3 print(sys.path)

出力されたパスがpyenvのpythonになっているはずです。また連続して実行できるなら--with-properly-linked-python2-python3の効果がでています。

参考

それでは。Happy Vim Life