_PyUnicodeUCS4_AsEncodedStringと出てvimのインストールに失敗する

Posted by rhoboro on 2016-06-12

備忘録として。

先日、愛用しているMacbookAirのEl Capitanをクリーンインストールし直しました。
特に何かあったわけでは無いですが、使わなくなったアプリケーションを一掃したくなる時が年1回程度くるので、 そういう時は開発環境をスッキリさせるためにクリーンインストールをしてます。
そしてクリーンインストール後は、その時必要なものだけインストールするスタイルで開発環境をできる限り綺麗に保っています。

今回もOSクリーンインストールして、GitHubのココにあげているdotfilesを持ってきて、 GUIアプリケーションを入れて、といつも通りの作業をして問題なくしばらく使ってました。

が、今日気づいた。なんかVim古くね?と。 (何気なくココにのってたsmileコマンド打ったらそんなコマンド無いって言われた...orz)
dotfilesでいつも通りの環境になってたので、アップデートをするのを完全に忘れてました。

_PyUnicodeUCS4_AsEncodedStringエラー

エラーに遭遇

そて、ここからが本題です。 いつものごとく、brew update && brew install vimをやってみたところ下記エラーがでました。

[alpaca]~ % brew install vim                                      
==> Downloading https://github.com/vim/vim/archive/v7.4.1910.tar.gz
==> Downloading from https://codeload.github.com/vim/vim/tar.gz/v7.4.1910
######################################################################## 100.0%
==> ./configure --prefix=/usr/local --mandir=/usr/local/Cellar/vim/7.4.1910/share/man --enable-multib
==> make
Last 15 lines from /Users/rhoboro/Library/Logs/Homebrew/vim/02.make:
clang -c -I. -Iproto -DHAVE_CONFIG_H   -DMACOS_X_UNIX  -g -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1       -o objects/channel.o channel.c
clang -c -I. -Iproto -DHAVE_CONFIG_H   -DMACOS_X_UNIX  -g -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1       -o objects/json.o json.c
clang -c -I. -Iproto -DHAVE_CONFIG_H   -DMACOS_X_UNIX  -g -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1       -o objects/main.o main.c
clang -c -I. -Iproto -DHAVE_CONFIG_H   -DMACOS_X_UNIX  -g -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1       -o objects/memfile.o memfile.c
clang -c -I. -Iproto -DHAVE_CONFIG_H   -DMACOS_X_UNIX  -g -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1       version.c -o objects/version.o
 env LD_RUN_PATH=/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE clang   -L. -L/usr/local/lib  -L/usr/local/lib   -o vim objects/buffer.o objects/blowfish.o objects/charset.o objects/crypt.o objects/crypt_zip.o objects/diff.o objects/digraph.o objects/edit.o objects/eval.o objects/ex_cmds.o objects/ex_cmds2.o objects/ex_docmd.o objects/ex_eval.o objects/ex_getln.o objects/fileio.o objects/fold.o objects/getchar.o objects/hardcopy.o objects/hashtab.o  objects/if_cscope.o objects/if_xcmdsrv.o objects/mark.o objects/memline.o objects/menu.o objects/message.o objects/misc1.o objects/misc2.o objects/move.o objects/mbyte.o objects/normal.o objects/ops.o objects/option.o objects/os_unix.o objects/pathdef.o objects/popupmnu.o objects/quickfix.o objects/regexp.o objects/screen.o objects/search.o objects/sha256.o objects/spell.o objects/syntax.o objects/tag.o objects/term.o objects/ui.o objects/undo.o objects/version.o objects/window.o    objects/if_perl.o objects/if_perlsfio.o objects/if_python.o   objects/if_ruby.o objects/os_macosx.o objects/os_mac_conv.o  objects/netbeans.o objects/channel.o  objects/json.o objects/main.o objects/memfile.o        -lm  -lncurses -liconv -framework Cocoa   -fstack-protector  -L/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE -lperl -framework Python   -lruby.2.0.0 -lpthread -ldl -lobjc    
Undefined symbols for architecture x86_64:
  "_PyUnicodeUCS4_AsEncodedString", referenced from:
      _StringToLine in if_python.o
      _StringToChars in if_python.o
      __ConvertFromPyObject in if_python.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [vim] Error 1
make: *** [first] Error 2

