当前位置:   article > 正文

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

symbol not found in flat namespac

终于解决了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'
>>>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

这个问题是由于环境切换到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
    
    • 1
  2. 删除C语言的ta-lib
    $ brew uninstall ta-lib
    
    • 1
  3. 删除homebrew,本来删除正常安装的homebrew应该用下面的命令:
    $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
    
    • 1
    但是我的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)"
    
    • 1
    这样才能将安装到“错误”路径的homebrew删除掉

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

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

如果上面都顺利,现在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'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/598607
推荐阅读
相关标签
  

闽ICP备14008679号