使用pip3安装软件包时出现“Python中的ssl模块不可用”的错误。

221

我已经成功在本地安装了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>安装软件包?

6
你是否使用命令 sudo apt-get install python3-pip 在 Ubuntu 上明确安装了 pip3? - Sidahmed
3
请尝试运行 pip3 install --upgrade pip 命令,查看是否会得到相同的提示信息。 - Herry
@Herry 由于之前的错误无法运行该命令。 - Mike Q
我使用Anaconda解决了这个问题:conda install -c anaconda openssl - Emmanuel Chamilakis
33个回答

169

逐步指南:在Ubuntu中安装Python 3.6和pip3

  1. 安装Python和ssl所需的必要软件包:$ sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

  2. https://www.python.org/ftp/python/ 下载并解压缩“Python-3.6.8.tar.xz”文件到您的主目录。

  3. 在该目录中打开终端并运行:$ ./configure

  4. 构建和安装:$ make && sudo make install

  5. 使用以下命令安装软件包:$ pip3 install package_name

免责声明:上述命令未在Ubuntu 20.04 LTS中测试过。


4
曾参与“Raspbian GNU/Linux 9 (stretch)”的开发。 - Oktay
2
谢谢!我在Ubuntu 14.04上一直在困惑如何让Python3正常工作,直到我找到了这个命令列表。 - jerrylogansquare
2
我的Ubuntu救星。 - markroxor
6
这对我很有效。非常感谢。有一件事情我无法理解,为什么不先从第四步开始,然后只执行“make; make install”一次呢? - Paraphiliac Ostrich
4
这会导致您的Ubuntu系统> 20.04崩溃,因为“sudo make install”将尝试覆盖Ubuntu 20.04中默认的Python版本3.8。请尝试改用“sudo make altinstall”。 - aafirvida
显示剩余15条评论

117

如果你正在使用 Windows 并使用 anaconda,我用以下方法解决了这个问题:

我尝试了许多其他方案,但都没有起作用(例如更改环境 PATH 变量...)。

这个问题可能是由 Windows\System32 文件夹中的 DLL(例如 libcrypto-1_1-x64.dll 或 libssl-1_1-x64.dll 等)造成的,这些 DLL 是由其他软件放置在那里的。

解决方法是从 https://slproweb.com/products/Win32OpenSSL.html 安装 openSSL,它可以替换掉较旧版本的 dlls。


2
我刚刚安装了它。在我系统安装的程序列表中,我有三个版本的OpenSSL(两个64位版本和一个32位版本,尽管我使用的是64位系统)。我不知道是否安装了所有这些版本,所以我把它们留在那里。 - juergi
30
如果您使用的是Windows并且使用Anaconda,则只需使用Anaconda Prompt而不是cmd运行“pip install”。不需要进行任何额外的DLL/SSL更改。 - FatihAkici
3
谢谢你,这对我有帮助。 - Raju Penumatsa
3
我差点摔坏了我的电脑,使用了PyCharm在许多机器和操作系统上,但在这个新的Windows上,我安装了Anaconda,似乎它破坏了pip。我浏览了大约2个小时,非常感谢你,伙计。 <3 - Benoit F
1
你的回答解决了我的系统问题!!! 谢谢! - Elbert Villarreal
显示剩余12条评论

84

如果您使用的是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

2
如果您需要virtualenv,您必须运行sudo /usr/local/bin/pip3.7 install virtualenv。谢谢您的答案! - technocrat
2
太好了,我在为一个传统的Docker镜像安装Python 2.7.13时遇到了麻烦,需要安装openssl-devel才能运行python2.7 get-pip.py - Felipe
安装了openssl-devel,然后再次运行configure和make,最后执行make install。一切都很顺利! - Alfabravo
安装openssl-devel,然后重新配置/重建/重新安装Python解决了我的问题。 - konchy
这里不是缺少了 make 命令吗?(我认为建议使用 ./configure --enable-optimizations。) - user76284
显示剩余2条评论

