事象
import talib で以下のようなエラーが発生し、ネット上にある全ての方法を試したが回避することができなかった
_ta_lib.cpython-38-darwin.so, 0x0002): symbol not found in flat namespace '_TA_ACOS'
このとき私は pyenv, virtualenv, venv, brew を駆使して仮想の開発環境を作っていました
回避策 - Anaconda を使う
インストール
公式サイトから Mac 用のインストーラーをダウンロードし、GUI で Anaconda をインストールする
-
Download Anaconda Distribution | Anaconda
www.anaconda.com
ターミナルを開くと、以下のように anaconda がインストールされていることがわかる
実行例
(base) Unco@HelloMyWorld ~ % which python
/Users/Unco/opt/anaconda3/bin/python
仮想環境の作成
conda create --name <プロジェクト名> <インポートしたいライブラリ>
実行例
(base) Unco@HelloMyWorld ~ % conda create --name newEnv ta-lib
Collecting package metadata (current_repodata.json): done
Solving environment: done
==> WARNING: A newer version of conda exists. <==
current version: 4.10.3
latest version: 4.11.0
Please update conda by running
$ conda update -n base -c defaults conda
## Package Plan ##
environment location: /Users/Unco/opt/anaconda3/envs/newEnv
added / updated specs:
- ta-lib
The following packages will be downloaded:
package | build
---------------------------|-----------------
certifi-2021.10.8 | py39hecd8cb5_2 152 KB
libta-lib-0.4.0 | haf1e3a3_0 438 KB conda-forge
ncurses-6.3 | hca72f7f_2 856 KB
numpy-1.21.2 | py39h4b4dc7a_0 23 KB
numpy-base-1.21.2 | py39he0bd621_0 4.6 MB
openssl-1.1.1m | hca72f7f_0 2.2 MB
python_abi-3.9 | 2_cp39 4 KB conda-forge
readline-8.1.2 | hca72f7f_1 321 KB
sqlite-3.37.2 | h707629a_0 1.2 MB
ta-lib-0.4.19 | py39hc89836e_3 370 KB conda-forge
wheel-0.37.1 | pyhd3eb1b0_0 33 KB
zlib-1.2.11 | h4dc903c_4 96 KB
------------------------------------------------------------
Total: 10.2 MB
The following NEW packages will be INSTALLED:
blas pkgs/main/osx-64::blas-1.0-mkl
ca-certificates pkgs/main/osx-64::ca-certificates-2021.10.26-hecd8cb5_2
certifi pkgs/main/osx-64::certifi-2021.10.8-py39hecd8cb5_2
intel-openmp pkgs/main/osx-64::intel-openmp-2021.4.0-hecd8cb5_3538
libcxx pkgs/main/osx-64::libcxx-12.0.0-h2f01273_0
libffi pkgs/main/osx-64::libffi-3.3-hb1e8313_2
libta-lib conda-forge/osx-64::libta-lib-0.4.0-haf1e3a3_0
mkl pkgs/main/osx-64::mkl-2021.4.0-hecd8cb5_637
mkl-service pkgs/main/osx-64::mkl-service-2.4.0-py39h9ed2024_0
mkl_fft pkgs/main/osx-64::mkl_fft-1.3.1-py39h4ab4a9b_0
mkl_random pkgs/main/osx-64::mkl_random-1.2.2-py39hb2f4e1b_0
ncurses pkgs/main/osx-64::ncurses-6.3-hca72f7f_2
numpy pkgs/main/osx-64::numpy-1.21.2-py39h4b4dc7a_0
numpy-base pkgs/main/osx-64::numpy-base-1.21.2-py39he0bd621_0
openssl pkgs/main/osx-64::openssl-1.1.1m-hca72f7f_0
pip pkgs/main/osx-64::pip-21.2.4-py39hecd8cb5_0
python pkgs/main/osx-64::python-3.9.7-h88f2d9e_1
python_abi conda-forge/osx-64::python_abi-3.9-2_cp39
readline pkgs/main/osx-64::readline-8.1.2-hca72f7f_1
setuptools pkgs/main/osx-64::setuptools-58.0.4-py39hecd8cb5_0
six pkgs/main/noarch::six-1.16.0-pyhd3eb1b0_0
sqlite pkgs/main/osx-64::sqlite-3.37.2-h707629a_0
ta-lib conda-forge/osx-64::ta-lib-0.4.19-py39hc89836e_3
tk pkgs/main/osx-64::tk-8.6.11-h7bc2e8c_0
tzdata pkgs/main/noarch::tzdata-2021e-hda174b7_0
wheel pkgs/main/noarch::wheel-0.37.1-pyhd3eb1b0_0
xz pkgs/main/osx-64::xz-5.2.5-h1de35cc_0
zlib pkgs/main/osx-64::zlib-1.2.11-h4dc903c_4
Proceed ([y]/n)? y
Downloading and Extracting Packages
wheel-0.37.1 | 33 KB | ##################################### | 100%
ta-lib-0.4.19 | 370 KB | ##################################### | 100%
ncurses-6.3 | 856 KB | ##################################### | 100%
zlib-1.2.11 | 96 KB | ##################################### | 100%
certifi-2021.10.8 | 152 KB | ##################################### | 100%
numpy-base-1.21.2 | 4.6 MB | ##################################### | 100%
sqlite-3.37.2 | 1.2 MB | ##################################### | 100%
readline-8.1.2 | 321 KB | ##################################### | 100%
python_abi-3.9 | 4 KB | ##################################### | 100%
libta-lib-0.4.0 | 438 KB | ##################################### | 100%
numpy-1.21.2 | 23 KB | ##################################### | 100%
openssl-1.1.1m | 2.2 MB | ##################################### | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
# $ conda activate newEnv
#
# To deactivate an active environment, use
#
# $ conda deactivate
仮想環境に入る
source activate <プロジェクト名>
実行例
(base) Unco@HelloMyWorld ~ % source activate newEnv
(newEnv) Unco@HelloMyWorld ~ % which python
/Users/Unco/opt/anaconda3/envs/newEnv/bin/python
(newEnv) Unco@HelloMyWorld ~ % python -V
Python 3.9.7
(newEnv) Unco@HelloMyWorld ~ % which pip
/Users/Unco/opt/anaconda3/envs/newEnv/bin/pip
仮想環境内で pip や jupyter notebook も問題なく使える
pip install で他のライブラリも後からインストールが可能
実行例
(newEnv) Unco@HelloMyWorld ~ % pip list
Package Version
----------- ---------
certifi 2021.10.8
mkl-fft 1.3.1
mkl-random 1.2.2
mkl-service 2.4.0
numpy 1.21.2
pip 21.2.4
setuptools 58.0.4
six 1.16.0
TA-Lib 0.4.19
wheel 0.37.1
(newEnv) Unco@HelloMyWorld ~ % pip install ccxt
Collecting ccxt
Using cached ccxt-1.72.84-py2.py3-none-any.whl (2.4 MB)
:
(newEnv) Unco@HelloMyWorld ~ % jupyter notebook
[I 2022-02-12 00:18:13.198 LabApp] JupyterLab extension loaded from /opt/homebrew/Cellar/jupyterlab/3.2.9/libexec/lib/python3.9/site-packages/jupyterlab
[I 2022-02-12 00:18:13.198 LabApp] JupyterLab application directory is /opt/homebrew/Cellar/jupyterlab/3.2.9/libexec/share/jupyter/lab
[I 00:18:13.201 NotebookApp] The port 8888 is already in use, trying another port.
[I 00:18:13.201 NotebookApp] Serving notebooks from local directory: /Users/Unco
結論
今まで Anaconda は使ってこなかったけど、M1 Chip Mac 特有のエラーが Python を使うと多発してかなりのストレスとオーバーヘッドとなるので、この機に Anaconda を使えるようになってしまった方がだいぶ楽なことに気づいた。