繁体   English   中英

使用 python 请求库时 Apple Mac Book Pro M1 芯片分段错误

[英]Apple Mac Book Pro M1 Chip segmentation Error when using python requests library

硬件:

  • 配备 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 容器(具有错误依赖项的代码)上的相同代码有效。

我希望我能帮助一些人不要花太多时间来调试和搜索这个问题。

最好的问候,并有一个愉快的周末!

我有同样的问题,可以用你的解决方案解决。

我在 Mac M1 上使用 Docker、Flask、Python 和 Requests。

有时在对特定路径发出请求时,我得到:

Fatal Python error: Segmentation fault

Current thread 0x0000ffff9c931b40 (most recent call first):
  File "/usr/local/lib/python3.6/ssl.py", line 642 in write
  File "/usr/local/lib/python3.6/ssl.py", line 944 in send
  File "/usr/local/lib/python3.6/ssl.py", line 975 in sendall
  File "/usr/local/lib/python3.6/http/client.py", line 1006 in send
  File "/usr/local/lib/python3.6/http/client.py", line 1046 in _send_output
  File "/usr/local/lib/python3.6/http/client.py", line 1286 in endheaders
  File "/usr/local/lib/python3.6/http/client.py", line 1337 in _send_request
  File "/usr/local/lib/python3.6/http/client.py", line 1291 in request
  File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 387 in _make_request
  File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 672 in urlopen
  File "/usr/local/lib/python3.6/site-packages/requests/adapters.py", line 449 in send
  File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 646 in send
  File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 533 in request
  File "/usr/local/lib/python3.6/site-packages/requests/api.py", line 60 in request
  File "/usr/local/lib/python3.6/site-packages/requests/api.py", line 116 in post
  File "<stdin>", line 1 in <module>
Segmentation fault

要调试分段错误,请使用:

https://docs.python.org/3/library/faulthandler.html

https://blog.richard.do/2018/03/18/how-to-debug-segmentation-fault-in-python/

我有同样的错误,@eyllanesc 有正确的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM