转 Python3 ssl模块不可用的问题
编译安装完Python3之后,使用pip来安装python库,发现了如下报错:
$ pip install numpy
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Collecting numpy
Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)': /simple/numpy/
Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)': /simple/numpy/
Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)': /simple/numpy/
Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)': /simple/numpy/
Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)': /simple/numpy/
Could not fetch URL https://pypi.python.org/simple/numpy/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.python.org', port=443): Max retries exceeded with url: /simple/numpy/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)) - skipping
Could not find a version that satisfies the requirement numpy (from versions: )
No matching distribution found for numpy
网上说了一种解决方案,是在./configure 的时候,加上--with-ssl选项,然后重新编译安装,尝试了下:
$ ./configure --with-ssl
... ...
configure: WARNING: unrecognized options: --with-ssl
... ...
出了个警告:不可识别的--with-ssl选项。
./configure --help看了下确实也没发现这个选项,估计是版本不一致,不大想折腾这个版本问题了,决定换个思路。
尝试安装openssl:
$ sudo yum install openssl
安装成功之后,重新编译安装,依旧报这个错,但是在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.
可以看到,这里虽然make成功了,但是报了很多模块缺失,查看下编译安装目录下的setup.py,搜索_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调用的地方:
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()
找到了上面报错时候的输出,很明显,是由于搜索不到ssl.h头文件或者搜索不到lib文件而导致的报错,但是我刚刚明明是装了openssl的啊,为啥还会报找不到呢?手动搜索下:
$ sudo find / -name ssl.h
没找到ssl.h,折腾了一番之后,找到了如下命令:
$ sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
可以看到,这个命令安装的是openssl-devel,与我之前安装的openssl有所不同,查阅资料之后发现,openssl只包含了可执行部分,openssl-devel才包含了头文件、头文件参考、某些库文件等跟开发相关的东西。所以只安装openssl是找不到相应的头文件的,安装完之后,再次编译:
$ make clean
$ make
... ...
Python build finished successfully!
The necessary bits to build these optional modules were not found:
_dbm _gdbm _lzma
To find the necessary bits, look in setup.py in detect_modules() for the module's name.
果然发现,缺失的模块少了很多。
继续安装:
$ sudo make install
安装完之后,重新执行pip:
$ pip install numpy
Collecting numpy
Downloading https://files.pythonhosted.org/packages/68/1e/116ad560de97694e2d0c1843a7a0075cc9f49e922454d32f49a80eb6f1f2/numpy-1.14.5-cp36-cp36m-manylinux1_x86_64.whl (12.2MB)
6% |██ | 747kB 10kB/s eta 0:17:52
至此,pip安装报错的问题解决。
https://www.cnblogs.com/minglee/p/9232673.html
转 Python3 ssl模块不可用的问题的更多相关文章
- Python3 ssl模块不可用的问题
编译安装完Python3之后,使用pip来安装python库,发现了如下报错: $ pip install numpy pip is configured with locations that re ...
- Python升级后ssl模块不可用问题解决和浅析
在Cent0S 7.5下将Python 2.7.5升级到Python 3.6.6后,发现ssl模块不可用,具体详细信息如下所示: [root@db-server ~]# pip list Packag ...
- Python3中无法导入ssl模块的解决办法
这个问题,已经困扰我好几天了,本萌新刚开始接触python,想爬取几个网页试试,发现urllib无法识别https,百度后才知道要导入ssl模块,可是发现又报错了. 本人实在无法理解为什么会报错,因为 ...
- ubuntu下安装python3.6.5导入ssl模块失败
1.问题 python安装完毕后,提示找不到ssl模块: [root@localhost ~]# python3 Python ( , ::) [GCC (Red Hat -)] on linux2 ...
- Python3编译安装ssl模块问题
本文以Centos系统为例 1.确保linux系统中安装了ssl-devel包 2.编译安装ssl模块到Python3中 1.查看linux系统中是否安装了ssl-devel包 # 查看命令 rpm ...
- pip命令出现了问题,提示说找不到ssl模块
Could not find a version that satisfies the requirement pygame (from versions: ) No matching distrib ...
- [转]python3之模块psutil系统性能信息
转自:https://www.cnblogs.com/zhangxinqi/p/9106265.html 阅读目录 1.psutil模块安装 2.获取CPU信息 3.内存信息 4.磁盘信息 5.网络信 ...
- 解决centos6系统上python3—flask模块的安装问题
Flask 是一个使用 Python 编写的轻量级 Web 框架(所以我们前面花了那么多时间安装 Python3 呀).它被称为微型架构,因为其使用非常简单的核心以及功能丰富的扩展.虽然 Flask ...
- python安装完毕后,提示找不到ssl模块的解决步骤
转载自 醇酒醉影 python安装完毕后,提示找不到ssl模块: [root@localhost ~]# python2.7.5 Python 2.7.5 (default, Jun 3 2013, ...
随机推荐
- Java基础 try...catch...catch 使用Exception,去捕获其子类异常
JDK :OpenJDK-11 OS :CentOS 7.6.1810 IDE :Eclipse 2019‑03 typesetting :Markdown code ...
- LC 968. Binary Tree Cameras
Given a binary tree, we install cameras on the nodes of the tree. Each camera at a node can monitor ...
- 移动端播放直播流(video.js 播放 m3u8 流)
流媒体服务器: wowza 流媒体格式: m3u8 播放端:移动端网页(Android.IOS) 播放工具: video.js 代码如下: <!DOCTYPE html> <html ...
- Git安装和使用(Windows)
Git介绍 分布式:Git版本控制系统是一个分布式的系统,是用来保存工程源代码历史状态的命令行工具. 保存点:Git的保存点可以追踪源码中的文件, 并能得到某一个时间点上的整个工程项目的状态:可以在该 ...
- 【Java语言特性学习之一】设计模式
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...
- sort_buffer_size, Sort_merge_passes关系
对于事务性工作负载是通常最快这个大小设置为32K,并且也是允许的最小尺寸.您应该谨慎使用它设置为较大的值,因为这可以很容易地降低性能. 如果所有的数据进行排序不适合在指定缓冲区大小的MySQL第一种类 ...
- Mysql数据库索引IS NUll ,IS NOT NUll ,!= 是否走索引
声明在前面 总结就是 不能单纯说 走和不走,需要看数据库版本,数据量等 ,希望不要引起大家的误会,也不要被标题党误导了. 1 数据库版本: 2 建表语句 CREATE TABLE s1 ( id IN ...
- [转载] - Entity Framework 性能优化建议
1.对象管理机制-复杂为更好的管理模型对象,EF提供了一套内部管理机制和跟踪对象的状态,保存对象一致性,使用方便,但是性能有所降低. 2.执行机制-高度封装在EF中,所有的查询表达式都会经过语法分析. ...
- JAVAWEB实现增删查改(图书信息管理)之添加功能实现
addBooks.jsp页面代码:↓ <%-- Created by IntelliJ IDEA. User: NFS Date: 2019-7-12 Time: 14:30 To change ...
- mysql 字符
只适用mysql5.0以上的版本: 1.一个汉字占多少长度与编码有关: UTF-8:一个汉字=3个字节 GBK:一个汉字=2个字节 2.varchar(n)表示n ...