使用 pip3 安装软件包时出现“Python 中的 ssl 模块不可用”
- 2024-12-18 08:39:00
- admin 原创
- 235
问题描述:
我已经在本地机器上成功安装了 Python 3.4 和 Python 3.6,但无法使用 安装包pip3
。
当我执行时pip3 install <package>
,我收到以下与 SSL 相关的错误:
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Collecting <package>
Could not fetch URL https://pypi.python.org/simple/<package>/: There was a problem confirming the ssl certificate: Can't connect to HTTPS URL because the SSL module is not available. - skipping
Could not find a version that satisfies the requirement <package> (from versions: )
No matching distribution found for <package>
我如何修复我的 Python3.x 安装以便能够使用 安装包pip install <package>
?
解决方案 1:
在 Ubuntu 中安装 Python 3.6 和 pip3 的分步指南
安装 Python 和 ssl 必要的软件包:
$ sudo apt-get install build-essential libffi-dev libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
从https://www.python.org/ftp/python/下载并解压“Python-3.6.8.tar.xz”到您的主目录。
在该目录中打开终端并运行:
$ ./configure
构建并安装:
$ make && sudo make install
使用以下方法安装软件包:
$ pip3 install package_name
免责声明:上述命令未在 Ubuntu 20.04 LTS 中测试。
解决方案 2:
如果你使用的是 Windows 并且使用 anaconda,那么这对我有用:
我尝试了很多其他解决方案,但都没有用(环境 PATH 变量改变......)
该问题可能是由其他软件放置于 Windows\System32 文件夹中的 DLL(例如 libcrypto-1_1-x64.dll 或 libssl-1_1-x64.dll 或其他)引起的。
修复方法是从https://slproweb.com/products/Win32OpenSSL.html安装 openSSL ,用较新版本替换 dll。
解决方案 3:
如果你使用的是 Red Hat/CentOS:
# To allow for building python ssl libs
yum install openssl-devel
# Download the source of *any* python version
cd /usr/src
wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz
tar xf Python-3.6.2.tar.xz
cd Python-3.6.2
# Configure the build w/ your installed libraries
./configure
# Install into /usr/local/bin/python3.6, don't overwrite global python bin
make altinstall
解决方案 4:
我在 OSX 10.11 上遇到了类似的问题,因为安装了 memcached,它在 3.6 之上安装了 python 3.7。
警告:pip 配置了需要 TLS/SSL 的位置,但是 Python 中的 ssl 模块不可用。
花了几个小时取消链接 openssl、重新安装、更改路径……但毫无效果。将 openssl 版本从旧版本改回即可解决问题:
brew switch openssl 1.0.2e
我在互联网上没有看到这个建议。希望它能对某些人有用。
解决方案 5:
在 Ubuntu 中,这可以帮助:
cd Python-3.6.2
./configure --with-ssl
make
sudo make install
解决方案 6:
同意 mastaBlasta 的回答。对我有用。我遇到了与主题描述相同的问题。
环境:MacOS Sierra。我使用 Homebrew。
我的解决方案:
通过以下方式重新安装 openssl
brew uninstall openssl; brew install openssl
根据Homebrew给出的提示,进行如下操作:
echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
解决方案 7:
我在 Debian9 上安装 python3.8.5 时遇到了同样的问题。我已经完成了构建,但是当我尝试下载一些模块时,pip3.8 发出了以下错误:
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
我搜索了问题的根源,发现 Python 构建中有一个系统相关部分,它被系统无关部分调用。如果缺少 ssl,你只需要打开 python 终端并检查 _ssl 是否存在:
>>> help('modules')
.
.
_sre enum pwd wave
_ssl errno py_compile weakref
_stat faulthandler pyclbr webbrowser
.
.
如果不是,则表示您的系统依赖的 ssl 模块部分缺失。您也可以通过列出 <python_installation_root>/lib/python3.8/lib-dynload 的内容来检查:
>ls ./lib/python3.8/lib-dynload | grep ssl
_ssl.cpython-38-x86_64-linux-gnu.so
正如 PengShaw 所写,该问题是由于构建过程中缺少 libssl-dev 而引起的。因此,您必须遵循推荐的 Python 安装流程。首先安装先决条件,然后构建并安装 Python。在没有开发版本的 libs 的情况下进行安装导致我的情况缺少系统相关部分。在这种情况下是 _ssl。
请注意,Debian 和 CentOS 的 devel lib 名称不同,因此请检查网络上发布的安装提示是否适合您的特定 Linux 系统类型:
For Debian:
sudo apt install -y libbz2-dev libffi-dev libssl-dev
./configure --enable-optimizations
make
make altinstall
For CentOS:
sudo yum -y install bzip2-devel libffi-devel openssl-devel
./configure --enable-optimizations
make
make altinstall
在配置之前列出配置选项当然是一个好主意,甚至使用一些附加选项:
./configure --help
最后但同样重要的一点是,如果您使用 --prefix 作为非默认安装位置,请记住将您的 <python_installation_root>/lib 添加到您的 LD_LIBRARY_PATH 。
解决方案 8:
如果您在 Windows 上使用 Anaconda,则可以尝试在 Anaconda Prompt 中运行“pip install ...”命令,而不是 cmd.exe,正如用户 willliu1995在此处建议的那样。这对我来说是最快的解决方案,不需要安装其他组件。
解决方案 9:
该问题可能是由于缺少库引起的。
在安装 python 3.6 之前,请确保安装了 python 所需的所有库。
$ sudo apt-get install build-essential checkinstall
$ sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
更多信息请参阅如何在 Ubuntu 和 LinuxMint 上安装 Python 3.6.0
解决方案 10:
降级 openssl 对我有用,
brew switch openssl 1.0.2s
解决方案 11:
如果你使用的是 OSX 并且已经从源代码编译了 Python:
使用 brew 安装 opensslbrew install openssl
确保遵循 brew 提供的有关设置CPPFLAGS
和的说明LDFLAGS
。 在我的例子中,我使用openssl@1.1
brew 公式,我需要这 3 个设置才能使 python 构建过程正确链接到我的 SSL 库:
export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"
export PKG_CONFIG_PATH="/usr/local/opt/openssl@1.1/lib/pkgconfig"
假设该库安装在该位置。
解决方案 12:
我尝试了很多方法来解决这个问题,但都没有解决。我目前使用的是 Windows 10。
唯一有效的方法是:
卸载 Anaconda
卸载 Python(我使用的是 3.7.3 版本)
再次安装Python(记得勾选自动添加到PATH的选项)
然后我使用 PIP 下载了我需要的所有库......并且开始工作!
不知道为什么,或者这个问题是否与 Anaconda 有关。
解决方案 13:
对于 osx brew 用户
我的问题似乎与我的 python 安装有关,通过重新安装 python3 和 pip 很快得到了解决。我认为它是在操作系统更新后开始出现问题,但谁知道呢(此时我在 Mac OS 10.14.6 上)
brew reinstall python3 --force
# setup pip
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py
# installa pkg successfully
pip install pandas
解决方案 14:
我在 Windows 10 上遇到了同样的问题。我的具体问题是由于我安装了 Anaconda。我安装了 Anaconda,在路径下Path/to/Anaconda3/
,出现了python.exe
。因此,我根本没有安装 python,因为 Anaconda 包含 python。当使用 pip 安装软件包时,我发现了同样的错误报告,pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
。
解决方案如下:
1)你可以到官网重新下载python ;
"Python 3.7 (64-bit).lnk"
2)导航到 目录
3)import ssl
和exit()
"Python 3.7 (64-bit).lnk" -m pip install tensorflow
4)例如,输入cmd 。
到这里,一切就绪了。
解决方案 15:
您可以执行以下任一操作:
在安装 Anaconda 时,选择将 Anaconda 添加到路径的选项。
或者
从 Anaconda 安装文件夹中找到这些(完整)路径并将它们添加到环境变量中:
\水蟒
\Anaconda\Library\mingw-w64\bin
\Anaconda\Library/usr\bin
\Anaconda\Library\bin
\Anaconda\脚本
\anaconda\图书馆
\anaconda\condabin
将上述路径添加到“路径”系统变量中,它就不会再显示错误了:)
解决方案 16:
该ssl
模块是用于访问操作系统 (OS) 套接字 ( Lib/ssl.py ) 的 TLS/SSL 包装器。因此,当ssl
模块不可用时,很可能是您没有安装 OS OpenSSL 库,或者在安装 Python 时未找到这些库。假设是后一种情况(也就是说:您已经安装了 OpenSSL,但在安装 Python 时未正确链接它们)。
我还假设您是从源代码安装的。如果您是从二进制文件(即 Windows .exe 文件)或软件包(Mac .dmg 或 Ubuntu apt)安装的,则在安装过程中您能做的事情不多。
在配置 Python 安装的步骤中,您需要指定将使用 OS OpenSSL 进行链接的位置:
# python 3.8 beta
./configure --with-openssl="your_OpenSSL root"
那么您将在哪里找到已安装的 OpenSSL 目录?
# ubuntu
locate ssl.h | grep '/openssl/ssl.h'
/home/user/.linuxbrew/Cellar/openssl/1.0.2r/include/openssl/ssl.h
/home/user/envs/py37/include/openssl/ssl.h
/home/user/miniconda3/envs/py38b3/include/openssl/ssl.h
/home/user/miniconda3/include/openssl/ssl.h
/home/user/miniconda3/pkgs/openssl-1.0.2s-h7b6447c_0/include/openssl/ssl.h
/home/user/miniconda3/pkgs/openssl-1.1.1b-h7b6447c_1/include/openssl/ssl.h
/home/user/miniconda3/pkgs/openssl-1.1.1c-h7b6447c_1/include/openssl/ssl.h
/usr/include/openssl/ssl.h
您的系统可能与我的不同,但正如您在此处看到的,我安装了许多不同的 openssl 库。截至撰写本文时,python 3.8 需要 openssl 1.0.2 或 1.1:
Python 需要与 X509_VERIFY_PARAM_set1_host() 兼容的 OpenSSL 1.0.2 或 1.1 libssl。
因此,您需要验证哪些已安装的库可用于链接,例如
/usr/bin/openssl version
OpenSSL 1.0.2g 1 Mar 2016
./configure --with-openssl="/usr"
make && make install
您可能需要尝试一些,或者安装一个新的,以找到适合您的 Python 和操作系统的库。
解决方案 17:
在使用来管理 Mac OS Catalina 上的 python 安装的情况下pyenv
,我必须openssl
先使用 brew 安装,然后运行,pyenv install 3.7.8
它似乎使用 homebrew 构建了 python 安装openssl
(它甚至在安装输出中这样说)。然后pyenv global 3.7.8
我就走了。
解决方案 18:
我遇到了同样的问题,并能够通过以下步骤解决:
sudo yum install -y libffi-devel
sudo yum install openssl-devel
cd /usr/src
sudo wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tar.xz
sudo tar xf Python-3.7.1.tar.xz
cd Python-3.7.1
sudo ./configure --enable-optimizations
# Install into /usr/local/bin/python3.7, don't overwrite global python bin
sudo make altinstall
根据权限,您可能不需要 sudo。
Results:
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-10.0.1 setuptools-39.0.1
现在应该可以运行
python3.7 -V
和
pip3.7 -V
安装软件包时:
pip3.7 install pandas
或者根据权限,您还可以添加 --user 标志,如下所示:
pip3.7 install pandas --user
解决方案 19:
在我使用 Mac 的情况下,我删除了 /Applications/Python 3.7
. 因为我已经有了 Python3.7 brew install python3
。
但这是信息的触发因素
pip 配置了需要 TLS/SSL 的位置,但是 Python 中的 ssl 模块不可用。
在我的情况下我做了什么
我再次下载了macOS 64 位安装程序并安装。
双击
/Applications/Python3.6/Install Certificates.command
并/Applications/Python3.6/Update Shell Profile.command
。重启 Mac
我不确定但可能有助于成功
pip.conf
。请参阅pip install 失败。
解决方案 20:
我终于解决了这个问题。这些是我的环境的详细信息:
要安装的 Python 版本:3.6.8
操作系统:Ubuntu 16.04.6 LTS
根访问权限:否
有些人建议安装libssl-dev
,但对我来说不起作用。我点击此链接并修复了它!
简而言之,我下载、提取、构建和安装 OpenSSL(openssl-1.1.1b.tar.gz)。然后,我修改.bashrc
文件点击此链接。
接下来,我下载并提取 Python-3.6.8.tgz。我编辑 Modules/Setup.dist 以修改 SSL 路径(#211 附近的行)。我做了./configure --prefix=$HOME/opt/python-3.6.8
,make
和make install
。最后,我修改我的.bashrc
。请注意,我没有包括--enable-optimizations
在内./configure
。
解决方案 21:
我能够通过更新此文件中的 python 版本来解决这个问题。pyenv:未安装版本“3.6.5”(由 /Users/taruntarun/.python-version 设置)虽然我安装了最新版本,但我的命令仍然使用旧版本 3.6.5
升级至版本 3.7.3
解决方案 22:
特尔姆克斯
这是有效的,因为我没有安装现有的 openssl 版本。
pkg install openssl-tool
解决方案 23:
如果您使用的是 OSX,并且其他解决方案对您不起作用(就像我一样)。
你可以尝试卸载python3并升级pip3
brew uninstall --ignore-dependencies python3
pip3 install --upgrade pip
这对我有用;)
解决方案 24:
(不适用于 Windows!)
这让我抓狂了一个星期,所以我希望这能对某人有所帮助
除了重新安装 Anaconda 和/或 Jupyter 之外,我尝试了所有方法。
设置
AWS Linux
手动安装 Anaconda 3-5.3.0
Python3(3.7)在 anaconda 中运行(即
./anaconda3/bin/python
)还有
/usr/bin/python
和/usr/bin/python3
(但由于大部分工作是在 Jupyter 终端中完成的,所以没有使用它们)
使固定
在 Jupyter 的终端中:
cp /usr/lib64/libssl.so.10 ./anaconda3/lib/libssl.so.1.0.0
cp /usr/lib64/libcrypto.so.10 ./anaconda3/lib/libcrypto.so.1.0.0
是什么引发了这一切?
一切都很顺利,直到我尝试conda install conda-forge
我不确定发生了什么,但是 conda 一定已经openssl
在盒子上更新了(我猜)所以在此之后,一切都坏了。
基本上,我不知道,conda 已经更新了 openssl,但以某种方式删除了旧的库并用libssl.so.1.1
和替换了它libcrypto.so.1.1
。
我猜 Python3 被编译来寻找libssl.so.1.0.0
最终,诊断的关键是:
python -c "import ssl; print (ssl.OPENSSL_VERSION)"
给出了线索library "libssl.so.1.0.0" not found
我做出的巨大假设是yum
ssl 的版本与版本相同conda
,因此只需重命名共享对象即可起作用,而且确实如此。
我的另一个解决方案是重新编译 python,重新安装 anaconda 等,但最后我很高兴我不需要这样做。
希望这对你们有帮助。
解决方案 25:
在 AWS Linux 上安装 Python 3.11 时,您需要:
sudo yum remove openssl-devel
sudo yum install openssl11-1.1.1g openssl11-libs-1.1.1g openssl11-devel-1.1.1g
然后你就可以运行:
./configure --enable-optimizations
sudo make altinstall
来自https://github.com/actions/setup-python/issues/93的答案,并于 2024 年 1 月验证有效
解决方案 26:
在 macos 上,使用下面的命令配置 python 3.8.1 将解决问题,我认为它在 Linux 上也可以起作用。
./configure --enable-optimizations --with-openssl=/usr/local/opt/openssl@1.1/
根据您的系统更改 dir 参数。
解决方案 27:
我做了一些 PATH 更改来模仿 Anaconda Powershell Prompt 的一部分 $env:PATH
C:UsersmerhebMiniconda3;C:UsersmerhebMiniconda3Librarymingw-w64in;C:UsersmerhebMiniconda3Library/usrin;C:UsersmerhebMiniconda3Libraryin;C:UsersmerhebMiniconda3Scripts;C:UsersmerhebMiniconda3in;C:UsersmerhebMiniconda3condabin;
它对我有用。
解决方案 28:
在 Ubuntu 22.10 上,从源代码构建对我来说是有效的:
手动安装 OpenSSL,这里使用 OpenSSL 1.1.1s 进行测试,提取然后运行:
./config --prefix='/opt/openssl' --openssldir='/opt/ssl'
make
make install
然后使用旧版本 Python 3(此处为 Python-3.8.16)运行:
export LD_RUN_PATH='/opt/openssl/lib'
export CC='gcc-12' # sudo apt install gcc-12
./configure --enable-optimizations \n --with-openssl='/opt/openssl' \n --prefix='/opt/python/3.8' -C
make
make install
测试:
/opt/python/3.8/bin/python3 -c 'import ssl; print(ssl.OPENSSL_VERSION)'
OpenSSL 1.1.1s 1 Nov 2022
解决方案 29:
我在 centos 7 和 python 3.6 中遇到了这个问题。没有一个答案可以解决这个问题,我终于找到了解决方法。
首先,通过以下链接从源代码安装 openssl:
安装 openssl
之后,ssl 头文件“openssl/ssl.h”位于路径:
/usr/local/openssl/include
ssl lib文件在路径中;
/usr/local/openssl/lib
现在从源代码编译 python。在编译之前,请转到setup.py
,找到函数detect_modules()
,搜索“ssl”。
将 ssl 包含文件路径添加到以下代码:
search_for_ssl_incs_in = [
'/usr/local/openssl/include'
]
对于lib文件,这里有一个技巧。
代码首先从一些标准系统路径搜索 ssl lib 文件:
lib_dirs: ['/usr/local/lib', '/lib64', '/usr/lib64', '/lib', '/usr/lib']
如果这些文件夹中的任何一个包含 ssl lib 文件,那么它将返回一个空路径,因此编译将跳过 ssl。我不知道这里的逻辑,但我只是从这些路径中删除了 ssl lib 文件。在我的主机中,有libssl.a
,/lib
所以将它移动到子文件夹。
然后在setup.py中指定ssl lib路径:
ssl_libs = find_library_file(self.compiler, 'ssl',lib_dirs,
[
'/usr/local/openssl/lib'
] )
编译python:
./configure
make
make install
解决方案 30:
我两天前遇到了同样的问题,现在才修复。
我曾尝试使用--trust-host
选项,但DigiCert_High_Assurance_EV_Root_CA.pem
没有成功,我无法安装 ssl 模块(它提示无法为 2.6 以上的 Python 版本安装),设置$PIP_CERT
变量也没有解决问题,我安装libssl1.0.2
了它libssl1.0.0
。另外值得一提的是,我没有文件~/.pip/pip.conf
,创建它也没有解决这个错误。
最终解决问题的方法是make
再次安装 python3.6。从网站下载 Python-3.6.0.tgz,configure
然后运行make
,make test
然后make install
。希望它对你有用。