python3 番外篇之pyenv安装python遇到的ssl问题

发布时间 2023-10-03 19:58:09作者: 潇湘神剑

  最近在学爬虫,在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模块也没有问题了。