最新新配置了一台服务器。安装 的时候直接使用了最新的Python 3.7最新版本。

安装成功,编译成功。但是用pip 安装包的时候提示:pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available。

已经习惯了用pip安装各种包,突然不能用,还是非常 不习惯 。果断寻找解决方案。

搜索了一些资料,发现原因是python3.7为了安全性考虑,要求使用openssl 1.0.2之后的版本。但是服务器安装的时候,版本是1.0.1。

openssl是什么东西可以百度一下,其实就是加密传输相关的一些基础库。但是在Linux里面广泛使用。几乎所有的服务器都需要它支持。

可以通过openssl version查看SSL库版本号。

于是想到升级OpenSSL。此处坑来了。yum安装这些基础库最简单快捷,但是包括阿里云最新的yum镜像里面,也是使用的1.0.1的openssl。所以用yum 是无法升级的,需要手动编译。

于是安装最新的1.0.2希望能解决这个问题:

wget http://www.openssl.org/source/openssl-1.0.2j.tar.gz
tar -xzf openssl-1.0.2j.tar.gz
cd openssl-1.0.2j
./config
./config -t
make
make install
openssl version #查看版本

编译成功也能正常使用,但是pip依然不能使用,需要重装Python。于是

wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
tar -xvJf Python-3.7.0.tar.xz
cd Python-3.7.0
./configure --with-ssl --enable-optimizations --with-openssl=/usr/local/openssl
make && make install

还是失败。于是在Make的时候仔细看了一下,发现另有错误信息。

Could not build the ssl module!
Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_host().
LibreSSL 2.6.4 and earlier do not provide the necessary APIs, https://github.com/libressl-portable/portable/issues/381

还是找不到openssl 1.0.2。不知道是不是编译的流程有问题。按理说最简单的包应该没有什么问题。估计问题出在openssl安装好了之后,相关的系统的lib库没有更新。

于是继续搜索了一次。发现如果安装Open SSL 1.0.2。某些程序会报错。还有说安装openssl的时候,安装配置需要改

./config

改为

./config shared zlib

由于要赶时间使用。所以先用了简单方案。换回Python3.6.6使用。

安装方法:

wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz
tar xzf Python-3.6.6.tgz
cd Python-3.6.6
./configure --enable-optimizations

make
make install

然后使用

curl https://bootstrap.pypa.io/get-pip.py | python3

安装pip,之后可以正常使用。

后续又搜索了一下安装和升级Openssl的方法。

1、安装依赖

yum install -y zlib

2、编译和安装

wget http://www.openssl.org/source/openssl-1.0.2j.tar.gz
tar -xzf openssl-1.0.2j.tar.gz
cd openssl-1.0.2j
./config shared zlib

./config -t
make
make install
openssl version #查看版本

mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl

#配置库文件搜索路径
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
ldconfig -v

但是没有进行一波测试。因为线上已经使用python3.6在跑服务了。

理论上应该可行。

另外有意思的是python3.7官方推荐使用LibRessl进行SSL加密传输

https://www.libressl.org/

但是却没有相关的文档 ,怎么编译到python3.7里面。还是说直接安装了就会自动使用libressl,尚未可知。

