Python Tech

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

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万円くらいの人が多いです。

必要なスキル、仕事の獲得までの流れは以下の記事で徹底解説しています。
もちろん全部無料です
空いた時間にぜひ参考にしてみてください。

 

  • この記事を書いた人

次世代ペンギン

長いのでペンギンとお呼びください。システム開発・プログラミングのお仕事をしています。甘味とコーヒーは生命線。多くの人に役立つ情報のシェアが目標です。

人気の記事

1

会社員でプログラマーとして働いている人、インフラやネットワークのエンジニアとして働いている人の中には、フリーランスのプログラマーとして独立、もしくは転向したい人もいるので ...

2

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

3

フリーランスのプログラマーにとって収入の向上に最も直結するのはスキルです。 必要なスキル、スキルの獲得方法が気になる人も多いでしょう。 また、これからフリーランスを目指す ...

4

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

5

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

-Python, Tech
-,