Python 3.7 で以下のエラーにハマった時に読む記事です。
ImportError: libta_lib.so.0: cannot open shared object file: No such file or directory
ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 from PyObject
上記エラーに遭遇して、下記の方法をいろいろ試しましたが、ちゃんと解決できたとはいえません…。とりあえず回避する方法だけなら、記事の末尾を参照。
実行環境は下記の通りです。
- Docker Python公式イメージ(3.7-buster)
- Python 3.7.3
- TA-Lib 0.4.19
TA-Lib(Python)のインストール方法
まずは基本的なインストール方法を確認しておきます。
PythonでTA-Libを使うには、TA-Lib本体をインストールした上で、TA-LibのPythonラッパーをインストールする必要があります。
素直に pip install するだけでは使えないので、注意です。
インストール手順は下記の通り実行していきます。TA-Libのソースをダウンロードしてコンパイルします。
curl -L http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz -O
tar xzvf ta-lib-0.4.0-src.tar.gz
cd ta-lib
./configure --prefix=/usr
make
sudo make install
※実際にはDockerfileでやっています。
これを行なった上で、pip install します。
pip install Ta-Lib
これで import talib で使えるはずです。
そのはずでした。
実行してみると、以下のエラー。
ImportError: libta_lib.so.0: cannot open shared object file: No such file or directory
試したこと1. ldconfigの追加
調べてみると、以下のように ldconfig の設定追加で解消しそう。
echo "include /usr/local/lib" >> /etc/ld.so.conf
ldconfig
すると以前のエラーは出なくなりましたが、今度は以下のようなエラーに遭遇しました。
ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 from PyObject
みたところ numpy 関連のエラーのようですね。
試したこと2. numpyのダウングレード
メッセージ内容から推察するに、バージョン対応ができていないっぽいので、numpy のバージョンを古いものに変更してみることに。
とりあえず1.16にダウングレード(バージョン変更)してみます。
pip install numpy==1.16.1
結果変わらず。他のバージョンでも一通り試してみても、ダメでした。
最終的に(解決策)
Pythonのバージョンを3.8に変更しました。
Dockerイメージをpython:3.8-busterでビルドしなおし、上記手順どおりにインストールしたところあっさり実行できました。TA-LibとPython3.7の相性が原因なのは考えにくいですが、3.7のイメージに含まれる処理系の過不足とかかもしれませんね。
環境を変えてしまっているので直接的な解決策ではないですが、今回はとりあえず動けばよかったので、これにてクローズ。
Pythonのスキルを使って毎月の収入源を増やすのが最適なんじゃないかという件
実際、今のスキルに合わせて仕事を獲得し、スキマ時間で毎月+5、+20、+70万円くらいの人が多いです。
必要なスキル、仕事の獲得までの流れは以下の記事で徹底解説しています。
(もちろん全部無料です)
空いた時間にぜひ参考にしてみてください。