Posts Tagged ‘環境構築’

Mac OS X 10.6.8 -> 10.7.3 アップグレードメモ(感想、mecab、libsvm周り)

木曜日, 3月 22nd, 2012

今更ですが10.6.8から10.7.x系にアップグレードしました。

10.6.8での開発環境に不具合出たのが切っ掛け。ここで原因追及するぐらいなら安定し始めてるかもしれない最新版でやってみようぐらいの気持ちで。作業前後でもリプライ頂いたのですが、Xcode3,4共存もできるみたいだし(参考: @shinji_kono先生@shima__shima先生)。

あちこちはまったけど、特に分かり難かったのは python 周りのライブラリの導入方法。

必要に応じてxcode-selectすること。

通常easy_install or pip経由でインストールするか、ソース持ってきて手動で「python setup.py build; sudo python setup.py install」することになるけれども、そのままではこのbuildが通らない。多分クリーンインストールしてると問題なら無いと思うけど、私のように10.6.8からアップグレードしたケースでは10.6.sdkを参照しようとするので、次のように環境変数指定する必要があるっぽい。-archは必要無さそうだけど、念のため。「-L/opt/local/lib」はmacoprtsで入れたライブラリを参照させる場合の話で、そうじゃなければ適宜省略/編集すべし。

% env CC=/usr/bin/gcc CFLAGS=”-O -g -isysroot /Developer/SDKs/MacOSX10.7.sdk -arch x86_64 -L/opt/local/lib” python setup.py build

以下、時系列順に気になった点をメモ。


  • ダウンロード版は、ダウンロード後にすぐ起動してアップグレードするか否かだけの選択肢で進む。(10.5->10.6時には/Applications, /Users とか残すディレクトリを選択できた気がするのだけど、今回はそういう選択肢は用意されていない)
  • 「/Applications/Mac OS X Lion インストール.app」内のInstallESD.dmgでブートディスク作れるらしい。 QT Mac OX X Lionの起動ディスクの作成方法 – [モ]Modern Syntax
  • 上記アップグレードイメージは、アップグレード終了後には削除されてる。
  • アップグレード直後は動作がもっさりしてる気もするけど、裏でMail.appのデータ移行中なのでそれ次第かな。Spotlight周りもありそう。あと想像してたけどgcc消えたw
  • Mail.appはスレッド表示できるようになったのね。フォルダ上のどこにあってもスレッドとしてみれるのは嬉しい。(ヘッダしか見てないと思うから、これで意図的に2通使ってスパム表示させるとか何かやれそうな予感)
  • Finderは「環境設定」と「表示>ステータスバー」あたりで元表示に戻せる。
  • App Store経由でXcode4インストールすると、結構長時間「インストール中」のままになる。「購入済み」タブで進捗状況が見れる。
  • 終わったタイミングで「/Developer/Applications/Xcode.app」を起動するも、古いのが立ち上がる。ここでJava要求されるので、指示通りにインストール。(古いのが残ってるってことはgccも残ってる?)
  • Xcode4は「/Applications/Xcode.app」にインストールされる。起動後、起動すると古いのを消すかどうか聞かれます.あと,コマンドラインツールとかは起動後に Preferences > Downloads で別途インストールです.gcc は LLVM ですが… あと,場合によっては xcode-select を使う必要もあったりするらしい。
  • あれこれmecab, mecab-ipadic, libiconvと格闘するもmecabさんが文字化けしてしまう。
  • 手動で入れた「/usr/local/{lib,include}」側のlibiconvを参照すると、mecabコンパイル時点でこける(x86_64用のlibiconv_openとかが見つからないとかか宣う)。しかし、libiconv使うサンプルプログラムは普通にコンパイル通って実行も問題無し。一方、標準or古い「/usr/{lib,include}」側のlibiconvを参照すると、mecabはコンパイルできるものの、文字化け。参照方法をいくつか試してみても状況変わらず。ぐぬぬぬ。
  • 参考までにmacports側で入れたら正常に動くか確認してみようと「sudo port install mecab」するとXcodeが古すぎる(10.7.xならXcode4にしろ)と言われる。
  • 「xcode-select -print-path」で「/Developer」(Xcode3.xが入ってるトップディレクトリ)になってたので、「xcode-select -switch /Applications/Xcode.app」と指定すると「/Applications/Xcode.app/Contents/Developer」を参照するように。
  • これでport動くようになったのでmecabインストール。
  • % sudo port install mecab
    % sudo port install mecab-ipadic-utf8
    (このままだと /opt/local/lib/mecab/dic/ がeuc参照してるので変更)
    % cd /opt/local/lib/mecab/dic/
    % sudo ln -snf ipadic-utf8 sysdic

  • portで入れたmecabだと、これで文字化けせずに動く。手動コンパイルした方だと、「手動mecab+portのIPA辞書」でも「portのmecab+手動IPA辞書」でも化ける。手動コンパイルは両方とも不具合あるってこと?
  • ここでxcode-selectし直す前にlibiconv入れてた(それで問題無かったけど)ことに気付き、最後の一確認ということでlibiconv, mecab, ipadic をコンパイルし直してみる。が、/usr/local/以下のlibiconv参照するとやっぱりmecabのコンパイルでこける。/usr/以下のデフォルトだか古い環境の残り物だかを参照するとコンパイルできるけど、文字化け。ぐぬぬぬ。
  • 不具合のあるmecab, ipadicが邪魔にならないように make uninstall して暫く放置(portのほう使う)。
  • mecab-python(pythonバインディング)さんのインストール。普通に「python steup.py build」するとgcc-4.0とかMacOSX10.6.sdkを参照しちゃうので、build時に環境変数を指定してやる必要あり。なお、10.7.3からなのか、私の環境ではMacOSX10.7.sdkが/Applications/Xcode.app/以下のかなり深い場所にあったので、事前にlnしてからやってます。
  • % sudo ln -snf /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk /Developer/SDKs/MacOSX10.7.sdk
    % env CC=/usr/bin/gcc CFLAGS=”-O -g -isysroot /Developer/SDKs/MacOSX10.7.sdk -arch x86_64 -L/opt/local/lib” python setup.py build
    % sudo python setup.py install

  • RMeCabさんのインストール。といっても原則として「パッケージをインストールする」になっちゃって、そのソースパッケージでは「/usr/local/lib/libmecab.2.dylib」を参照してたりする。コンパイル済みでどうしようもないので、lnすることに。
  • % sudo ln -snf /opt/local/lib/libmecab.2.dylib /usr/local/lib/libmecab.2.dylib

  • libsvmさんのインストール。前回の通りに進めると「手順6 Python用 shared libraryのインストール」で「-sonameなんてオプション知らない」と言われる。ググった限りでは作成されるライブラリ名の指定っぽい。ここでサジェストされてるように-install_nameするとOK。手順7以降は前回の要領でやれました。
  • % cd python
    % c++ -shared -dynamiclib -Wl,-install_name,libsvm.so.2 ../svm.o -o libsvm.so.2
    % sudo cp libsvm.so.2 /usr/local/lib/


