我使用的是 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
以启用 SSLcd 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
这个解决方案对我来说非常有效:
谢谢乔希。
我把流程总结一下:
脚步
我决定通过下载最新版本的源代码来再次安装 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版本问题。
openssl
apt源码中的版本是1.1.0g 。- 安装后
libssl
,libssl-dev
,openssl
到了1.1.1版本,问题就解决了。