赞
踩
ImportError: symbol not found in flat namespace '_TA_ACOS'
问题被这个问题困扰好几天了。
以前一直使用intel芯片的Macbook,两年前切换成M1芯片的Macbook的时候,为了省事直接使用了time machine把整个机器备份到了新电脑上,因此在M1 Macbook上实际上一直用的是Rosseta转译的python
环境。
最近下决心进行彻底迁移,重新安装了Arm64架构的Anaconda,重新安装了python
环境,python
终于在arm架构下运行了:
不过马上就发现了一个大问题:
TA-lib
无法导入了!导入时报错:
Python 3.8.19 (default, Mar 20 2024, 15:27:52)
[Clang 14.0.6 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import talib
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/anaconda3/envs/py38/lib/python3.8/site-packages/talib/__init__.py", line 93, in <module>
from ._ta_lib import (
ImportError: dlopen(/opt/anaconda3/envs/py38/lib/python3.8/site-packages/talib/_ta_lib.cpython-38-darwin.so, 0x0002): symbol not found in flat namespace '_TA_ACOS'
>>>
这个问题是由于环境切换到M1系统导致的,但是即使重新pip
安装ta-lib
也无法解决,这是因为ta-lib实际上是C
语言包,我们必须确保安装在系统中的C语言talib
包、python
环境、以及python
中的ta-lib
包都是arm64架构才行。同时,我的c
语言ta-lib
包是用homebrew安装的,因此还需要把homebrew也替换成arm64架构,才能彻底解决问题。
为此,解决方法是删除python
的ta-lib
包,删除C
语言ta-lib
包,删除homebrew,再重新安装arm64架构的homebrew,重新安装arm64架构的C
语言ta-lib
,再重新安装python
的ta-lib
,步骤如下:
python
ta-lib
包$ pip uninstall ta-lib
C
语言的ta-lib
$ brew uninstall ta-lib
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
'opt/homebrew'
, 而是安装到了intel芯片Mac的默认路径:'usr/local/homebrew'
,因此找到了下面的命令来删除它:$ PATH=/usr/local/bin:$PATH arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
至此,系统清理干净了,下面继续:
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
$ /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
$ export PATH=$PATH:/opt/homebrew/bin
C
语言的ta-lib
包了,注意必须安装arm64架构的包:$ arch -arm64 brew install ta-lib
python
ta-lib
包:$ arch -arm64 python -m pip install --no-cache-dir ta-lib
如果上面都顺利,现在ta-lib
应该可以正常使用了:
Python 3.8.19 (default, Mar 20 2024, 15:27:52)
[Clang 14.0.6 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import talib
>>> talib.__version__
'0.4.28'
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。