python源码安装关于ssl的坑

python源码安装关于ssl的坑

之所以用源码安装也是因为pip安装依赖的时候出现错误的,很奇特的错误。原本都没有注意到这个问题,如果不是用pipreqs ./导出当前项目的依赖包还不会意识到这个问题。两个项目,同样的环境却一个能成功生成requirements.txt而另一个不行。原因如下:

  1. pipreqs 工具在读取项目导入依赖的时候,映射依赖名称错误导致本地已安装但读取错误,故下载。这让我了解到pipreqs是手动写的映射。
  2. brew安装的python3.5自带的openssl版本过低,在请求下载的过程中被官网拒绝导致下载失败。

原本想重新安装,但是brew只能安装最新版的3.7。由于需要保持线上线下环境一致的问题,所以只能另想办法了。公司大佬推荐了源码安装,这样也方便管理。所以我也就入坑了。
原本按照网上的三步走,一切顺利的进行着,正确安装了,但是在import ssl的时候报错了。查了网上的解决办法如下:

  1. 执行命令:./configure --enable-optinizations --prefix=/usr/local/python3.5/ --with-ensurepip --with-ssl
  2. 修改解压包文件:Modules/Setup.dist文件的207-210行去掉注释

绝大部分都是这两种办法,但是这两种办法没有效果。最终使用的ssl还是最原版系统自带的。我都快绝望了,新环境没有装好,老环境也删除了。

最后抱着试试的态度,直接搜“源码安装python遇到ssl模块找不到的问题”,结果还真找到了一种解决办法

在上文第二步的基础上再修改一个文件,setup.py

# Detect SSL support for the socket module (via _ssl)
        search_for_ssl_incs_in = [
                              '/usr/local/opt/openssl/include',
                              '/usr/local/opt/openssl/include/openssl'# 添加此行,否则可能会报错找不到 rsa.h 文件

上面两行位置是当前系统安装的新版ssl的文件位置。如果地址不对的话,会在make的过程中出现找不到rsa.h的问题。
这个问题解决后还顺带解决了pip安装失败的问题,其实主要也是这个问题导致的。
因为后来手贱把安装好的pip工具又删掉了,虽然简单,也一并记在这里吧:

  1. 复制链接 https://bootstrap.pypa.io/get-pip.py 打开链接并加载完成后复制
  2. 另存一个文件,名为get-pip.py
  3. 执行 python3 get-pip.py

还有其他多种方法,这里就不记了。

写这些也是为了防止遗忘,也希望能帮助到大家。

你可能感兴趣的:(问题记录)