mymemo8.hatenablog.com
色々試行したら、termux上で、またyfinanceでエラーが出るようになりました。色々やったので、上手くいかなく成りそうな理由があり過ぎて無駄に頑張った話です。
出たエラーはこちら。ちょっと長文ですが
File "/storage/emulated///test.py", line 1, in <module>
import yfinance as yf
File "/data/data/com.termux/files/usr/lib/python3.12/site-packages/yfinance/__init__.py", line 23, in <module>
from .search import Search
File "/data/data/com.termux/files/usr/lib/python3.12/site-packages/yfinance/search.py", line 26, in <module>
from .data import YfData
File "/data/data/com.termux/files/usr/lib/python3.12/site-packages/yfinance/data.py", line 5, in <module>
from curl_cffi import requests
File "/data/data/com.termux/files/usr/lib/python3.12/site-packages/curl_cffi/__init__.py", line 47, in <module>
from .__version__ import __curl_version__, __description__, __title__, __version__ # noqa: F401
File "/data/data/com.termux/files/usr/lib/python3.12/site-packages/curl_cffi/__version__.py", line 3, in <module>
from .curl import Curl
File "/data/data/com.termux/files/usr/lib/python3.12/site-packages/curl_cffi/curl.py", line 12, in <module>
from ._wrapper import ffi, lib
ImportError: dlopen failed: library "libcurl-impersonate-chrome.so.4" not found: needed by /data/data/com.termux/files/usr/lib/python3.12/site-packages/curl_cffi/_wrapper.abi3.so in namespace (default)
いきなり1行目のyfinanceモジュールをインポートするところからエラーとか初めてでして、基本的なチェックをしなかったのが話のオチなのですが、エラーにビビって、速攻Geminiだとかに聞いてみたのが話を長期化させる要因になっちゃいました。
事の発端
詳細は別記事にしたいと思いますが、emacsをいじくり回していたら、まず、pipでインストールしていた幾つかのモジュールが勝手に?無くなってました。yfinance使って作ったツールを動かそうとしたら、まずモジュールが無い旨のエラーメッセージが出たことで事態に気が付き、yfinanceを再インストールしたら、前述のエラーになりました。再インストールでエラーという時点でプロならピンと来るはずですが、この時点ではピンと来なかったんだよな〜、悔しい。
Gemini氏の見解
以下はエラーに対するありがたいアドバイスです。(結構省略しました)
エラー報告ありがとうございます。このエラー は、curl_cffi ライブラリが特定のライブラリ (libcurl-impersonate-chrome.so.4) を見つけられないために発生する問題です。
考えられる原因と対処法1
Termux 環境に、エラーメッセージで示されている libcurl-impersonate-chrome.so.4 ライブラリがインストールされていない可能性があります。このライブラリは Termux の標準パッケージとしては提供されていない可能性が高いです。curl_cffi をインストールした際に、依存関係として自動的にインストールされることを期待していたかもしれませんが、何らかの理由でインストールに失敗したか、またはカスタムビルドであるために別途用意する必要があるかもしれません。
ちょいと曖昧ですな…
とりあえずcurl_cffiを再インストールしてみるか?
pip uninstall curl_cffi
pip install curl_cffi
…ま、何も変わらんわな…。
考えられる原因と対処法2
libcurl-impersonate-chromeライブラリがTermux のどこかにインストールされているものの、Python がそれを探しに行けるパス(LD_LIBRARY_PATH など) に含まれていない可能性があります。まず、Termux 内でライブラリが存在するかどうかを確認します。以下のコマンドで探してみてください。find / -name "libcurl-impersonate-chrome.so.4" 2>/dev/null
もし見つかった場合は、そのパスを LD_LIBRARY_PATH 環境変数に追加してみることを試してください。ただし、Termux でこの変数を直接操作することが推奨されるわけではありません。
推奨じゃない対処法だから、とりあえず素人の私が手を出すのは後回しだな。次お願いします。
考えられる原因と対処法3
curl_cffi のインストール中にエラーが発生したり、ファイルが破損したりしている可能性があります。curl_cffi を再インストールしてみます。
これは、さっきやった。次お願いします。
考えられる原因と対処法4
インストールされている curl_cffi のバージョンが、要求する特定のバージョンのlibcurl-impersonate-chrome と互換性がない可能性があります。curl_cffi のバージョンをダウングレードまたはアップグレードしてみることを検討してください。どのバージョンが適切かは、エラーが発生する状況や、あなたが参考にしている情報源などを確認する必要があります。
…軽くバージョンを変えてみたが、特段エラーメッセージに変化は見られないです。次お願いします。
考えられる原因と対処法5
curl_cffi の一部機能(特に "impersonate-chrome" という名前から推測される機能)は、標準の libcurl ではなく、特定のパッチが適用されたカスタムビルドの libcurl を必要とする場合があります。Termux 環境でそのカスタムビルドの libcurl を自分でビルドしてインストールする必要があるかもしれません。これは高度な手順であり、Termux の環境によっては難しい場合があります。関連する情報源(curl_cffi のドキュメントや、その機能を利用しようとしているプロジェクトのドキュメントなど)に、カスタム libcurl のビルド手順や入手方法が記載されていないか確認してください。
これは私では対処できないですな…
考えられる原因と対処法6
yfinance ライブラリのどの機能を使用しようとした際にこのエラーが発生しましたか?curl_cffi の "impersonate-chrome" 機能は、特定のWebサイトへのアクセスを模倣するために使われる特殊な機能で、yfinance の基本的な株価データ取得には必須ではない可能性があります。もしこの特殊な機能を必要としていないのであれば、curl_cffi の代わりに他の HTTP クライアントライブラリ (requests など) を yfinance が使用するように設定できるか、または curl_cffi のインストール方法を変更できるか検討してみてください。
それは確かに思ったんですけど、具体的にどうしていいかがねぇ〜。
考えられる原因と対処法7
Termux のパッケージリストとインストール済みパッケージを最新の状態に更新してみます。
これは、勿論やりました。無論効果無し。
考えられる原因と対処法8
もし仮想環境を使用している場合は、以前に提案したように、仮想環境を再構築してみるのも有効な手段です。
termux自体仮想環境みたいなもんだから、termuxごとやっちまうかだな。後でやってみよう。
考えられる原因と対処法9
curl_cffi の GitHub リポジトリなどで、同様のエラーが報告されていないか確認してみます。もし報告されていれば、解決策や回避策が見つかる可能性があります。
ざっと探したんですけど、ほぼそれらしい文献は無さそうな…。唯一と言って良さそうなのはコレ?
github.com
なんですけど、英語ワカラナイし、分かったとしてもたぶんチンプンカンプン。
Termux では、標準的な Linux 環境と比べてライブラリの管理やカスタムビルドが難しい場合があります。まずは curl_cffi の再インストールを試し、それでも解決しない場合は、そのライブラリが依存する外部ライブラリについて、より詳しく調べてみる必要があるかもしれません。もし、このエラーが発生する具体的な状況(どのような Python スクリプトを実行しようとした時か、など)が分かれば、より的確なアドバイスができる可能性があります。
ご丁寧にありがとうございました。
termuxを初期化してみる
最後にGemini氏から提案が合った初期化を試みてみました。めっちゃ時間かかるかと思いましたが、以外と現状復帰は早かったです。
初期化も色々あると思いますが、私が試したのは
設定→アプリ→termuxのストレージの消去です。
勿論、大事なデータはどっかに退避させた上でやります。これでサラの状態にして、pythonだとかを1からインストールしていきます。

過去記事を元にyfinanceもインストール。コレが一番時間かかりました。が、特段の問題もなく、インストール完了。
これでどうだ?!
が、
アカン、結果同じや。詰んだな…
が、しかし!
めっちゃブルーな気分で過去の自分の記事を何気なく見てて、あることに気が付きました。
yfinanceが機嫌よく動いていた頃と、一つだけ明らかに違う条件あるやん!
mymemo8.hatenablog.com
それは、この記事の争点でも合ったyfinanceのバージョンで、
- 当時:Version: 0.2.54
- 現在:Version: 0.2.58(現時点最新)
まさか、バージョン落とすだけで動いたりして?
pip install yfinance==0.2.54
すると…
動くやん!なんて初歩的な結末…。
しかし、これは根本的には解決されていないというか、コレまた前回記事のように、古いバージョンが新環境と互換性が保たれ続けられる保証は無く、実際過去記事のようにyfinanceは古いバージョンと新APIとが互換性を失って使い物にならなくなった訳で、最新バージョンで難なく使えることが望ましいんですけど。
ま、そのときはまた誰か凄い人が解決手段を提示してくれることを期待するしか無いかな。とりあえず今は機嫌よく動いてるから良しとしよう。