Python Tech

Docker環境でPython+TA-Libのエラーに遭遇した時に試したこと(と解決策)

2020年12月18日

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のイメージに含まれる処理系の過不足とかかもしれませんね。

環境を変えてしまっているので直接的な解決策ではないですが、今回はとりあえず動けばよかったので、これにてクローズ。

 

  • この記事を書いた人

次世代ペンギン

長いのでペンギンとお呼びください。システム開発・プログラミングのお仕事をしています。甘味とコーヒーは生命線。日常での学びを記事にしています。

人気の記事

1

キャリアアップのため、または高収入を目指して、しっかりプログラミングを学びたいという人が増えてきましたね。 この記事では現役のエンジニアである私が、実際に仕事で稼げるようになるためのスクール選びで失敗 ...

2

先日の記事では、初心者からフリーランスプログラマーになる難しさと、それでもなんとか稼げるようになるにはどうしたらいいか解説しました。 今回の記事では、稼げるフリーランサーになるために必要な要素を、もう ...

3

気休めだけの甘い言葉は書きません。 最近は多くの企業やサイトで、使い捨てられるプログラマーが欲しいがために、甘い言葉で初心者プログラマを誘い出しています。 この記事では、まずは「現実」をちゃんと理解し ...

4

Vuetifyの v-progress-circular コンポーネントは、数値データや処理状況を環状(円状)のデザインで教えてくれるUIデザインです。 ローディングのスピナー(処理中のマーク)として ...

5

※画像はずとまよの新曲とは一切関係ありません   ずっと真夜中でいいのに。(以下、ずとまよ)の新曲『勘ぐれい』のMVが12月1日に公開されましたね。 MV前に公開されていた原曲を聴き、神曲な ...

6

Vuexのstore(ストア)を使うと、各コンポーネント間で個別にデータのやり取りすることなく、データを一元的に管理できます。Vueでは欠かせない機能といえるでしょう。 state(変数、コンポーネン ...

-Python, Tech
-,

© 2021 ペンギンのーと