警告:pip 配置了需要 TLS/SSL 的位置,但是 Python 中的 ssl 模块不可用

警告:pip 配置了需要 TLS/SSL 的位置,但是 Python 中的 ssl 模块不可用

我使用的是 Kali Linux 2020.1,安装了 Python3.7,然后在尝试使用 pip3 命令安装模块后,我不断收到此错误消息。

  WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
    ERROR: Could not find a version that satisfies the requirement flask (from versions: none)
    ERROR: No matching distribution found for flask

    Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping

答案1

为此,我们必须编译它并安装每个依赖项

  • 有需要的可以下载 https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.x
  • 解压文件
    tar zxvf Python-3.7.0.tar.gz --directory /tmp
    cd /tmp
    
  • 编辑文件Setup.dist以启用 SSL
    cd Python-3.7.0/Modules/
    vi Setup.dist
    
  • 取消注释以下行并更新openssl主页
    SSL=/usr/local/ssl  <--- substitute with your openssl home directory
    _ssl _ssl.c \
            -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
            -L$(SSL)/lib -lssl -lcrypto
    
  • 保存并编译 python 以进行分发
    cd ../
    ./configure --enable-optimizations CFLAGS="-O3" --prefix=/opt/primeur/python3.7
    make
    make install
    
  • 尝试一下

    cd /opt/primeur/python3.7/bin
    [root@myserver bin]# python3
    
    Python 3.7.0 (default, May 5 2020, 22:31:07)
    
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
    
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    
  • pip用命令更新

    [root@myserver bin]#./pip3 install --upgrade pip
    
  • pip3 install使用类似方式安装任何依赖项

    [root@myserver bin]#./pip3 install termcolor
    
    Collecting termcolor
    Using cached https://files.pythonhosted.org/packages/8a/48/a76be51647d0eb9f10e2a4511bf3ffb8cc1e6b14e9e4fab46173aa79f981/termcolor-1.1.0.tar.gz
    Installing collected packages: termcolor
    Running setup.py install for termcolor ... done
    Successfully installed termcolor-1.1.0
    

答案2

我认为您可能无意中安装了所需的东西。该错误看起来与由python 请求库

我会检查它是否已正确安装并且其依赖项是否得到满足。我注意到这python-openssl只是建议的软件包,而不是必需的软件包。您可能想看看安装这个是否有帮助。

Package: python3-requests
Depends: python3-certifi, python3-chardet (<< 3.1.0), python3-idna, python3-urllib3 (<< 1.26), python3:any, ca-certificates, python3-chardet (>= 3.0.2), python3-urllib3 (>= 1.21.1)
Suggests: python3-cryptography, python3-idna (>= 2.5), python3-openssl, python3-socks, python-requests-doc

答案3

这个解决方案对我来说非常有效:

Python 3.7 从源安装的 SSL 问题

谢谢乔希。

我把流程总结一下:


脚步

我决定通过下载最新版本的源代码来再次安装 openSSL。

sudo apt-get install -y wget
mkdir /tmp/openssl
cd /tmp/openssl
wget https://www.openssl.org/source/openssl-1.0.2q.tar.gz
tar xvf openssl-1.0.2q.tar.gz
cd /tmp/openssl/openssl-1.0.2q
./config
make
sudo make install

这里的关键(也是我写这篇文章的原因)是展示如何告诉 Python 新安装的 openSSL 在哪里。默认情况下,您手动安装的 openSSL 将位于/usr/local/ssl.您可以通过检查 ssl 目录的修改时间来确认这一点ls -la /usr/local/ssl

默认情况下,Python 不会查看这里。我们需要解决这个问题。首先,运行 Python 安装脚本的第一部分(如下所示)。

# Install requirements
sudo apt-get install -y build-essential
sudo apt-get install -y checkinstall
sudo apt-get install -y libreadline-gplv2-dev
sudo apt-get install -y libncursesw5-dev
sudo apt-get install -y libssl-dev
sudo apt-get install -y libsqlite3-dev
sudo apt-get install -y tk-dev
sudo apt-get install -y libgdbm-dev
sudo apt-get install -y libc6-dev
sudo apt-get install -y libbz2-dev
sudo apt-get install -y zlib1g-dev
sudo apt-get install -y openssl
sudo apt-get install -y libffi-dev
sudo apt-get install -y python3-dev
sudo apt-get install -y python3-setuptools
sudo apt-get install -y wget
# Prepare to build
mkdir /tmp/Python37
cd /tmp/Python37
# Pull down Python 3.7, build, and install
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
tar xvf Python-3.7.0.tar.xz

现在停止,cd/tmp/Python37/Python-3.7.0并打开文件Modules/Setup.dist

您应该看到以下几行已注释。

# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
SSL=/usr/local/ssl
 _ssl _ssl.c \
    -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
    -L$(SSL)/lib -lssl -lcrypto

您需要做的是取消注释这些行,以便在我们的 Python 编译过程中看到它们。现在您可以通过运行 python 脚本的最后几行来完成。

cd /tmp/Python37/Python-3.7.0
./configure --enable-optimizations
sudo make altinstall

此时,我现在有了一个可以工作的 python 和 pip(映射到我的路径中的 python3.7 和 pip3.7)。

答案4

我试图在基于 Ubuntu 18.04 的 PYNQ 系统上从源代码安装 Python 3.11.4。所有依赖项都已安装,我遇到了上面同样的问题。

原来是OpenSSL版本问题。

  • opensslapt源码中的版本是1.1.0g 。
  • 安装后libssl,libssl-dev,openssl到了1.1.1版本,问题就解决了。

相关内容