52

我在OSX 10.11上遇到了类似的问题,原因是安装了memcached,它在3.6之上安装了python 3.7。

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

花了很多时间取消链接openssl,重新安装,更改路径...都没有帮助。将openssl版本改回较旧的版本就解决了问题:

brew switch openssl 1.0.2e

我在互联网上没有看到这个建议。希望它能帮助某些人。


3
我曾经在MacOS Catalina 10.5.4(测试版)中遇到同样的问题,现在它能正常工作了。谢谢! - Peter Rosemann
16
对我来说,解决方法是brew switch openssl 1.0.2s。但就这样解决了。你救了我,谢谢! - antonio
3
尝试这个操作,但是它一直告诉我 Cellar 中的 openssl 没有 "1.0.2e" 或 "1.0.2s" 版本。 - James Parker
Antonio,James:无论你们有什么旧版本,请使用它。我的酒窖有1.0.2e,所以我用了这个版本。很高兴它能帮到你们。 - dsomnus
4
非常感谢!对我来说,你的解决方案是切换到较旧版本的 openssl :brew switch openssl 1.0.2t我使用的是 Mac OS Catalina 10.15.3。希望能够帮到其他人。 - WinkyCharlie
显示剩余3条评论

37
在Ubuntu中,这可以帮助:
cd Python-3.6.2
./configure --with-ssl
make
sudo make install

6
为什么我们实际上必须从源代码构建Python?难道没有适用于标准Python发行版的解决方案吗?我有点天真地希望能够在不覆盖Python二进制文件的情况下添加此模块,这在一个不是全新安装的现有系统上,我们很难知道相应的源代码位置。 - matanster
1
尝试过了,没有改变任何东西。 - usernumber
26
收到一个警告,提示该选项未被识别。 - ma3oun
1
非常感谢,这很有帮助。 - Kirill
7
根据 Python 3.9.1 的 ./configure --help 信息,选项现在被称为 --with-openssl,应该指向一个目录。在 Ubuntu 中,添加 --with-openssl=$LD_LIBRARY_PATH 即可。 - Carlos Roldán
显示剩余2条评论

33

同意mastaBlasta的答案。对我也起了作用。我遇到了与主题描述相同的问题。

环境:MacOS Sierra。我使用Homebrew。

我的解决方案:

  1. Reinstall openssl by brew uninstall openssl; brew install openssl
  2. According to the hints given by Homebrew, do the following:

    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"
    

3
谢谢,诀窍是“brew uninstall openssl, brew install openssl”。我尝试了“brew reinstall openssl”,但没有效果。但是卸载/安装起作用! - Jeff Tian
9
需要运行 brew uninstall --ignore-dependencies openssl 命令进行卸载。 - elad silver

23

我在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。在没有开发版本库的情况下进行安装,在我的情况下导致了缺少系统相关部分。在这种情况下是_ssl。

请注意,Debian和CentOS的开发库名称不同,因此请检查发布在网络上的安装提示是否适合您特定的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 中。


3
太好了。帮助我们理解如何调试问题,找到问题的源头并妥善修复它。 - LittleTiger
即使我已经安装了 Python 3.9,也安装了 SSL 模块,仍然出现错误的原因是什么?请给出详细的解释。 - F.G
在CentOS上,我需要进一步将openssl11/usr/local/openssl11中进行符号链接以匹配Python安装程序的要求,如此处所述:https://stackoverflow.com/a/74293084/536538。 - Marc Maxmeister

12

如果您使用的是 Windows 并使用 Anaconda,建议您尝试在 Anaconda Prompt 中运行 "pip install ..." 命令,而不是 cmd.exe。如用户willliu1995在这里所建议的一样。对我来说,这是最快的解决方案,无需安装其他组件。


10

问题可能是由于缺少库引起的。

在安装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》中获得更多信息。


9

我通过降级 OpenSSL 解决了问题,

brew switch openssl 1.0.2s

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接