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


122

我已经在本地计算机上成功安装了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>


4
您是否使用命令在ubuntu上显式安装了pip3 sudo apt-get install python3-pip
西达米德(Sidahmed)

2
请尝试pip3 install --upgrade pip看看是否收到相同的消息。
Herry

Answers:


92

在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. 构建并安装: $ sudo make && sudo make install

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


4
在“ Raspbian GNU / Linux 9(拉伸)”上工作
Oktay

2
谢谢!我一直在绕圈子让python3在Ubuntu 14.04上运行,直到找到此命令列表。
jerrylogansquare

2
我的Ubuntu救星。
markroxor

6
这对我有用。非常感谢。我无法绕过一件事,为什么不从第4步开始,仅执行一次“ make; make install”?
亲爱的鸵鸟鸵鸟

1
在Ubuntu Beaver中工作。我使用的是python3.7和pip 19,始终存在SSL问题.....
eduardosufan

61

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

也适用于python 2.7。只需添加make和make altinstall
Jabda '18

如果需要virtualenv,则必须运行sudo /usr/local/bin/pip3.7 install virtualenv。感谢您的回答!
技术专家

太好了,我在为旧版docker映像安装python 2.7.13时遇到问题,需要openssl-devel运行python2.7 get-pip.py
Felipe

58

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

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

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

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


2
我刚刚安装了它。在我的系统上安装的程序列表中,我有三个版本的OpenSSL(两个64位版本和一个32位版本,尽管我使用的是64位系统)。我不知道已经安装了所有它们,所以我把它们留在了那里。
juergi'3

1
经过大量搜索,这是我找到的最直接的解决方案。由于OpenSSL错误,Pip无法正常工作。由于“无法从'urllib.request'导入名称'HTTPSHandler'”错误,Spyder在启动时也崩溃了。这对我来说隔离到Windows 10 python 3。评论希望对帮助谷歌搜索的解决方案有所帮助,大多数最佳结果是古老而又复杂的解决方案。
迪克·麦克马纳斯

8
如果您使用Windows并使用Anaconda,则只需使用Anaconda Prompt而不是cmd即可运行“ pip install”。无需其他DLL / SSL更改。
FatihAkici

1
@FatihAkici-非常感谢。它帮助了我。
Raju Penumatsa

2
我正要破坏我的计算机,在许多机器和操作系统上使用pycharm,但是在这个新的Windows上,我安装了anaconda,看来它破了点子。我浏览了大约2个小时,非常感谢你的队友。<3
Benoit F

34

我在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(Beta)中遇到了同样的问题,现在可以使用了。谢谢!
Peter Rosemann

14
对我来说是brew switch openssl 1.0.2s。就是这样。您救了我,谢谢!
antonio

3
尝试此操作,但它总是告诉我openssl在地窖中没有版本“ 1.0.2e”。openssl在地窖中没有版本“ 1.0.2s”。
James Parker

安东尼奥·詹姆斯:无论您使用的是哪个旧版本。我的酒窖有1.0.2e,所以我用了它。我很高兴它有所帮助。
dsomnus,

4
非常感谢!对我来说,切换到旧版本的openssl工作解决方案是: brew switch openssl 1.0.2t 我在Mac OS Catalina 10.15.3上。希望能帮助到你。
viraj.kulkarni

25

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

环境:MacOS Sierra。我用自制的。

我的解决方案:

  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"

3
谢谢,窍门是brew uninstall openssl, brew install openssl。我尝试brew reinstall openssl了没有效果。但是卸载/安装有效!
Jeff Tian

4
必须运行brew uninstall --ignore-dependencies openssl

16

在Ubuntu中,这可以帮助:

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

4
为什么我们实际上必须为此从源代码构建python?是否没有适用于标准python发行版的解决方案?我会天真地希望在不重写python二进制文件的情况下添加此模块,而该二进制文件不会在未全新安装的实时系统上始终很容易知道对应的源位置。
matanster

尝试过这个,没有做任何更改
号码

9
我收到警告说该选项未被识别
ma3oun 19'-

我必须在这些命令后附加几个“ sudo”,但在其他答案失败的情况下它们却起作用了!
Paco Abato


5

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

在安装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的更多信息


5

如果您在OSX上并且已经从源代码编译了python:

使用brew安装openssl brew install openssl

确保遵循brew给您的有关设置CPPFLAGS和的说明LDFLAGS。就我而言,我使用的是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"

假设库安装在该位置。


仍然是同样的问题
Gaurav Paliwal '18

