Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

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++を使ってビルドする他のパッケージでも起こりうる
  • 手動でヘッダーをインストールすれば解決
  • アップグレード時に自動でされるはずのパッケージインストールがされていないのが根本の原因
  • 今後のメジャーアップデート時にも似た問題が起こるかもしれない
tomoharr24
プログラミング初心者な大学院生です。 主な使用言語はPythonです。 趣味的な記事しかまだないですが、いずれは自然言語処理分野のことも書けたらなと。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした