首页 > 编程语言 >python3 番外篇之pyenv安装python遇到的ssl问题

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

时间:2023-10-03 20:26:03浏览次数:37  
标签:安装 openssl python root OpenSSL pyenv ssl 番外篇

  最近在学爬虫,在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

相关文章

  • 第03章 Python的数据结构、函数和文件
    本章讨论Python的内置功能,这些功能本书会用到很多。虽然扩展库,比如pandas和Numpy,使处理大数据集很方便,但它们是和Python的内置数据处理工具一同使用的。我们会从Python最基础的数据结构开始:元组、列表、字典和集合。然后会讨论创建你自己的、可重复使用的Python函数。最后,会学习P......
  • 第02章 Python语法基础,IPython和Jupyter Notebooks
    第2章Python语法基础,IPython和JupyterNotebooks当我在2011年和2012年写作本书的第一版时,可用的学习Python数据分析的资源很少。这部分上是一个鸡和蛋的问题:我们现在使用的库,比如pandas、scikit-learn和statsmodels,那时相对来说并不成熟。2017年,数据科学、数据分析和机器学习的......
  • Python类的内置成员方法 __init__, __new__ 和 __call__
    __init__和__new__这个方法想必大家平常也用的很多,这个方法负责对象的初始化。什么是初始化呢?就是对已经存在的东西赋若干个初始值。所以我们可以知道当我们调用__init__()方法的时候,这个类已经被实例化了。我们可以运行一下如下代码classA():def__new__(cls,*ar......
  • python基本数据类型之布尔类型
    所有数据都自己的布尔值零值:所有数据都有且仅有一个值的bool值为FLASE,该值为此类型的零值。整型和浮点型数据除了0,布尔值为FLASE,其它全是TRUE。(0为整型和浮点型的零值)字符串、列表、字典除了容器中为空,其布尔值为FLASE,其它全为TRUE。("",[],{}分别为字符串、列表、字典的零值)p......
  • 笨办法学Python3 习题16 读写文件
    知识点:a_txt=open(file_a)         #默认只读模式打开文件file_a,赋值变量a_txt,后面好执行读取命令b_txt=open(file_b,"w")      #以write写入模式打开文件file_b,赋值变量b_txt//还有"r"只取模式,"a"追加模式a_txt_r=a_txt.rea......
  • 笨办法学Python3 习题15 读取文件
    知识点:要读取文件内容,需要先执行打开文件命令// 先filetxt=open(filename)  再print(filetxt.read()) //注意文件内容不能有英文外的文字,否则报错 1fromsysimportargv#从系统模块导入到参数变量23script,filename=argv......
  • 笨办法学Python3 习题14
    知识点:int(input(">"))//检验用户输入的值是否为整数1fromsysimportargv#从系统模块导入参数变量2script,user_name=argv#将参数变量解包,依次赋值给左边的变量3prompt=">"#将>符号转换字符串赋值给提示变量4......
  • 笨办法学Python3 习题13 参数 解包 变量
    知识点:fromsysimportargv//把系统模块导入参数变量中解包参数,script,one,two,three 1fromsysimportargv#把系统模块导入参数变量,必须写argv23script,first,second,third=argv#把argv参数变量解包(argv......
  • python小技巧: 对象字段文档注释, 一行分拆多行
    对象字段文档注释python类和函数的文档注释比较常用,只需要在类和函数下面增加'''即可,就可以在引用的地方查看注释内容了.但是对于类的字段,怎么增加注释呢?只需要像下面即可:classTradeRecordData: #H.Read'''一次完整的交易记录.包括买入及卖出''' #H.Readd......
  • PythonOther
    Gitgit是一个分布式的版本控制软件,版本控制最早期是文件的复制粘贴、下一个阶段是集中管理、现在是分布式管理。集中管理是将文件存储到一个地方,优点是解决了共同开发,缺点也很明显就是如果存储的地方出现问题就无法使用了。分布式管理就很好了在网络中的每个点都存储一遍......