使用pip3安装软件包时,"Python中的SSL模块不可用"

Har*_*aze 75 python ssl pip

我已成功在本地计算机上安装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>
Run Code Online (Sandbox Code Playgroud)

如何修复我的Python3.x安装,以便我可以安装包pip install <package>

ars*_*sho 71

在Ubuntu中安装Python 3.6和pip3的分步指南

  1. https://www.python.org/下载Python-3.6.1.tar.xz

  2. 解压缩文件并将文件夹保留在主目录中.

  3. 在该目录中打开终端并执行以下命令: $ sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

  4. 这将安装Python 3.6,但pip3可能无法正常工作.使用以下命令安装必要的模块:
    $ ./configure
  5. 现在编写以下内容以重新运行安装: $ sudo make && sudo make install

  6. 现在您可以$ pip3 install package_name使用pip3命令安装软件包.例如:
    $ sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

  • 这对我有用.非常感谢.有一件事我无法解决这个问题,为什么不从第4步开始,只做"make; make install"一次? (5认同)
  • 致力于“Raspbian GNU/Linux 9 (stretch)” (4认同)
  • 谢谢!我一直在圈子里让python3在Ubuntu 14.04上工作,直到找到这个命令列表. (2认同)
  • 我的Ubuntu救星。 (2认同)
  • 这将破坏 Ubuntu &gt; 20.04 中的系统,因为“sudo make install”将尝试覆盖 Ubuntu 20.04 中的默认 python 版本 3.8。尝试“sudo make altinstall” (2认同)
  • 在 Ubuntu 20.04.1 LTS 上为我工作。 (2认同)

The*_*inn 54

如果您使用的是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
Run Code Online (Sandbox Code Playgroud)

  • 如果你需要 virtualenv,你必须运行 sudo /usr/local/bin/pip3.7 install virtualenv。谢谢你的回答! (2认同)
  • 非常好,我在为旧版 docker 映像安装 python 2.7.13 时遇到问题,需要 `openssl-devel` 来运行 `python2.7 get-pip.py` (2认同)

dso*_*nus 45

由于安装了在 3.6 之上安装了 python 3.7 的 memcached,我在 OSX 10.11 上遇到了类似的问题。

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

花了几个小时断开openssl的链接,重新安装,更改路径......没有任何帮助。将 openssl 版本从旧版本更改回旧版本可以解决问题:

brew switch openssl 1.0.2e
Run Code Online (Sandbox Code Playgroud)

我在互联网上的任何地方都没有看到这个建议。希望它为某人服务。

  • 对我来说,它是“brew switch openssl 1.0.2s”。但就是这样。你救了我,谢谢! (15认同)
  • 太感谢了!对我来说,您切换到旧版本“openssl”的解决方案有效:“brew switch openssl 1.0.2t”我使用的是 Mac OS Catalina 10.15.3。希望能帮助到你。 (4认同)
  • 我在 MacOS Catalina 10.5.4(Beta)上也遇到了同样的问题,现在可以了。谢谢你! (3认同)
  • 尝试这个,但它一直告诉我 openssl 在 Cellar 中没有版本“1.0.2e”。openssl 在 Cellar 中没有版本“1.0.2s”。 (3认同)

jue*_*rgi 42

如果您使用Windows并使用anaconda,则对我有用

我尝试了许多其他无效的解决方案(环境PATH变量更改...)

该问题可能是由其他软件放置在Windows \ System32文件夹中的DLL(例如libcrypto-1_1-x64.dll或libssl-1_1-x64.dll或其他)引起的。

该修补程序是从https://slproweb.com/products/Win32OpenSSL.html安装openSSL的,它将dll替换为较新的版本。

  • **如果您在Windows上并使用Anaconda **,只需使用Anaconda Prompt而不是cmd即可运行“ pip install”。**不需要其他DLL / SSL更改。** (3认同)
  • @FatihAkici - 非常感谢。它帮助了我。 (3认同)
  • 我刚刚安装了它。在我的系统上安装的程序列表中,我具有三个版本的OpenSSL(两个64位版本和一个32位版本,尽管我使用的是64位系统)。我不知道已经安装了所有它们,所以我把它们留在了那里。 (2认同)
  • 我正打算破坏我的计算机,在很多机器和操作系统上使用 pycharm,但在这台新的 Windows 上我安装了 anaconda,它似乎破坏了 pip。我浏览了大约两个小时,非常感谢你,伙计。&lt;3 (2认同)

小智 13

同意mastaBlasta的回答.为我工作.我遇到了与主题描述相同的问题.

环境:MacOS Sierra.我使用Homebrew.

我的解决方案

  1. 重新安装openssl brew uninstall openssl, brew install openssl;
  2. 根据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"

  • 必须运行 `brew uninstall --ignore-dependencies openssl` (9认同)
  • 谢谢,诀窍是`brew uninstall openssl,brew install openssl`。我试过`brew重新安装openssl`,但没有效果。但是卸载/安装有效! (3认同)

小智 10

我在 Debian9 上安装 python3.8.5 时遇到了同样的问题。我已经完成了构建,但是当我尝试下载一些模块时,pip3.8 发出以下错误:

pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Run Code Online (Sandbox Code Playgroud)

我已经搜索了我的问题的根源,并发现 python 构建中有一个系统相关的部分,它被系统无关的部分调用。如果缺少 ssl,您只需要打开 python 终端并检查 _ssl 是否存在:

>>> help('modules')
.
.
_sre                enum                pwd                 wave
_ssl                errno               py_compile          weakref
_stat               faulthandler        pyclbr              webbrowser
.
.
Run Code Online (Sandbox Code Playgroud)

