Apple M1芯片MacBook Pro使用Python requests库出现segmentation error问题
问题定位步骤
- 确认容器架构:M1芯片设备若运行amd64架构的容器镜像,会通过QEMU转译执行,加密类底层调用极易触发段错误。在容器内执行
uname -m,若返回x86_64则说明当前运行的是转译的非原生架构镜像,为高发故障原因。 - 抓取崩溃调用栈:在容器内安装gdb和Python调试符号包,执行
gdb --args python3 你的脚本路径.py,触发段错误后输入bt打印调用栈,确认崩溃点是否位于openssl的libcrypto.so库或者cryptography的原生扩展模块中。 - 最小复现验证:剥离自研业务逻辑、OAuth1认证逻辑,仅保留导入requests、调用delete方法请求公共HTTPS接口的最小代码,若仍触发段错误即可排除自研代码内存越界的可能性。
解决方案
- 优先更换为arm64架构的Ubuntu 20.04作为容器基础镜像,原生适配M1芯片架构,彻底避免QEMU转译带来的底层调用兼容问题。
- 若必须使用amd64架构镜像,启动容器时添加
--platform linux/amd64参数强制指定架构,同时升级容器内相关依赖:执行pip3 install -U requests cryptography pyopenssl urllib3,修复旧版本依赖与openssl 1.1.1f的适配bug。 - 若升级依赖后故障仍存在,可在代码开头添加环境变量配置,强制加密库使用纯Python实现绕过原生扩展:
import os os.environ['CRYPTOGRAPHY_DONT_BUILD_RUST'] = '1' os.environ['PYOPENSSL_USE_STATIC_LIBS'] = '1'
- 临时验证方案:将requests.delete调用替换为urllib3原生的删除请求逻辑,绕过requests层封装,确认是否为requests版本适配问题。
内容的提问来源于stack exchange,提问作者Samuel Demir
相关产品推荐
相关产品推荐

