symbol not found in flat namespace ‘_TA_ACOS’ のエラーを回避した際の備忘録
やりたかったこと
株価の自動売買システムを作ってみようと思い立ち、色々と調べて見たところ「ta-lib」というライブラリがよく使われているとのことことでした。
試しに動かしてみようと思ったところinstall時にちょっとつまづいたので対処した手順を備忘録として残しておこうと思います。
実行環境
実行環境は以下の通り。
- MacBook Air (M1,2020)
- メモリ:8G
- macOS Sonoma14.0
- 仮想環境:Anaconda
- Python:3.8.12
実行したコード(インストールからimportまで)
ta-libをconda installコマンドで入れられるという情報があったので以下のコマンドを実行しました。
conda install ta-lib
成功したかと思いきや、失敗していたのでbrew install をした後にpip installをしました。
brew install ta-lib
pip install ta-lib
これはこれでsuccesfull していたのですが、importするとエラーが発生しました。
import talib as ta
エラー内容「symbol not found in flat namespace '_TA_ACOS'」
上記のようにimport talib を実行するとエラーが発生。
symbol not found in flat namespace '_TA_ACOS'
色々試していたのですが、手元のWindowsだとこのエラーが出なかったのでもしかしたらM1macで発生する問題っぽい?
解決策
参考になったサイトとして、issueが切られていてそこに解決策のヒントがありました。
https://github.com/TA-Lib/ta-lib-python/issues/408
https://github.com/TA-Lib/ta-lib-python/issues/635
結論以下のコードを実行しました。
conda install -c conda-forge ta-lib
結論「conda-forge」を使うとうまく行くようです。
「-c conda-forge」 とは
- -c はchannelの略で、Condaに特定のチャネルからパッケージを探してインストールするように指示します。
- conda-forge はCondaのチャネルの一つで、コミュニティ主導で多くのパッケージが提供されている場所です。
https://conda-forge.org/docs/user/introduction.html
conda-forgeが出てくるまでは以下のような問題がありました。
- パッケージが多くのチャネルに散らばっているため、パッケージを見つけるのが困難。
- チャネル間でパッケージを組み合わせることは、バイナリの非互換性のためにエラーが発生する可能性がある。
- チャネルが更新されていない場合、新しいチャネルを見つける必要がある。
それを解決するために作られたのがconda-forgeのようです。
【補足】Windowsの場合]
Mac OSではなく、Windowsでpipでta-libをインストールしようとした場合、以下のようなエラーがでました。
error: subprocess-exited-with-error
× Building wheel for ta-lib (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [20 lines of output]
running bdist_wheel
running build
running build_py
creating build
creating build\lib.win-amd64-cpython-38
creating build\lib.win-amd64-cpython-38\talib
copying talib\abstract.py -> build\lib.win-amd64-cpython-38\talib
copying talib\deprecated.py -> build\lib.win-amd64-cpython-38\talib
copying talib\stream.py -> build\lib.win-amd64-cpython-38\talib
copying talib\__init__.py -> build\lib.win-amd64-cpython-38\talib
running build_ext
building 'talib._ta_lib' extension
creating build\temp.win-amd64-cpython-38
creating build\temp.win-amd64-cpython-38\Release
creating build\temp.win-amd64-cpython-38\Release\talib
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\bin\HostX86\x64\cl.exe" /c /nologo /O2 /W3 /GL /DNDEBUG /MD -Ic:\ta-lib\c\include -IC:\Users\***\AppData\Local\Temp\pip-build-env-svdqsmtv\normal\Lib\site-packages\numpy\core\include -IC:\Users\***\anaconda3\envs\stock_price_analysis\include -IC:\Users\***\anaconda3\envs\stock_price_analysis\Include "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\cppwinrt" /Tctalib/_ta_lib.c /Fobuild\temp.win-amd64-cpython-38\Release\talib/_ta_lib.obj
_ta_lib.c
talib/_ta_lib.c(1080): fatal error C1083: include ファイルを開けません。'ta_libc.h':No such file or directory
<string>:77: UserWarning: Cannot find ta-lib library, installation may fail.
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.27.29110\\bin\\HostX86\\x64\\cl.exe' failed with exit code 2
[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
Failed to build ta-lib
ERROR: Could not build wheels for ta-lib, which is required to install pyproject.toml-based projects
これも今回と同じようにconda forgeのコマンドで無事インストールすることができました。