最近在学爬虫,在Linux中通过pyenv安装3.9.10,安装时也没有问题,问题就出在安装完requests模块后,引用requests模块报错。
(reptile) root@localhost:/data/reptile# python
Python 3.9.10 (main, Aug 10 2023, 01:32:05)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/root/.pyenv/versions/reptile/lib/python3.9/site-packages/requests/__init__.py", line 43, in <module>
import urllib3
File "/root/.pyenv/versions/reptile/lib/python3.9/site-packages/urllib3/__init__.py", line 41, in <module>
raise ImportError(
ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'OpenSSL 1.1.0g 2 Nov 2017'. See: https://github.com/urllib3/urllib3/issues/2168
>>> import ssl
>>> print(ssl.OPENSSL_VERSION)
OpenSSL 1.1.0g 2 Nov 2017
这个报错明显就是需要升级Linux操作系统的openssl版本啊。然而我操作系统的openssl版本已经升级过了,而且版本还很高:
root@localhost:~# openssl version OpenSSL 3.1.2 1 Aug 2023 (Library: OpenSSL 3.1.2 1 Aug 2023)
并且我在用pyenv安装3.10.4时,还报无法找到_ssl模块,这就恶心了,我的是ubuntu系统,_ssl模块需要的libssl-dev依赖包我也安装了,但是仍然报ssl的错误。
最后,怀疑是pyenv没有指向正确OpenSSL头文件和库。具体解决方法如下,给pyenv指定正确的OpenSSL头文件和库:
vim /root/.bashrc export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)" export LDFLAGS="-L/usr/local/openssl/lib" export CPPFLAGS="-I/usr/local/openssl/include"
source /root/.bashrc # 重新加载一下这个文件。
此时,原来引用requests有问题的3.9.10版本需要卸载重新安装即可。之前没有安装成功的3.10.4再次安装即可成功。引用requests模块也没有问题了。
标签:安装,openssl,python,root,OpenSSL,pyenv,ssl,番外篇 From: https://www.cnblogs.com/zhangzhide/p/17741574.html