GitHub ActionsでTA-Libインストール失敗!「ta-lib/ta_defs.h が無い」エラーの原因と解決策 (Ubuntu編) 😵💫
はじめに
こんにちは!GitHub Actionsを使って株価データの自動取得パイプラインを構築していたのですが、テクニカル分析ライブラリの定番 TA-Lib のインストールで盛大にハマりました...😇
requirements.txt に TA-Lib を書いて普通に pip install しようとすると、fatal error: ta-lib/ta_defs.h: No such file or directory という、なんとも不穏なエラーメッセージが...。
今回は、このエラーの原因と、GitHub Actions (Ubuntu環境) でTA-Libを正しくインストールするための手順をまとめます。
何が起きたか? 💥
ワークフローのログを見ると、pip install TA-Lib の途中で以下のようなコンパイルエラーが発生していました。
gcc ... talib/_ta_lib.c ...
talib/_ta_lib.c:1225:10: fatal error: ta-lib/ta_defs.h: No such file or directory
1225 | #include "ta-lib/ta_defs.h"
| ^~~~~~~~~~~~~~~~~~
compilation terminated.
error: command '/usr/bin/gcc' failed with exit code 1
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for TA-Lib
ta-lib/ta_defs.h というヘッダーファイルが見つからない、と言われていますね。
なぜエラーになるのか? 🤔
Pythonの TA-Lib ライブラリは、実は C言語で書かれたTA-Lib本体 のラッパー(包み紙)です。pip install する際に、このC言語のコードをコンパイルしようとしますが、GitHub Actionsの実行環境(Ubuntu)にはデフォルトでTA-Lib本体が入っていないため、コンパイルに必要なヘッダーファイル (ta_defs.h など) が見つからずエラーになっていたのです。
間違った解決策:apt-get install libta-lib-dev ❌
「じゃあ、Ubuntuのパッケージマネージャー (apt) でC言語本体を入れればいいのでは?」と考え、以下のコマンドを試しました。
YAML
これは間違い! 🚨
run: |
sudo apt-get update
sudo apt-get install -y libta-lib-dev # <-- このパッケージは存在しない
pip install TA-Lib
しかし、今度は apt-get がエラーを吐きました。
コード スニペット
Reading package lists...
Building dependency tree...
Reading state information...
E: Unable to locate package libta-lib-dev
なんと、libta-lib-dev という名前のパッケージはUbuntuの公式リポジトリには存在しませんでした...。
正しい解決策:ソースからビルド! 🔨
結局、TA-LibのC言語本体は、ソースコードから手動でビルド(コンパイル)してインストールする必要がありました。Qiitaの記事 などを参考に、以下の手順をGitHub Actionsのワークフロー (.github/workflows/daily-run.yml) に組み込みました。
コード スニペット
# 3. ライブラリのインストール(必須)
- name: Install dependencies
run: |
python -m pip install --upgrade pip
# --- ここからTA-Lib本体のビルド ---
# 1. ビルドに必要なツールをインストール
sudo apt-get update
sudo apt-get install -y build-essential wget
# 2. ソースコードをダウンロード
wget [http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz](http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz)
# 3. 解凍
tar -xzf ta-lib-0.4.0-src.tar.gz
# 4. ビルドとインストール
cd ta-lib/
./configure --prefix=/usr
make
sudo make install
# --- ここまでTA-Lib本体のビルド ---
# 5. requirements.txt (TA-Libを含む) をインストール
# 本体がインストールされたので、pip install が成功する ✨
cd ..
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
ポイントは、pip install -r requirements.txt を実行する前に、wget でソースコードをダウンロードし、configure, make, make install でC言語ライブラリ本体をシステムにインストールすることです。
まとめ
GitHub Actions (Ubuntu) でPythonの TA-Lib を使う場合は、pip install だけではダメで、事前にC言語ライブラリ本体をソースからビルドする必要がある、という話でした。
fatal error: ta-lib/ta_defs.h: No such file or directory が出たら、慌てずにビルド手順を追加しましょう! 💪