READ THIS: https://git.io/brew-troubleshooting
If reporting this issue please do so at (not Homebrew/brew):
  https://github.com/Homebrew/homebrew-core/issues

These open issues may also help:
vim: fixes to pass brew audit https://github.com/Homebrew/homebrew-core/pull/1512
vim: installation fails when using pyenv https://github.com/Homebrew/homebrew-core/issues/1165

解決策

ちょっとググったのですが、あまりコレという解決方法が見つからず悩むこと小一時間。
エラーメッセージをよく見てみて気づいたpyenvという文字列。 Pythonの環境はいつも必ず構築してるので、pyenvも当然のごとく使ってる。
ということで、今使ってるpythonのバージョンを調べてみることに。

[alpaca]~ % pyenv versions 
  system
* 2.7.11 (set by /Users/rhoboro/.pyenv/version)
  2.7.11/envs/pyconjp-website
  3.5.1
  3.5.1/envs/blog
  blog
  pyconjp-website

予想通り、自分で入れた環境を利用するようにしてる。(systemのは基本的にいじらないようにしています)
ということで試しにsystemを使うようにして再度試してみたところ、先ほどのエラーは綺麗に消えて無事最新のVimをインストール出来ました。
めでたしめでたし。

[alpaca]~ % pyenv local system 
[alpaca]~ % pyenv versions    
* system (set by /Users/rhoboro/.python-version)
  2.7.11
  2.7.11/envs/pyconjp-website
  3.5.1
  3.5.1/envs/blog
  blog
  pyconjp-website
[alpaca]~ % brew install vim  
==> Downloading https://github.com/vim/vim/archive/v7.4.1910.tar.gz
Already downloaded: /Users/rhoboro/Library/Caches/Homebrew/vim-7.4.1910.tar.gz
==> ./configure --prefix=/usr/local --mandir=/usr/local/Cellar/vim/7.4.1910/share/man --enable-multib
==> make
==> make install prefix=/usr/local/Cellar/vim/7.4.1910 STRIP=true
🍺  /usr/local/Cellar/vim/7.4.1910: 1,689 files, 22.6M, built in 1 minute 8 seconds
[alpaca]~ % which vim
/usr/local/bin/vim

まとめ

brew install vimして_PyUnicodeUCS4_AsEncodedStringエラーが出た時はpyenvの設定を確認してみましょう!
おそらくsystemのPythonを使えば解決すると思います。

おまけ

smileコマンドもちゃんと出るようになりました!

:smile
                            oooo$$$$$$$$$$$$oooo
                        oo$$$$$$$$$$$$$$$$$$$$$$$$o
                     oo$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$o         o$   $$ o$
     o $ oo        o$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$o       $$ $$ $$o$
  oo $ $ "$      o$$$$$$$$$    $$$$$$$$$$$$$    $$$$$$$$$o       $$$o$$o$
  "$$$$$$o$     o$$$$$$$$$      $$$$$$$$$$$      $$$$$$$$$$o    $$$$$$$$
    $$$$$$$    $$$$$$$$$$$      $$$$$$$$$$$      $$$$$$$$$$$$$$$$$$$$$$$
    $$$$$$$$$$$$$$$$$$$$$$$    $$$$$$$$$$$$$    $$$$$$$$$$$$$$  """$$$
     "$$$""""$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$     "$$$
      $$$   o$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$     "$$$o
     o$$"   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$       $$$o
     $$$    $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" "$$$$$$ooooo$$$$o
    o$$$oooo$$$$$  $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$   o$$$$$$$$$$$$$$$$$
    $$$$$$$$"$$$$   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$     $$$$""""""""
   """"       $$$$    "$$$$$$$$$$$$$$$$$$$$$$$$$$$$"      o$$$
              "$$$o     """$$$$$$$$$$$$$$$$$$"$$"         $$$
                $$$o          "$$""$$$$$$""""           o$$$
                 $$$$o                                o$$$"
                  "$$$$o      o$$$$$$o"$$$$o        o$$$$
                    "$$$$$oo     ""$$$$o$$$$$o   o$$$$""
                       ""$$$$$oooo  "$$$o$$$$$$$$$"""
                          ""$$$$$$$oo $$$$$$$$$$
                                  """"$$$$$$$$$$$
                                      $$$$$$$$$$$$
                                       $$$$$$$$$$"
                                        "$$$""""

Press ENTER or type command to continue