首页 > 解决方案 > 使用 python 请求库时 Apple Mac Book Pro M1 芯片分段错误

问题描述

硬件:

问题:

长话短说修复!

我开始在我的 python 模块中开发,使用python 请求库通过 OAuth1 连接一个 rest api 以与之交互。

我正在使用 docker 容器在本地开发。

当我在我的代码中运行 requests.delete 命令时,它总是返回一个分段错误(SIGSEGV)。

致命的 Python 错误:分段错误

标签: pythondockerpython-requestsopensslapple-m1

解决方案


经过大量调试和搜索此问题后,我发现错误发生在ssl 库中。这是解决该问题的切入点:

疑难解答:

更新到最新的Python 版本 3.9并至少使用openssl==1.1.1g版本。

这是 Dockerfile 如何在 Ubuntu 20.04 上更新 Python 和 openssl。

FROM ubuntu:20.04
RUN apt update
# SET PYTHON 3.9 AS DEFAULT PYTHON VERSION ON UBUNTU
RUN apt install -y software-properties-common
RUN add-apt-repository ppa:deadsnakes/ppa
RUN apt -y install python3.9
RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 1
RUN update-alternatives --config python3
WORKDIR /<your_work_dir>
COPY requirements.txt ./
RUN apt install -y pip \
    && pip install -r requirements.txt
# FROM HERE OPENSSL
RUN apt install -y wget
RUN wget https://www.openssl.org/source/openssl-1.1.1l.tar.gz
RUN tar -zxf openssl-1.1.1l.tar.gz
WORKDIR /<your_work_dir>/openssl-1.1.1l
RUN ./config
RUN make
RUN make install
RUN mv /usr/bin/openssl ~/tmp
RUN ln -s /usr/local/bin/openssl /usr/bin/openssl
RUN ldconfig
ENV LD_LIBRARY_PATH="/usr/local/lib:${LD_LIBRARY_PATH}"

注意:

当通过 M1 芯片创建 docker 容器 ubuntu 实例时,该错误显然发生在该实例上。在 Windows 机器上检查 Windows 创建的 docker 容器(具有错误依赖项的代码)上的相同代码是有效的。


推荐阅读