如果不是,您的系统相关 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
Run Code Online (Sandbox Code Playgroud)

该问题是由 PengShaw 编写的,因为在构建过程中缺少 libssl-dev。因此,您必须遵循推荐的 python 安装流程。首先安装先决条件,然后构建并安装python。在没有开发版本的库的情况下安装导致我的情况缺少系统相关部分。在这种情况下_ssl。

请注意,Debian 和 CentOS 的 devel 库名称不同,因此请检查网上发布的安装提示是否适合您的特定 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
Run Code Online (Sandbox Code Playgroud)

在配置和 evtl 之前列出配置选项肯定是个好主意。使用一些额外的选项:

./configure --help
Run Code Online (Sandbox Code Playgroud)

最后但并非最不重要的是,如果您将 --prefix 用于非默认安装位置,请记住将您的 <python_installation_root>/lib 添加到您的 LD_LIBRARY_PATH 。

  • 出色的。帮助我们了解如何调试问题、了解根源并正确修复它。 (3认同)

lfe*_*445 7

对于 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
Run Code Online (Sandbox Code Playgroud)


小智 6

问题可能是由于库丢失造成的.

在安装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
Run Code Online (Sandbox Code Playgroud)

有关如何在Ubuntu和LinuxMint上安装Python 3.6.0的更多信息


mas*_*sta 6

如果您使用的是 OSX 并且已经从源代码编译了 python:

使用 brew 安装 openssl brew install openssl

确保按照 brew 为您提供的有关设置CPPFLAGSLDFLAGS. 在我的情况下,我使用openssl@1.1brew 公式,我需要 python 构建过程的这 3 个设置才能正确链接到我的 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"
Run Code Online (Sandbox Code Playgroud)

假设库安装在该位置。


小智 6

在Ubuntu中,这可以帮助:

cd Python-3.6.2
./configure --with-ssl
make
sudo make install
Run Code Online (Sandbox Code Playgroud)

  • 根据 Python 3.9.1 的“./configure --help”,该选项现在称为“--with-openssl”,它应该指向一个目录。在 Ubuntu 中,添加 `--with-openssl=$LD_LIBRARY_PATH` 即可 (8认同)
  • 我收到警告,提示无法识别此选项 (6认同)
  • 为什么我们实际上必须为此从源代码构建python?是否没有适用于标准python发行版的解决方案?我会天真地希望在不重写python二进制文件的情况下添加此模块,而该二进制文件不会在尚未全新安装的实时系统上始终很容易知道对应的源位置。 (4认同)

aym*_*ond 6

您可以执行以下两项操作之一:

  1. 安装 Anaconda 时,选择将Anaconda 添加到路径的选项。

或者

  1. 从 Anaconda 的安装文件夹中找到这些(完整)路径并将它们添加到环境变量中

\水蟒

\Anaconda\Library\mingw-w64\bin

\Anaconda\Library\usr\bin

\Anaconda\Library\bin

\Anaconda\脚本

\anaconda\图书馆

\anaconda\condabin

将上述路径添加到“Path”系统变量中,它应该不再显示错误:)

  • 一种替代方法是使用特定的“anaconda 提示符”,它已正确设置这些环境变量。 (2认同)

Nis*_*ede 6

降级 openssl 对我有用,

brew switch openssl 1.0.2s
Run Code Online (Sandbox Code Playgroud)


Yan*_*ang 5

我在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 ;

2)导航到的目录,其中"Python 3.7 (64-bit).lnk"位于

3)import sslexit()

4)例如输入cmd "Python 3.7 (64-bit).lnk" -m pip install tensorflow

在这里,您都准备好了。


But*_*fly 5

如果您使用的是Windows和使用Anaconda你可以尝试在蟒蛇提示符,而非cmd.exe运行“PIP安装...”命令,为用户willliu1995表明这里。对于我来说,这是最快的解决方案,不需要安装其他组件。


Joã*_*cio 5

我尝试了很多方法来解决这个问题,但都没有解决。我目前使用的是 Windows 10。

唯一有效的是:

  • 卸载蟒蛇
  • 卸载 Python(我使用的是 3.7.3 版)
  • 再次安装Python(记得勾选自动添加到PATH的选项)

然后我使用 PIP 下载了我需要的所有库......并且工作了!

不知道为什么,或者问题是否与 Anaconda 有某种关系。


biz*_*izi 5

ssl模块是一个 TLS/SSL 包装器,用于访问操作系统 (OS) 套接字 ( Lib/ssl.py )。因此,当ssl模块不可用时,很可能您没有安装操作系统 OpenSSL 库,或者在安装 Python 时找不到这些库。假设这是后一种情况(又名:您已经安装了 OpenSSL,但在安装 Python 时它们没有正确链接)。

我还假设您是从源代码安装的。如果您从二进制文件(即:Window .exe 文件)或软件包(Mac .dmg 或 Ubuntu apt)进行安装,则在安装过程中您无能为力。

在配置 python 安装的步骤中,您需要指定 OS OpenSSL 将用于链接的位置:

# python 3.8 beta
./configure --with-openssl="your_OpenSSL root"
Run Code Online (Sandbox Code Playgroud)

那么在哪里可以找到已安装的 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
Run Code Online (Sandbox Code Playgroud)

您的系统可能与我的不同,但正如您在此处看到的,我安装了许多不同的 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
Run Code Online (Sandbox Code Playgroud)
./configure --with-openssl="/usr"
make && make install
Run Code Online (Sandbox Code Playgroud)

您可能需要尝试一些,或者安装一个新的,才能找到适合您的 Python 和操作系统的库。


归档时间:

查看次数:

146868 次

最近记录:

6 年 前