IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 解决pip3安装第三方库无法使用ssl模块的问题 -> 正文阅读

[网络协议]解决pip3安装第三方库无法使用ssl模块的问题

1.问题所在

我在centos7中安装了python3.8,在使用pip3安装一个第三方库的时候出现无法使用ssl的报错。
ssl模块确实在lib/python3.8这个目录下,为什么会报错呢,百度了一下才知道python中要使用ssl需要有openssl作为前置。
一般centos7中都是有openssl模块的,打开centos7自带的python2.7导入ssl发现正常,用python3.8导入却报错。
在这里插入图片描述
在这里插入图片描述
进入python3.8解压后的目录Python-3.8.0/Modules/Setup,编辑Setup文件,去掉下面几行的注释#
在这里插入图片描述

然后百度了解到,在编译安装完之后,执行的make命令虽然成功了,但是也会报出很多模块缺失的提醒。

$ make

... ...

Python build finished successfully!

The necessary bits to build these optional modules were not found:

_bz2 _curses _curses_panel

_dbm _gdbm _lzma

_sqlite3 _ssl _tkinter

readline

To find the necessary bits, look in setup.py in detect_modules() for the module's name.

编译安装目录下的setup.py文件保存着众多模块名,打开此文件搜索_ssl,可以看到是怎么调用ssl的,以下为其文件中ssl部分的代码。

843 # Detect SSL support for the socket module (via _ssl)

844 search_for_ssl_incs_in = [

845 '/usr/local/ssl/include',

846 '/usr/contrib/ssl/include/'

847 ]

848 ssl_incs = find_file('openssl/ssl.h', inc_dirs,

849 search_for_ssl_incs_in

850 )

851 if ssl_incs is not None:

852 krb5_h = find_file('krb5.h', inc_dirs,

853 ['/usr/kerberos/include'])

854 if krb5_h:

855 ssl_incs += krb5_h

856 ssl_libs = find_library_file(self.compiler, 'ssl',lib_dirs,

857 ['/usr/local/ssl/lib',

858 '/usr/contrib/ssl/lib/'

859 ] )

860

861 if (ssl_incs is not None and

862 ssl_libs is not None):

863 exts.append( Extension('_ssl', ['_ssl.c'],

864 include_dirs = ssl_incs,

865 library_dirs = ssl_libs,

866 libraries = ['ssl', 'crypto'],

867 depends = ['socketmodule.h']), )

868 else:

869 missing.append('_ssl')

可以看到,setup.py会在’/usr/local/ssl/include’, ‘/usr/contrib/ssl/include/’ 这两个目录里面搜索’openssl/ssl.h’ 这个头文件,然后会在 ‘/usr/local/ssl/lib’ 和 ‘/usr/contrib/ssl/lib/’ 之中搜索 ssl 的 lib文件,搜索不到,会将_ssl加入missing这个数组里面,然后寻找missing调用的地方。
下面是setup.py中报错时候的输出,很明显,是由于搜索不到ssl.h头文件或者搜索不到lib文件而导致的报错。

313 if missing:

314 print()

315 print("Python build finished successfully!")

316 print("The necessary bits to build these optional modules were not "

317 "found:")

318 print_three_column(missing)

319 print("To find the necessary bits, look in setup.py in"

320 " detect_modules() for the module's name.")

321 print()

很奇怪,明明有openssl模块却找不到ssl.h头文件,然后百度得知,openssl只包含了可执行部分,openssl-devel才包含了头文件、头文件参考、某些库文件等跟开发相关的东西。所以只安装openssl是找不到相应的头文件的。

2.解决方法

执行以下命令,同时安装上述make命令提示缺少的模块以及openssl-devel

yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

执行此命令时又出现了一个问题,yum命令报错了
在这里插入图片描述
这是因为yum采用python作为命令解释器,原来系统自带的python解释器为python2.7,我之前把python软连接给改成3.8的了,导致按python3.8解析2.7的语法出错了,编辑yum文件第一行,加上2.7。#!/usr/bin/python改成#!/usr/bin/python2.7

vim /usr/bin/yum

然后又报错了,还是修改,#! /usr/bin/python改成#! /usr/bin/python2.7

vim /usr/libexec/urlgrabber-ext-down

以上模块全部安装完之后,我删掉了python3.8重新安装编译,然后安装第三方库又报错。
报错信息:ModuleNotFoundError: No module named '_ctypes'
解决方法:yum install libffi-devel
然后在执行一遍make && make install就可以安装第三方库了。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 00:30:35  更:2022-04-01 00:31:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:43:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码