Apple M1运行Python应用报Symbol not found: _CFRelease错误
问题描述
运行Python应用导入google-cloud-secretmanager依赖时触发导入错误,完整报错栈如下:
Traceback (most recent call last): File "/Users/enchant3dmango/Documents/GitHub/nexus/automation-api/app/main.py", line 4, in <module> from configurations import config # noqa # pylint: disable=unused-import File "/Users/enchant3dmango/Documents/GitHub/nexus/automation-api/app/configurations/config.py", line 7, in <module> from google.cloud import secretmanager File "/Users/enchant3dmango/opt/miniconda3/envs/nexus/lib/python3.9/site-packages/google/cloud/secretmanager.py", line 20, in <module> from google.cloud.secretmanager_v1 import SecretManagerServiceClient File "/Users/enchant3dmango/opt/miniconda3/envs/nexus/lib/python3.9/site-packages/google/cloud/secretmanager_v1/__init__.py", line 24, in <module> from google.cloud.secretmanager_v1.gapic import secret_manager_service_client File "/Users/enchant3dmango/opt/miniconda3/envs/nexus/lib/python3.9/site-packages/google/cloud/secretmanager_v1/gapic/secret_manager_service_client.py", line 25, in <module> import google.api_core.gapic_v1.client_info File "/Users/enchant3dmango/opt/miniconda3/envs/nexus/lib/python3.9/site-packages/google/api_core/gapic_v1/__init__.py", line 18, in <module> from google.api_core.gapic_v1 import config File "/Users/enchant3dmango/opt/miniconda3/envs/nexus/lib/python3.9/site-packages/google/api_core/gapic_v1/config.py", line 23, in <module> import grpc File "/Users/enchant3dmango/opt/miniconda3/envs/nexus/lib/python3.9/site-packages/grpc/__init__.py", line 22, in <module> from grpc import _compression File "/Users/enchant3dmango/opt/miniconda3/envs/nexus/lib/python3.9/site-packages/grpc/_compression.py", line 15, in <module> from grpc._cython import cygrpc ImportError: dlopen(/Users/enchant3dmango/opt/miniconda3/envs/nexus/lib/python3.9/site-packages/grpc/_cython/cygrpc.cpython-39-darwin.so, 2): Symbol not found: _CFRelease Referenced from: /Users/enchant3dmango/opt/miniconda3/envs/nexus/lib/python3.9/site-packages/grpc/_cython/cygrpc.cpython-39-darwin.so Expected in: flat namespace in /Users/enchant3dmango/opt/miniconda3/envs/nexus/lib/python3.9/site-packages/grpc/_cython/cygrpc.cpython-39-darwin.so
运行环境
- 设备:Apple M1芯片Mac
- 环境管理:Conda虚拟环境
- 核心组件版本:
python 3.9.12 pip 21.2.4 setuptools 62.4.0
问题根因
当前环境安装的grpcio二进制包与M1芯片arm64架构不匹配,二进制文件未正确链接macOS CoreFoundation系统框架,动态加载时找不到_CFRelease系统符号,触发导入错误。
常见触发场景:
- 混用conda、pip源安装依赖时,拉取了为x86_64架构编译的旧版grpcio包
- 终端开启Rosetta转译,导致安装的包架构与原生系统环境冲突
- 安装的grpcio版本低于1.43.0,无适配Apple Silicon的正式预编译包
解决步骤
按顺序执行以下操作修复:
- 校验终端运行架构:终端执行
arch,若输出为i386说明开启了Rosetta转译,需关闭终端的Rosetta运行属性,重启终端后重新激活conda环境,确认输出为arm64再执行后续步骤。 - 卸载当前环境内损坏的grpc相关包:
pip uninstall -y grpcio grpcio-tools - 通过conda-forge源安装适配arm64架构的grpcio稳定版,避免pip拉取架构不匹配的预编译包:
conda install -c conda-forge grpcio=1.46.3 grpcio-tools -y - 重新安装项目依赖的
google-cloud-secret-manager包:pip install google-cloud-secret-manager - 若上述步骤执行后仍报错,执行以下命令从源码编译适配当前环境的grpcio:
export GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 export GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1 pip install grpcio --no-binary grpcio --force-reinstall
内容的提问来源于stack exchange,提问作者enchant3dmango
相关产品推荐
相关产品推荐