多分、これでいろんなケースに対応できるんじゃないかと思うが。。。

Installing libsvm-3.1 for Python on Mac OS X 10.6

木曜日, 11月 3rd, 2011

libsvmをコンパイルして「その場で動かす」だけなら README に書いてある手順で進められますが、実用的には好きな場所で実行できるようにしたい。ということでその手順です。

【蛇足コラム】
svm-trainとかの場所をos.path.exists()で確認するようなスクリプトになっているので絶対パスで指定せざるを得ないのだけど、cdll.LoadLibrary()のように環境変数か何かで指定されたPATHを参照して対象ファイルが存在するかを判断するようなライブラリって無いんだろうか。
ConfigParserあたりで変更箇所を一括管理する形で書くのも良いかもしれないけど。

環境構築手順

  1. libsvm本家サイトからソースをダウンロード。
  2. コンパイル。
  3. > tar xvfz libsvm-3.1.tar.gz
    > cd libsvm-3.1
    > make
    
  4. 実行ファイルを ~/bin/libsvm/ に、ツールを ~/bin/libsvm/tools/ にコピー。(要PATH設定)
  5. > mkdir -p ~/bin/libsvm/tools
    > cp svm-predict svm-scale svm-train ~/bin/libsvm/
    > cp tools/*.py ~/bin/libsvm/tools/
    
  6. スクリプトのパスを修正。
  7. > emacs ~/bin/libsvm/tools/easy.py
    is_win32でWindowsか否かに分けてパスをしている箇所で、
    svmscale_exe 等のパスを絶対パスで指定。下記は記入例。
    =====begin(easy.py)=====
    svmscale_exe = "/Users/tnal/bin/libsvm/svm-scale"
    svmtrain_exe = "/Users/tnal/bin/libsvm/svm-train"
    svmpredict_exe = "/Users/tnal/bin/libsvm/svm-predict"
    grid_py = "/Users/tnal/bin/libsvm/tools/grid.py"
    gnuplot_exe = "/usr/local/bin/gnuplot"
    =====end=====
    
  8. バイナリの動作確認
  9. > svm-train
    等と引数無しで実行した時にエラーが出なければ
    (使い方が出力されるだけなら)OK。
    
  10. Python用 shared libraryのインストール
  11. > cd python
    > make     #../libsvm.so.2 が作成される
    > sudo cp ../libsvm.so.2 /usr/local/lib/
    
  12. Python用ライブラリ(スクリプト)の編集
  13. # ライブラリをインストールする場所の確認。
    > python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
    # 以下は「/Library/Python/2.6/site-packages」と出力された場合の例。
    > emacs svm.py
    「if sys.platform == 'win32':」後でパスを指定している箇所にて、
    以下のように変更。元のインデントを保つように注意。
    =====begin(svm.py)=====
    #libsvm = CDLL(os.path.join(os.path.dirname(__file__),\
    #                '../libsvm.so.2'))
    cdll.LoadLibrary("libsvm.so.2")
    libsvm = CDLL("libsvm.so.2")
    =====end=====
    
  14. Python用ライブラリ(スクリプト)のインストール。
  15. > mkdir /Library/Python/2.6/site-packages/libsvm
    > cp svm.py svmutil.py /Library/Python/2.6/site-packages/libsvm/
    > touch  /Library/Python/2.6/site-packages/libsvm/__init__.py
    
  16. Python用ライブラリの動作確認。
  17. > python
    >> from libsvm import svm
    でエラーが出なければOK。
    

参考サイト: Installing libsvm-3.0 for Python on OSX 10.6