windowsでmecab-pythonを入れるのがとても大変だった(64bit win10, Python 3.6, MeCab 0.996, VC2017)追記あり

windowsでmecab-pythonを入れようとしたらとても大変だったのでメモ。うろ覚えのところもあります。こちらの環境は、64bit windows 10(7からアップグレード), Python 3.6, MeCab 0.996, VC2017です。

mecab-configがない

MeCabを入れる。「Binary package for MS-Windows」を使ってインストール。これはすんなり入る。

VC2017の画面で、mecab-pythonを入れられそうな雰囲気があったので、pipインストールしてみようとすると、「mecab-configがない」などといわれて、止まる。mecab-python3も同じエラーで止まる。

先ほどのMeCabのサイトから、「perl/ruby/python/java バインディング」にいって、「mecab-python-0.996」をダウンロードする。解凍し、

python setup.py build

を実行してみるが、エラー。

はじめは、ここなどを参考にする。Windowsにmecab-pythonを導入 - 個人的まとめ

とりあえず、mecab-configがないことへの対応として、setup.pyを次のように変えます。上が変更前、下が変更後。

setup(name = "mecab-python",
    version = cmd1("mecab-config --version"),
    py_modules=["MeCab"],
    ext_modules = [
        Extension("_MeCab",
            ["MeCab_wrap.cxx",],
            include_dirs=cmd2("mecab-config --inc-dir"),
            library_dirs=cmd2("mecab-config --libs-only-L"),
            libraries=cmd2("mecab-config --libs-only-l"))
            ])
setup(name = "mecab-python",
    version = "0.996",
    py_modules=["MeCab"],
    ext_modules = [
        Extension("_MeCab",
            ["MeCab_wrap.cxx",],
            include_dirs=["C:\Program Files (x86)\MeCab\sdk"],
            library_dirs=["C:\Program Files (x86)\MeCab\sdk"],
            libraries=["libmecab"])
            ])

ディレクトリは、環境によって変更が必要。

これで実行してみると、エラー。「vcvarsall.batがない」とか言われる。

vcvarsall.batがない

入っているPythonに応じたCコンパイラがいるらしい。その対応表はここにある。3.6なら、VC++は14.0。これは、VC++ 2015のことで、対応するビルドツールはここにある。とりあえず、これを入れる。

2017を使っているのに2015も必要だなんて。

これで実行してみる。エラー。「basetsd.hがない」とか言われる。

basetsd.hがない

windowsのヘッダーファイル。このファイル自体を検索したら、「C:\Program Files (x86)\Windows Kits\8.1」の下にあった。うーん、よくわかんないけど、7からアップグレードしたから、10に行ってないのかな。

これを10のフォルダにコピペすればいいのかな、と思ってコピペ。そして実行すると、次は別のヘッダーファイルがないと言われる。コピペ。ヘッダーファイルがない。コピペ。ヘッダーファイルがない。コピペ。

しばらく繰り返していたんだけど、さすがにおかしい。何かもっと根本的な解決策があるはず。

で、「すべての設定」「アプリと機能」「Windows Software Development Kit」を選択し、「変更」。Changeを選んで、すべてのチェック項目を選択。しばらくすると、なかったヘッダーファイルができていた。素晴らしい。

これで実行してみる。エラー。「set_resultがない」と言われる。上の記事に基づいて、mecab.hに追記する。

これで実行してみる。エラー。「unresolved externals」みたいなエラーが11個くらい出る。

うーん、上の記事ではもううまくいっているはずなのに。

unresolved externals

ここらへんで、64bit Windows + python 2.7 + MeCab 0.996 な環境をつくる - Qiitaに切り替えて、格闘。

環境変数の設定、ソースの修正(パスは適宜変える。あと、mecab.h内のSIWGの間違いは全部修正する)、ビルド、ファイルコピペ、setup.pyの書き換え、などを上の記事を見ながら実施。

これで実行してみる。エラー。「"rc.exe"が実行できない」みたいなエラーが出る。

rc.exeが実行できない

rc.exeについて調べてみると、64bit - LNK1158 cannot run rc.exe x64 Visual Studio - Stack Overflowというページを発見。これによると、rc.exe と rcdll.dll の2つのファイルを、C:\Program Files (x86)\Windows Kits\8.1\bin\x86 から C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64 へコピペすればいいようだ。

これで実行してみる。成功! やっと! 試行錯誤しながらやっていたら、半日×2くらいかかった。

追記(2017/08/14)

インストールはうまくいったけど、実際に動かしてみると、文字コード関連のエラーが多発。その結果、MeCabは諦めて、janomeを使うことにしました。

前の記事:
[ VBA ] 指定フォルダ以下の全フォルダに含まれるファイルの一覧を取得したい
次の記事:
[Excel] 「申し訳ございません。同じ名前のブックを同時に開くことはできません。」のやっつけ方