python - 使用 python 请求库时 Apple Mac Book Pro M1 芯片分段错误
问题描述
硬件:
- 配备 M1 芯片的 Apple Mac Book Pro
- Mac 操作系统 BigSur 11.6
问题:
长话短说修复!
我开始在我的 python 模块中开发,使用python 请求库通过 OAuth1 连接一个 rest api 以与之交互。
我正在使用 docker 容器在本地开发。
- Ubuntu 20.04
- Python 3.8.x
- openssl 1.1.1f
当我在我的代码中运行 requests.delete 命令时,它总是返回一个分段错误(SIGSEGV)。
致命的 Python 错误:分段错误
解决方案
经过大量调试和搜索此问题后,我发现错误发生在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 容器(具有错误依赖项的代码)上的相同代码是有效的。
推荐阅读
- c# - 如何在对 Web API 的 http 发布请求中将长破折号(—)作为字符串数据的一部分发布
- java - 如何翻转列表
- 到地图
- >
- 到地图
- cmake - 在构建 add_subdirectory(B) 之前安装 add_subdirectory(A) 头文件
- c++ - 如何从 Catch2 测试用例中访问自定义命令行选项?
- pointers - 指向参数数组目标的 Fortran 指针
- swift - 如何将数组传递给 Swift 中可变参数的函数?
- python - 你如何将第一个有效值向左移动?
- python - 如何巧妙地分块读取大文件?
- android - 如何修复 CameraX 旋转支持
- mongodb - 有效使用redis和mongo进行分层列表api