IT系ノウハウ Python エラー解消

Anaconda を使って Python 開発環境を作成する方法|Talib の import で失敗する, symbol not found in flat namespace '_TA_ACOS', M1 Chip Mac

事象

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
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 を使えるようになってしまった方がだいぶ楽なことに気づいた。

-IT系ノウハウ, Python, エラー解消
-, ,