東京工業大学 漫画研究会 P-MAN のナレッジです.自由に編集して下さい.

めちゃくちゃ苦労したからやり方メモっておく.

・基本的にはここのサイト通り
http://qiita.com/h_kabocha/items/5bee9e9b852aed114...
・ここの通りだとまずい部分の対応方法に *** を付けてメモって行く
  1. mecab-0.996 と mecab-python-0.996 をダウンロードして解凍
  2. mecab-0.996 を実行して MeCab をインストール.文字コードは UTF-8.
    1. ***展開先は(多分デフォルトで)Program Files (x86)
  3. visual studio をインストール.***バージョンは 2017 でOK.「デスクトップ」にある「C++」とかいうのもインストール
  4. mecab-python なんとかの修正.ほぼ参考サイト通り
    1. Makefile.msvc.in の 11 行目の変更は Program File (x86)/MeCab/etc/mecabrc にパスが通るように
  5. ビルドする.***call コマンドは以下のものを使う
    • call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
  1. mecab-python の setup.py を編集.***MeCab のパスは Program Files (x86)/MeCab/sdk
  2. ***ここが超重要.vcvarsall.bat にパスを通す.
    1. VS90COMNTOOLS という環境変数を作成する.値は
      • C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
      • ようは VS2017 の中の vcvarsall.bat のあるディレクトリ.
      • 場所が違ったら find -name vcvarsall.bat で検索する
    1. Anaconda/envs/{環境名}/Lib/distutils/msvc9compiler.py の 247 行目を以下のように変更する
      • before : productdir = os.path.join(toolsdir, os.pardir, os.pardir, "VC")
      • after : productdir = toolsdir
  1. ***上で編集した環境に activate
  2. mecab-python で python setup.py build と python setup.py install
  3. やったね


以下実際の奮闘の様子


2017/ 4/12

・手元の windows では MeCab が使えない(64bit 辞書がない)
・EC2 では word2vec がメモリ不足で使えない
・9dw の EC2 では botocore のなんかエラー

・メモリ不足の件はどうやら無料の EC2 ではどうしようもない
→・研究室 の ubuntu を使うか,自室PC を完全に ubuntu マシンにすれば何とかなる
・64bit 辞書ない問題は完全に辞書だけの問題なら何とかなるかも
→コンフルに辞書の用意の仕方があったはずだからそれを試してみる
・9dw の EC2 でうまくいかない問題は中村さんに聞こう
→これは最終手段,金曜日に相談

・とりあえず
今日
・64bit 辞書を試す
明日
・研究室 PC で試す
明後日
・泣きつく

・ここを参考に辞書をパクってくる
https://9dworks.atlassian.net/wiki/pages/viewpage....

・うん,まぁどうやら辞書は新しくなったようだけど,依然 python では動かないね

・コンフルにさっき見てた奴の日本語版があったからこっちで試してみよう
http://qiita.com/h_kabocha/items/5bee9e9b852aed114...

・うがーやっぱりおんなじところで詰まる.
ビルドの段階で VS のバージョン違いのせいか,環境に存在しないものを実行しろと言われる

・探せば違うところにあったりするのか?

・あった.find -name vcvarsall.bat ってやると探せる
× : call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64
○ : call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64

・うがー最後の最後っぽいところで python setup.py build しようとすると
unable to find vcvarsall.bat とかいうエラーが出るんじゃ―!

・対処法を探す
http://www.regentechlog.com/2014/04/13/build-pytho...
http://www.web-cte.co.jp/kozakuralab/?p=1643
「違うバージョンの VC をインストールして...」系の記事は全滅してほしい.
visual studio の古いバージョンとかどうやったらインストールできるんだよ

・2.7 を使う分にはちょうどいい VC を MS が提供しているらしい
https://www.microsoft.com/en-us/download/confirmat...

2017/ 4/13

・今日は unable to find vcvarsall.bat エラーを解消しよう

・昨日の感じから,解決策は
・今入ってる VC のビルダ(MeCab の 64 bit 版の nmake に使用したやつ)を使うようにどうにか設定する ・sys.version で出てくる VC をどうにかインストールする

・この二つ試してどっちもうまくいかなそうだったら ubuntu でやろう

<<python のビルドを HOGE/2017/Community/VC/Auxiliary/Build/vcvarsall.bat に合わせる方法を考える>>

