状況
TensorFlowの学習済みモデルをCoreML用のモデルに変換するツールtfcoremlをインストールし、実行しようとすると下記のようなエラーに遭遇しました。
(tensorflow_coreml) $ python converter.py
ImportError: dlopen({path-to-tensorflow}/lib/python2.7/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so, 6): Symbol not found: _PyUnicodeUCS2_AsASCIIString
tensorflowのimportに失敗してるようなので、確認してみます。
(tensorflow_coreml) $ python
>>> import tensorflow
結果は同様のエラー。
ちなみに上記環境でのpythonバージョンは2.7.11
です。
python 3.5.x
で同様の手順をやってみたところ、import tensorflow
は動作しました。ただし、tf-coremlでは3.xはサポートされてないので、2.xで動かす必要があります。
解決法
"Symbol not found: _PyUnicodeUCS2_AsASCIIString"でググってみて出てくるラインナップを見ると、tf-coremlの問題というよりも、macOS 10.13 High Sierraの問題のようです。
この回答を見て、以下を実行しました。
$ CFLAGS="-I$(brew --prefix readline)/include -I$(brew --prefix openssl)/include" \
> LDFLAGS="-L$(brew --prefix readline)/lib -L$(brew --prefix openssl)/lib" \
> PYTHON_CONFIGURE_OPTS=--enable-unicode=ucs2 \
> pyenv install -v 2.7.11
あれやこれやオプションをつけてpyenvの2.7.11
をインストールし直してるようです。
このpyenv環境下でもう一度TensorFlowのインストールからやり直すことで、先ほどのimportが通るようになり、tfcoremlも入れ直して動くようになりました。