🥐

M2 Macでmecabの環境構築でsymbol not found in flat namespaceエラーの対処法

2023/01/21に公開

M2 Mac(Ventura)でmecabの環境構築にちょい詰まった&良さげの文献がなさげだったのでメモ置いておきます。

形態素解析デビューしようと思って、mecabインスコできず挫折するのはちょっと切ないので本記事が参考になれば幸いです。

(ARM64チップ起因なのでM1 Macでも発生しそうですがググった感じあんまり直面してる人いなかったのでもしかしたらOSも関係あるのかもしれない)

まずはこちらのqitaの記事を参考に無邪気に環境構築していきます。
https://qiita.com/paulxll/items/72a2bea9b1d1486ca751

$ brew install mecab
$ brew install mecab-ipadic

$ pip install mecab-python3

それぞれの処理の詳細は本記事では割愛しましす。

よし、これで動くかなと

$ python -c "import MeCab"

を実行すると以下のエラーが出ます。

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/Users/tomo25/.pyenv/versions/3.11.1/lib/python3.11/site-packages/MeCab/__init__.py", line 10, in <module>
    from . import _MeCab
ImportError: dlopen(/Users/tomo25/.pyenv/versions/3.11.1/lib/python3.11/site-packages/MeCab/_MeCab.cpython-311-darwin.so, 0x0002): symbol not found in flat namespace '__ZN5MeCab11createModelEPKc'

同じ問題に直面してる人いるかなと色々探してみたところこちらを発見
https://github.com/coqui-ai/TTS/issues/2210#issuecomment-1352739162

どうやらmecabや関連ライブラリのインストールでビルド済みのものをインストールしているがそれらがARMに対応した形ではないようです。

homebrewのドキュメント
https://docs.brew.sh/FAQ#why-do-you-compile-everything

以下を実行してソースからビルドしなおします。

/opt/homebrew/bin/brew --build-from-source mecab
ARCHFLAGS='-arch arm64' pip install --compile --use-pep517 --no-cache-dir --force -e .

環境によってはinstallコマンドが必要な場合もあるようですのでエラーが出たら試してみてください

$ /opt/homebrew/bin/brew --build-from-source mecab
Error: Unknown command: --build-from-source

$ /opt/homebrew/bin/brew install --build-from-source mecab
==> Downloading https://formulae.brew.sh/api/formula.jws.json

そして、再びmecabをインポートしてみる

$ python -c "import MeCab"

無事実行できました!めでたし!

Discussion