・これの一番下がそれだと思うんだけどなぁ...
http://www.regentechlog.com/2014/04/13/build-pytho...
そもそも python_install_dir がどこにあるんだよ
→ Program Files (x86) 直下で find したが見つからない.

・このページの記述について詳しく説明しているものを探そう

・お, C: 直下で find したら Anaconda 内にいくつか発見したぞ.
そうか python で VC ビルドする際に使う設定なんだから python 内を調べなきゃいけなかったんだ
・Anaconda 内と,AppData とかいうところにもあるな.とりあえず Anaconda の方から見てみよう ・Anaconda/env/python2007 内の奴なら最悪ぶっ壊しても何とかなりそうだな

・Anaconda/env/python2007/Lib/distutils/msvc9compiler.py の 243 行目に
何やらパスを設定している風な記述がある.ここをいじろうか

・とりあえず _msvc9complier.py という名でバックアップを取っておく
・お,260 行目に log.debug("Unable to find vcvarsall.bat")があるぞ. 現状はここに到達しているわけだ

L243 : toolskey = "VS%0.f0COMNTOOLS" % version
ってなってて,version は 172 行目にある get_build_version() というメソッドで決まっているらしい

・おお,get_build_version() でやってるのは結局 sys.version たたいて文字列操作で
バージョン取得してるってだけだ.
それを VS*COMNTOOLS にぶち込んでそのパス叩いて〜ってやってる

・じゃあ実際にその環境変数があるのか確認してみようか

・get_build_version に書いてある通りに実行してみたら 9.0 になった.
ということは環境変数は VS90COMNTOOLS ということだね

・echo $VS90COMNTOOLS としてもやっぱり返ってこない

・この先は2通り考えられるな
・VS90COMNTOOLS という環境変数を作ってしまう ・コンパイラの 243 行目の記述を変えてしまう

・いや,違うな.
・「VS90COMNTOOLS という環境変数でビルダをマニュアルで変更できる」という仕様なら 環境変数が存在しない場合の処理がその先に書いてあるはずだから. まずはその辺を読んで,最終的にどのような経緯を経て debug.log に達しているか理解する ・そのうえで,上記の解釈が正しそうなら環境変数を新しく作る という流れだろう

・どうやら 257 行目で VS90COMNTOOLS で指定したパスに vcvarsall.bat を連結して使ってるっぽいから
VS90COMNTOOLS は以下に設定すればいいっぽい
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build

・試しに REPL で以下を実行
> import os > dir = os.environ.get("VS90COMNTOOLS", None) > os.path.isdir(dir)
True
> file = os.path.join(dir, "vcvarsall.bat") > os.path.isfile(file)
True

・よし,これで 258 行目の if 文を超えられる!

・python setup.py build
→ Unable to find vcvarsall.bat

・Unable to find vcvarsall.bat って find_vcvarsall 以外にもあるの?

・検索したら query_vcvarsall.bat にもあった
こっちを噛んでるのか?
考えられるのは二つ
・find_vcvarsall ではなく query_vcvarsall の方でなんかエラー → 今度はそっちを見る ・productdir が VS90COMNTOOLS じゃない値になっちゃってる → REPL で find_vcvarsall の全文をテスト

・先に後者をやってみよう
~231 行目
最初の try 文直後では productdir = None
~ 254 行目
ここを超えた直後に productdir = 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\VC'

・??VC\\VC\\ ってなんだ?
→ 案の定 os.path.isfile(vcvarsall) = False

・247 行目に productdir の生成で余計なことやってるっぽい
ここコメントアウトして toolsdir をそのまま与えてみよう

・python setup.py build が通った!やったか!?

python で m = MeCab() すると以下のエラー
natto.api.MeCabError: MeCab dictionary charset not found

・手順ページの下にトラブルシューティングで
Unable to find の場合の奴があった.
これを試してみよう

・visual C++ 2017 の内部バージョンは 14.1 だから
SET VS90COMNTOOLS=%VS141COMNTOOLS%`
ってやればいいっぽい

・この辺よくわからないから,もう一度最初からやってみた

・そういえば Makefile.msvc.in を編集する際に d:\programs\... みたいな謎のパス指定したところあったけど,
あれを Program Files (x86)/MeCab/... にしてみたらうまくいかないかな

・やった!natto.MeCab() が動いた!!
けど,辞書の文字コードが死んでるっぽい......

・と思ったらプロンプトの文字コードの問題だったっぽい.
git bash で簡単にコード書いて実行したら動いた!!!優勝!!!!

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

どなたでも編集できます