【问题标题】:Apple Mac Book Pro M1 Chip segmentation Error when using python requests library使用python请求库时Apple Mac Book Pro M1芯片分段错误
【发布时间】:2021-12-04 10:49:33
【问题描述】:

硬件:

  • 配备 M1 芯片的 Apple Mac Book Pro
  • Mac OS BigSur 11.6

问题:

长话短说!

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

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

  • Ubuntu 20.04
  • Python 3.8.x
  • openssl 1.1.1f

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

致命的 Python 错误:分段错误

【问题讨论】:

  • 我已经移动了答案(解决方案),因为 SO 是一个问答网站。如果您愿意,您可以发布您的答案并删除社区答案。下次您可以在显示之前同时发布问题和答案。然后您可以接受答案,如果这是您的答案,那么您必须等待至少 2 天。另见stackoverflow.com/help/self-answer
  • MacOS 附带 Python 和 OpenSSL。使用非 Docker 虚拟环境是否满足您的需求并解决此问题?
  • 是的,在本地工作,而不是使用容器工作。但是没有容器。

标签: python docker python-requests openssl apple-m1


【解决方案1】:

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

疑难解答:

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

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

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

【讨论】:

    【解决方案2】:

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

    我在 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/

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 2022-10-25
    • 2021-04-26
    • 1970-01-01
    • 2021-05-11
    • 2022-08-16
    • 2021-08-13
    • 2021-11-03
    • 2021-04-09
    相关资源
    最近更新 更多