谨慎安装Python3.7.0,SSL低版本导致Pip无法使用的更多相关文章

  1. centos下安装python3.7.0以上版本时报错ModuleNotFoundError: No module named '_ctypes'

    centos下安装python3.7.0以上版本时报错ModuleNotFoundError: No module named '_ctypes'的解决办法 3.7版本需要一个新的包libffi-de ...

  2. Linux 安装python3.7.0

    我这里使用的时centos7-mini,centos系统本身默认安装有python2.x,版本x根据不同版本系统有所不同,可通过 python --V 或 python --version 查看系统自 ...

  3. Linux下安装Python3.3.0

    Linux下安装Python3.3.0_路易_新浪博客 Linux下安装Python3.3.0 (2013-01-08 11:45:37)

  4. CentOS6.9下手动编译并安装Python3.7.0

    CentOS6.9默认安装的python版本为2.6.6,若想安装python3以上版本,只能手工编译安装 下面介绍Python-3.7.0版本的手动编译并安装的步骤 1.下载Python-3.7.0 ...

  5. Linux非root安装Python3以及解决SSL问题

    说明 接上一篇. [Linux]非root安装Python3及其包管理 上一篇虽然成功安装了Python3及一些常用的模块,但因为一直装不上SSL模块,导致一些包无法安装,尝试了不少方法都失败了(网上 ...

  6. CentOS安装python3.5.0+uwsgi+nginx

    1安装编译工具 yum install zlib-devel bzip2-devel openssl-devel python-devel kernel-devel libffi-devel ncur ...

  7. CentOS7中替换安装python3.7.0

    python3.7的安装包可从官网下载上传到主机,也可以用wget直接下载. [root@xxx ~]# cd /usr/local/src/[root@xxx src]# wget https:// ...

  8. Xcode 5.0 编译低版本app

    Xcode 5.0 默认的编译环境是iOS7,编译出来的app,安装到iOS7.0版本以上的手机上,会表现出iOS7.0的风格.兼容不太好的应用,布局上可能会因此乱八七糟. 如果还不想让app升级到i ...

  9. IOS 实现自定义的导航栏背景以及自定义颜色的状态栏(支持7.0以及低版本)

    为尊重文章原作者,转载务必注明原文地址:http://www.cnblogs.com/wt616/p/3784717.html 先看效果图: 在自定义导航栏背景时,可能会遇到以下一些问题: 1.当设置 ...

随机推荐

  1. C语言中 ln(以自然对数e为底) lg(以十为底) 以及logab(以a为底,b为真数)的相关知识

    总所周知,我们在高中学过对数函数,记作y=logax.下面是百度百科关于对数函数的描述: 对数的定义:一般地,如果ax=N(a>0,且a≠1),那么数x叫做以a为底N的对数,记作x=logaN, ...

  2. HDU 1238 Substing

    思路: 1.找出n个字符串中最短的字符串Str[N] 2.从长到短找Str[N]的子子串 subStr[N],以及subStr[N]的反转字符串strrev(subStr[N]):(从长到短是做剪枝处 ...

  3. easyui扩展数据表格点击加号拓展

    $(function(){ $("#RepaymentInfoTab").datagrid({ view: detailview, detailFormatter:function ...

  4. JNI_Z_08_创建Java对象

    1.步骤 : (1).获取 jclass (2).获取 构造函数的 method id (方法的名称始终为"<init>") (3).创建Java对象的两种方式: (3 ...

  5. TiDB 在摩拜单车的深度实践及应用

    一.业务场景 摩拜单车 2017 年开始将 TiDB 尝试应用到实际业务当中,根据业务的不断发展,TiDB 版本快速迭代,我们将 TiDB 在摩拜单车的使用场景逐渐分为了三个等级: P0 级核心业务: ...

  6. Linux软件安装(二)

    1. 安装软件时,如果依赖的文件是 .so 类型的文件(so文件是谋个文件的小功能模块,如果php.ini中设置的模块引用就是 .so文件) ,这时被依赖的软件要安装完整的软件,一般可以根据 .so ...

  7. python学习笔记(arange函数与linspace函数)

    上一篇提及到matplotlib模块.其中会涉及到numpy模块科学计数 这里总结两个数组生成函数 arange 与 linspace: #!/usr/bin/env python # -*- cod ...

  8. 【LABVIEW到C#】3》String的操作之Match Pattern Funtion.vi

    C#实现如下 using System; using System.Collections.Generic; using System.Text; using System.Text.RegularE ...

  9. Visual对象——WPF

    System.Object        System.Windows.Threading.DispatcherObject                System.Windows.Depende ...

  10. Java实现数组去除重复数据的方法详解

    一.用List集合实现 int[] str = {5, 6, 6, 6, 8, 8, 7,4}; List<Integer> list = new ArrayList<Integer ...