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

时间:2016-12-26 08:27:32

标签: 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>

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

29 个答案:

答案 0 :(得分:52)

在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. 下载并解压缩&#34; Python-3.6.8.tar.xz&#34;从https://www.python.org/ftp/python/进入您的主目录。

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

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

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

答案 1 :(得分:44)

由于在OSX 10.11上安装了memcached,它在3.6之上安装了python 3.7,因此在OSX 10.11上也有类似的问题。

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

花了几个小时取消openssl的链接,重新安装,更改路径..没有任何帮助。将openssl版本从原来的版本更改回旧版本可以达到目的:

brew switch openssl 1.0.2e

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

答案 2 :(得分:43)

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

答案 3 :(得分:13)

如果您在Windows上并使用anaconda ,这对我有用:

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

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

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

答案 4 :(得分:9)

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

环境:MacOS Sierra。我使用Homebrew。

我的解决方案:

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

答案 5 :(得分: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

How to Install Python 3.6.0 on Ubuntu & LinuxMint

中的更多信息

答案 6 :(得分:6)

降级openssl对我有用,

brew switch openssl 1.0.2s

答案 7 :(得分:5)

在Ubuntu中,这可以帮助:

cd Python-3.6.2
./configure --with-ssl
make
sudo make install

答案 8 :(得分:4)

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

使用brew brew install openssl

安装openssl

请务必按照brew提供的有关设置CPPFLAGSLDFLAGS的说明进行操作。在我的情况下,我使用openssl@1.1 brew公式,我需要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"

假设该库安装在该位置。

答案 9 :(得分:3)

对于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

答案 10 :(得分:3)

我在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)您可以在官方website上再次下载python;

2)导航到"Python 3.7 (64-bit).lnk"所在的目录

3)import sslexit()

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

在这里,您已经准备就绪。

答案 11 :(得分:2)

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

