Apple Mac Book Pro M1 Chip segmentation Error when using python 请求库
Apple Mac Book Pro M1 Chip segmentation Error when using python requests library
硬件:
- Apple Mac 配备 M1 芯片的 Book Pro
- Mac OS BigSur 11.6
问题:
长话短说!
我开始在我的 python 模块中开发连接休息 api 使用 python 请求库 通过 OAuth1 与之交互。
我正在使用 docker 容器进行本地开发。
- Ubuntu 20.04
- Python 3.8.x
- openssl 1.1.1f
当我在我的代码中 运行 一个 requests.delete 命令时,它总是返回一个分段错误 (SIGSEGV)。
致命 Python 错误:分段错误
经过大量调试和搜索此问题后,我发现错误发生在 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 容器(具有错误依赖关系的代码)。
我遇到了同样的问题,可以用你的方案解决。
我在 Docker 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/
硬件:
- Apple Mac 配备 M1 芯片的 Book Pro
- Mac OS BigSur 11.6
问题:
长话短说!
我开始在我的 python 模块中开发连接休息 api 使用 python 请求库 通过 OAuth1 与之交互。
我正在使用 docker 容器进行本地开发。
- Ubuntu 20.04
- Python 3.8.x
- openssl 1.1.1f
当我在我的代码中 运行 一个 requests.delete 命令时,它总是返回一个分段错误 (SIGSEGV)。
致命 Python 错误:分段错误
经过大量调试和搜索此问题后,我发现错误发生在 ssl 库 中。这是解决该问题的切入点:
疑难解答:
更新到最新的 Python 版本 3.9 并至少使用 openssl==1.1.1g 版本。
这是如何在 Ubuntu 20.04.
上更新 Python 和 openssl 的 DockerfileFROM 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 容器(具有错误依赖关系的代码)。
我遇到了同样的问题,可以用你的方案解决。
我在 Docker 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/