LoginSignup
5
2

More than 3 years have passed since last update.

MacOS MojaveでAllenNLPのインストールを失敗した話

Last updated at Posted at 2019-08-27

はじめに

AllenNLPはいいぞ、、、 と聞いたので早速使ってみよう!としたらインストールに詰まったので原因と解決法です。インストール時に必要となる jsonnetをビルドする際に失敗する という問題ですが、結論から言うと、

  • 低いバージョン(High Sierra等)からのMacOS Mojaveへのアップグレードする際のC++ヘッダーの自動インストール漏れ

が原因です(元からMojaveがインストール済のMacBookの友人はすんなりインストールできたらしい、、、)。限定的な想定ですが、今後のMac OS Xのメジャーアップデートでも似た問題が発生する可能性はあるので、また調べ直さないように記事にします。
※OSの仕様による問題なのでMacの人向けです

問題

いろいろな導入方法があるのですがAnacondaを使ったやり方にします。

$ conda create -n allennlp python=3.6
# 3.6系最終版である3.6.9が勝手に指定されてインストールされます
$ conda activate allennlp
# 環境を切り替え
(allennlp) $ pip install allennlp

AllenNLP公式githubの説明では、「まっさらなPython3.6の環境を作ってpip installすればいいよ!!」って書いてあるので実行します。

...
Building wheel for jsonnet (setup.py) ... error
ERROR: Complete output from command //anaconda3/bin/python -u -c 'import setuptools, tokenize;__file__='"'"'/private/var/folders/q3/t9f6dwcd7qbfwhp4h3tn4ffm0000gn/T/pip-install-7bksxwcr/jsonnet/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /private/var/folders/q3/t9f6dwcd7qbfwhp4h3tn4ffm0000gn/T/pip-wheel-ab5wiufe --python-tag cp37:
ERROR: running bdist_wheel
running build
running build_ext
c++ -c -g -O3 -Wall -Wextra -Woverloaded-virtual -pedantic -std=c++0x -fPIC -Iinclude -Ithird_party/md5 -Ithird_party/json core/desugarer.cpp -o core/desugarer.o
c++ -c -g -O3 -Wall -Wextra -Woverloaded-virtual -pedantic -std=c++0x -fPIC -Iinclude -Ithird_party/md5 -Ithird_party/json core/formatter.cpp -o core/formatter.o
...

失敗します。 なんかC++周りでエラーが出てる???Pythonなのに???(情弱並感)

解決法

ググって見るとこの問題は割とよく起こっているみたいで、AllenNLPのGithub Issueでも話題に上がっています。このIssueによるとGoogleのjsonnetのIssueが参考になるよ!って書いてあります。さらにこの記事ではこのStackOverflowが役に立つよ!って書いてありました。たらい回しにしないで答えを書いて♡

どうやらMojave向けのC++のヘッダーがインストールされていないために参照エラーが発生しているらしく、

$ open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

でヘッダーをインストールすれば解決するそうです。パッケージインストーラーが起動して指示通りに進めればOKです。自分はこの方法で解決しました。
インストールが終わって仮想環境内でpip install allennlpすれば晴れてAllenNLP導入完了です!!

余談

もしヘッダーのパッケージ(macOS_SDK_headers_for_macOS_10.14.pkg)が見つからない場合はDLする必要があるみたいですが、その方法は次の記事で紹介されています。

こちらの記事によると、

そもそも,macではCやC++のコンパイラはXCode由来のようで,OSアプデをした後にXCodeもアプデをしたのですが,そのアプデ内容に 「Mojave用のmacOS SDK headerがデフォルトで入っていないのが原因」みたいです.

普段からC++を書いてる人は気づきそうですがC++環境が元からインストールされている環境をバックエンド的に使ってると気づきませんね、、、

まとめ

  • C++によるパッケージビルド時のヘッダー参照エラーが原因
  • この問題はMojaveでC++を使ってビルドする他のパッケージでも起こりうる
  • 手動でヘッダーをインストールすれば解決
  • アップグレード時に自動でされるはずのパッケージインストールがされていないのが根本の原因
  • 今後のメジャーアップデート時にも似た問題が起こるかもしれない
5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2