尝试重新安装点子
mastaBlasta

@ GauravPaliwal,@ mastaBlasta:对我来说,切换到旧版本的 work opensslbrew switch openssl 1.0.2t我在Mac OS Catalina 10.15.3上。希望能帮助到你。
viraj.kulkarni

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

在这里,您都准备好了。


不能解决,但一定可以完成工作。至少可以帮助您安装缺少的部门。我在本地计算机上意识到的是,我的python的PATH变量中有冲突的条目(即Anaconda 2.7 64位和Python 3.7 32位)
AP。

另外,为了改善此答案,您可以将绝对路径存储在变量中,然后将其运行为:cmd /c $py .\main.pyPowershell)或cmd /c %py% .\main.pyDos)。这将在您现有的shell中运行它,并可以编写脚本
AP。

5

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


4

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

唯一有效的是:

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

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

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


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

谢谢您的回答!就我而言,问题是在更新为Catalina(10.15.3)之后开始的,我发现您的第一步brew reinstall python3 --force就足够了:pip此后再次工作,不需要重新安装pip
PLL

3

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

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

要么

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

\ Anaconda

\ Anaconda \ Library \ mingw-w64 \ bin

\ Anaconda \ Library \ usr \ bin

\ Anaconda \ Library \ bin

\ Anaconda \脚本

\ anaconda \ Library

\ anaconda \ condabin

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


1
一种选择是使用特定的“ anaconda提示”,该提示正确设置了这些环境变量。
图拉

2

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

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

2

ssl模块是TLS / SSL包装器,用于访问Operation Sytem(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和OS的库。


1

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

但这是信息的触发

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

我在情况下所做的

  1. 我再次下载了macOS 64位安装程序,并进行了安装。
  2. 双击/Applications/Python3.6/Install Certificates.command/Applications/Python3.6/Update Shell Profile.command
  3. 重新启动Mac
  4. 我不确定但可能对成功有所贡献pip.conf。请参阅pip安装失败

1

我终于解决了这个问题。这些是我的环境的详细信息:
要安装的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.8makemake install.bashrc--enable-optimizations./configure


0

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

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

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


0

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

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

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

这对我有用;)


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在包装盒上(我猜是这样),所以在此之后,一切都坏了。

基本上,不认得我,畅达了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

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

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

希望这可以帮助你们。


0

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


0

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

移至版本3.7.3


-1

最近两天我遇到了同样的问题,现在才解决。

我曾试图使用--trust-host与该选项DigiCert_High_Assurance_EV_Root_CA.pem没有工作,我无法安装SSL模块(它告诉它不能被安装Python版本大于2.6),设置$PIP_CERT可变没修好,要么,我不得不libssl1.0.2libssl1.0.0安装。还值得一提的是,我没有~/.pip/pip.conf文件,创建文件也无法解决该错误。

最终解决问题的是make再次安装了python3.6 。从网站上下载的Python-3.6.0.tgz,跑configure那么makemake testmake install。希望对你有效。


2
抱歉,但是不得不拒绝表决,因为这仅表示重复导致此错误的相同步骤。我不知道您如何期望在相同的python源上运行相同的命令并获得不同的结果!
Jamie Lindsey '18

-1

Python文档实际上是很明确的,按照指示做了,而其他的答案我发现这里并没有解决这个问题的工作。

  1. 首先,使用例如版本3.6.2 https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz从源安装python3.xx。

  2. 确保通过运行安装了openssl brew install openssl

  3. 解压缩并移至python目录: tar xvzf Python-3.6.2.tar.xz && cd Python-3.6.2

  4. 然后,如果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个作业)


j是“作业”的助记符,它是并行运行构建所运行的进程数。至于s标志,它仍然输出警告,但是没有额外的信息/调试级别的噪音。这些标志在python docs说明中使用。
pglaser

-1

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

因此,请尝试清除它们并查看会发生什么情况:

export PKG_CONFIG_PATH=""
export LD_LIBRARY_PATH=""

2
如果他们在这些环境变量中有有用的东西,那实际上会破坏某人的生活
Matanster

-1

好的,对此的最新答案是,截至目前,请勿使用Python 3.8,仅使用3.7或更小版本,因为大多数库由于上述错误而无法安装


据我所知,python使用操作系统的基础软件包。喜欢的东西gccopensslzlib。因此,重要的是要在编译python之前安装这些先决条件,尤其是在Linux上使用时。
斯蒂芬

@ surfer190我使用Windows,但您说的对我来说都可能是正确的
Ujju,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.