Python学习——解决M1芯片Mac下导入TA-lib出错的问题ImportError: symbol not found in flat namespace ‘_TA_ACOS‘

终于解决了M1芯片导入TA-lib时的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架构,才能彻底解决问题。

为此,解决方法是删除pythonta-lib包,删除C语言ta-lib包,删除homebrew,再重新安装arm64架构的homebrew,重新安装arm64架构的C语言ta-lib,再重新安装pythonta-lib,步骤如下:

  1. 删除python ta-lib
    $ pip uninstall ta-lib
    
  2. 删除C语言的ta-lib
    $ brew uninstall ta-lib
    
  3. 删除homebrew,本来删除正常安装的homebrew应该用下面的命令:
    $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
    
    但是我的homebrew并没有安装到arm架构Mac的默认路径'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)"
    
    这样才能将安装到“错误”路径的homebrew删除掉

至此,系统清理干净了,下面继续:

  1. 重新安装homebrew,此时可以有三种安装方式:
    4.1. 通过下面命令安装,它可以根据芯片的架构自动安装到正确的路径:
    $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    
    4.2. 网络连接有问题的同学可以使用下面的命令从国内源安装homebrew:
    $ /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
    
    4.3. 通过homebrew官方release下载pkg文件安装,它也能根据芯片架构自动安装到正确的路径:
    在这里插入图片描述
    不过通过pkg安装后,还需要将homebrew添加到PATH,否则无法在terminal中使用brew命令:
    $ export PATH=$PATH:/opt/homebrew/bin
    
  2. 然后就可以使用homebrew重新安装C语言的ta-lib包了,注意必须安装arm64架构的包:
    $ arch -arm64 brew install ta-lib
    
  3. 最后重新安装arm64架构的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'
  • 28
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值