我还将假设您从源代码安装。如果要从二进制文件(即Window .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和操作系统的库。

答案 12 :(得分:2)

我在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模块部件。您还可以通过列出 /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。在没有开发版本的lib的情况下进行安装导致我的情况下缺少系统相关部分。在这种情况下_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

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

./configure --help

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

答案 13 :(得分:2)

如果您在Windows上并使用Anaconda ,则可以尝试在Anaconda Prompt(而不是cmd.exe)中运行“ pip install ...”命令,如用户willliu1995建议的here。对于我来说,这是最快的解决方案,不需要安装其他组件。

答案 14 :(得分:1)

我尝试了很多解决此问题的方法,但都没有解决。我目前在Windows 10上。

唯一起作用的是:

  • 卸载Anaconda
  • 卸载Python(我使用的是3.7.3版)
  • 再次安装Python(请记住选择自动添加到PATH的选项)

然后我已经使用PIP下载了我需要的所有库...并且可以使用!

不知道为什么,或者问题是否与水蟒有关。

答案 15 :(得分:1)

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

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

  1. 找到Anaconda的安装文件夹,并将其添加到环境变量中:

\ Anaconda

\ Anaconda \ Library \ mingw-w64 \ bin

\ Anaconda \ Library \ usr \ bin

\ Anaconda \ Library \ bin

\ Anaconda \脚本

\ anaconda \ Library

\ anaconda \ condabin

答案 16 :(得分:1)

在使用Mac的情况下,我删除了 /Applications/Python 3.7。 因为我已经通过brew install python3拥有了Python3.7。

但这是消息的触发因素

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

我当时的情况

  1. 我再次下载了macOS 64-bit installer,并进行了安装。
  2. 双击/Applications/Python3.6/Install Certificates.command/Applications/Python3.6/Update Shell Profile.command
  3. 重新启动mac
  4. 我不确定pip.conf,但可能对成功有所贡献。参见pip install fails

答案 17 :(得分:1)

我遇到了同样的问题,并且可以通过以下步骤解决:

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

答案 18 :(得分:1)

我终于解决了这个问题。这些是我的环境的细节:
要安装的Python版本:3.6.8
作业系统:Ubuntu 16.04.6 LTS
根访问权限:否

有人建议安装libssl-dev,但对我而言不起作用。我遵循this link,并进行了修复!
简而言之,我下载,提取,构建和安装OpenSSL(openssl-1.1.1b.tar.gz)。然后,我修改.bashrc文件follow this link
接下来,我下载并解压缩Python-3.6.8.tgz。我编辑Modules / Setup.dist来修改SSL路径(#211周围的行)。我做了./configure --prefix=$HOME/opt/python-3.6.8makemake install。最后,我修改了.bashrc。请注意,我没有在--enable-optimizations中包括./configure

答案 19 :(得分:1)

我能够通过更新此文件中的python版本来解决此问题。 pyenv:未安装版本“ 3.6.5”(由/Users/taruntarun/.python-version设置) 尽管我安装了最新版本,但是我的命令仍在使用旧版本3.6.5

移至版本3.7.3

答案 20 :(得分:0)

过去两天我遇到了同样的问题,现在只修好了。

我曾尝试使用--trust-host选项而DigiCert_High_Assurance_EV_Root_CA.pem无法正常工作,我无法安装ssl模块(它告诉它无法安装大于2.6的python版本),设置$PIP_CERT变量也没有修复它,我安装了libssl1.0.2libssl1.0.0。另外值得一提的是,我没有~/.pip/pip.conf文件,创建它也没有解决这个问题。

最终解决了什么,是再次使用make安装python3.6。 从网站下载Python-3.6.0.tgz,运行configure,然后makemake testmake install。希望它适合你。

答案 21 :(得分:0)

在macOS上,使用以下命令配置python 3.8.1将解决该问题,我认为它也可以在Linux上运行。

./configure --enable-optimizations --with-openssl=/usr/local/opt/openssl@1.1/

根据您的系统更改dir参数。

答案 22 :(得分:0)

如果您使用的是OSX,并且其他解决方案对您不起作用(就像我一样)。

您可以尝试卸载python3并升级pip3

brew uninstall --ignore-dependencies python3
pip3 install --upgrade pip   

这对我有用;)

答案 23 :(得分:0)

我在尝试在ubuntu14.04机器上安装python3.7时遇到了同样的问题。 问题是我在PKG_CONFIG_PATH和LD_LIBRARY_PATH中有一些自定义文件夹,这阻止了python构建过程找到系统openssl库。

所以尝试清除它们,看看会发生什么:

select A,B from 
(select A,(
    SELECT count(*) from T1t where a.id >= t.id
) AS rownr from T1 a)X
inner join
(select B,(
    SELECT count(*) from T2 t where a.id >= t.id
) AS rownr from T2 a)Y on X.rownr=Y.rownr

答案 24 :(得分:0)

(不在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.1libcrypto.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

我做出的巨大假设是ssl的yum版本与conda版本相同,因此只要重命名共享库就可以了,而且确实如此。

我的另一个解决方案是重新编译python,重新安装anaconda等,但最后我很高兴我不需要。

希望这可以帮助你们。

答案 25 :(得分:0)

在Mac OS Catalina上使用pyenv管理python安装的情况下,我必须先用brew安装openssl,然后再运行pyenv install 3.7.8,这似乎可以构建python使用自制软件的openssl进行安装(甚至在安装输出中也是如此)。然后pyenv global 3.7.8,我不在了。

答案 26 :(得分:-1)

确定最新的答案,到目前为止,不要使用Python 3.8 ,请仅使用3.7或更少版本,因为大多数库由于上述错误而无法安装

答案 27 :(得分:-1)

python documentation实际上非常清楚,并且按照说明进行了工作,而我在这里找到的其他答案都不能解决此问题。

  1. 首先,使用例如版本3.6.2 https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz

  2. 从源代码安装python 3.x.x
  3. 通过运行brew install openssl

  4. 确保已安装openssl
  5. 将其解压缩并移至python目录:tar xvzf Python-3.6.2.tar.xz && cd Python-3.6.2

  6. 然后如果python版本是<3.7,请运行

CPPFLAGS="-I$(brew --prefix openssl)/include" \ LDFLAGS="-L$(brew --prefix openssl)/lib" \ ./configure --with-pydebug 5.最后,运行make -s -j2-s是静默标志,-j2告诉您的计算机使用2个作业)

答案 28 :(得分:-2)

如果在 Windows 中使用 anaconda,那么我首先解决了这个问题,

conda activate
pip install <lib>

这对我有用。