You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux aarch64架构下scikit-learn导入失败问题求助

解决aarch64架构下conda环境中scikit-learn静态TLS内存分配错误

问题现象

在Linux aarch64架构的miniconda3虚拟环境中,通过pip install scikit-learn安装scikit-learn后,导入librosa时触发如下错误:

>>> import librosa
Traceback (most recent call last):
  File "/home/su/miniconda3/envs/acousticpdev/lib/python3.10/site-packages/sklearn/__check_build/__init__.py", line 48, in <module>
    from ._check_build import check_build  # noqa
ImportError: /home/su/miniconda3/envs/acousticpdev/lib/python3.10/site-packages/sklearn/__check_build/../../scikit_learn.libs/libgomp-d22c30c5.so.1.0.0: cannot allocate memory in static TLS block

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/su/miniconda3/envs/acousticpdev/lib/python3.10/site-packages/librosa/__init__.py", line 211, in <module>
    from . import decompose
  File "/home/su/miniconda3/envs/acousticpdev/lib/python3.10/site-packages/librosa/decompose.py", line 19, in <module>
    import sklearn.decomposition
  File "/home/su/miniconda3/envs/acousticpdev/lib/python3.10/site-packages/sklearn/__init__.py", line 81, in <module>
    from . import __check_build  # noqa: F401
  File "/home/su/miniconda3/envs/acousticpdev/lib/python3.10/site-packages/sklearn/__check_build/__init__.py", line 50, in <module>
    raise_build_error(e)
  File "/home/su/miniconda3/envs/acousticpdev/lib/python3.10/site-packages/sklearn/__check_build/__init__.py", line 31, in raise_build_error
    raise ImportError(
ImportError: /home/su/miniconda3/envs/acousticpdev/lib/python3.10/site-packages/sklearn/__check_build/../../scikit_learn.libs/libgomp-d22c30c5.so.1.0.0: cannot allocate memory in static TLS block
___________________________________________________________________________
Contents of /home/su/miniconda3/envs/acousticpdev/lib/python3.10/site-packages/sklearn/__check_build:
__pycache__               __init__.py               setup.py
_check_build.cpython-310-aarch64-linux-gnu.so
___________________________________________________________________________
It seems that scikit-learn has not been built correctly.

If you have installed scikit-learn from source, please do not forget
to build the package before using it: run `python setup.py install` or
`make` in the source directory.

If you have used an installer, please check that it is suited for your
Python version, your operating system and your platform.

尝试降级scikit-image到0.17.2后,立即导入librosa和scikit-learn正常,但退出Python后再次导入又出现相同错误。

环境背景

  • 系统架构:Linux aarch64
  • 虚拟环境:miniconda3(Python 3.10)
  • 已安装关键包版本:scikit-learn 1.1.2、librosa 0.9.2、scikit-image 0.19.3
  • 曾用pyenv创建过非conda环境,相关配置已写入~/.bashrc

解决方案

1. 改用conda安装scikit-learn(优先推荐)

conda针对aarch64架构提供了预编译的优化包,能避免pip编译时的TLS参数问题:

# 卸载pip安装的scikit-learn
pip uninstall -y scikit-learn
# 用conda安装对应版本
conda install scikit-learn=1.1.2

2. 调整静态TLS内存分配环境变量

如果必须使用pip安装的scikit-learn,可通过环境变量调整TLS内存分配:

# 临时生效:启动Python前执行该命令
export LD_PRELOAD=/home/su/miniconda3/envs/acousticpdev/lib/python3.10/site-packages/scikit_learn.libs/libgomp-d22c30c5.so.1.0.0

# 永久生效:将命令添加到conda环境的激活脚本中
echo 'export LD_PRELOAD=/home/su/miniconda3/envs/acousticpdev/lib/python3.10/site-packages/scikit_learn.libs/libgomp-d22c30c5.so.1.0.0' >> /home/su/miniconda3/envs/acousticpdev/etc/conda/activate.d/env_vars.sh

或者调整TLS预留大小:

export MALLOC_TLS_PAD_OLD=0x4000

3. 隔离conda环境与pyenv的干扰

pyenv的PATH配置可能导致conda环境加载系统级的libgomp库,引发冲突:

# 编辑~/.bashrc,修改pyenv初始化逻辑,仅在非conda环境加载
sed -i 's/eval "$(pyenv init -)"/if [ -z "$CONDA_PREFIX" ]; then eval "$(pyenv init -)"; fi/' ~/.bashrc
# 重新加载配置
source ~/.bashrc
# 重新激活conda环境
conda activate acousticpdev

4. 重建干净的conda环境

若以上方法无效,彻底清理旧环境,新建纯净环境避免依赖冲突:

conda deactivate
conda env remove -n acousticpdev
# 创建新环境
conda create -n acousticpdev python=3.10
conda activate acousticpdev
# 优先安装conda维护的包,再用pip补充
conda install scikit-learn librosa numpy scipy
# 按需安装其他pip包
pip install tensorflow keras

问题原因

该错误是aarch64架构下,libgomp(OpenMP库)的静态TLS(线程本地存储)内存块分配不足导致的。pip安装的scikit-learn可能使用了未针对aarch64优化的编译参数,而conda预编译包则调整了相关参数;同时pyenv的环境变量可能导致conda环境加载了系统级的libgomp,引发库冲突。

内容的提问来源于stack exchange,提问作者Susan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 07:36:32