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

477

我正在使用Python 3.6。当我尝试使用pip3安装“模块”时,我遇到了这个问题:

pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available

4
如果是OS X操作系统:https://dev59.com/aVsW5IYBdhLWcg3wM0yF - ZiTAL
3
操作系统是Oracle Linux 7.x。 - Santosh Kumar G
2
你是否从软件包管理器中安装了pip?如果你是通过编译安装的,那么请先安装libssl-dev或者通过pip安装ssl pip install ssl https://dev59.com/3FgR5IYBdhLWcg3woebW - ZiTAL
74
由于“ssl”的原因,“pip”无法正常工作,你需要使用pip安装“ssl” :) - ramazan polat
3
有没有不需要重新编译或重新安装 Python 的解决方案? - matanster
显示剩余5条评论
44个回答

362

对于Windows 10,如果您想在正常的命令提示符中使用pip,而不仅仅是在Anaconda提示符中,您需要添加3个环境路径。如下所示:

D:\Anaconda3 
D:\Anaconda3\Scripts
D:\Anaconda3\Library\bin 

大多数人只是添加D:\ Anaconda3 \ Scripts


8
谢谢,我已经添加了 D:\Anaconda3\Library\bin 并且它可以工作,顺便说一下,libssl-1_1-x64.dll 文件就在那个文件夹里。(win10x64,python 3.7) - apet
2
环境路径是什么意思?你是指PATH环境变量吗?另外,我在我的D盘中没有这些文件夹,它们应该在我安装Anaconda时创建吗? - Amit Raz
1
仅翻译文本:同时也适用于Windows 8.1。 - Antoine
8
如果没有使用Anaconda,则这种方法无效。我在OSGeo4W64和QGIS 3.10.2安装中遇到了这个问题。将正确的路径添加到PATH变量中并不能解决这个问题(例如:C:\Program Files\QGIS 3.10\apps\Python37\Scripts)。 - CNIDog
1
请注意,您机器上Anaconda的路径可能不同,例如C:\Users\myUsername\Anaconda3 - Renel Chesak
显示剩余9条评论

255

MAC OS

我在Mac OS(Mojave)上遇到了同样的问题,并按照此链接中提到的方法解决了该问题- Openssl issue

  1. 如果您没有Homebrew或不知道什么是Homebrew:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  1. 或者,如果您已经安装了Homebrew:
brew update && brew upgrade
brew uninstall --ignore-dependencies openssl; brew install https://github.com/tebelorg/Tump/releases/download/v1.0.0/openssl.rb

更新: 请注意,我不得不使用--ignore-dependencies标志,因为其他已安装的软件包依赖于OpenSSL。

另外,如果问题是在使用pyenv后引起的,您可以通过使用以下命令来解决:

brew reinstall python

5
安装另一个 Python 版本后,pip 出了问题。这个解决方案帮助我修复了它。 - iMitwe
31
为什么 https://github.com/tebelorg/Tump/releases/download/v1.0.0/openssl.rb 被添加为依赖? :) 我认为它应该被删除,因为它与项目无关且可能存在安全隐患。 - Mark
16
Mojave升级到Catalina后,我遇到了这个问题。只需要运行 brew update && brew upgrade 命令就可以让它再次工作。感谢您的建议! - rustyMagnet
2
不是针对你的回答进行批评,但为了解决我在特定项目中遇到的问题,需要使用brew upgrade(这将全局升级所有依赖项,从而可能导致其他问题),这真的很烦人。 - Rafael Eyng
3
brew update && brew upgrade 确实有效;但如果你和我一样,不要忘记 source ~/.bashrc 或者 source ~/.zshrc - maininformer
显示剩余15条评论

113

对于Debian用户,以下内容可能会有所帮助:

sudo apt install libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev libtk8.6 libgdm-dev libdb4o-cil-dev libpcap-dev

然后进入带有Python 3.X库源代码的文件夹并运行:

./configure
make
sudo make install

10
结果发现Python3.7在Ubuntu 14.04及更早版本中存在一些问题。Python3.7所需的最低SSL包与旧版Ubuntu不兼容。感谢您的编辑 :) - Mehmet Kurtipek
1
@MehmetKurtipek 我的服务器是1404。那么哪个版本的Python是最新的,不会有这个问题呢?我安装了Python 3.7.4,但仍然有同样的问题... - an offer can't refuse
5
这个Python库源代码的文件夹在哪里?我尝试了以下几个路径,但无法在其中任何一个运行"./configure"。 /usr/local/lib/python39.zip /usr/local/lib/python3.9 /usr/local/lib/python3.9/lib-dynload /home/user/.local/lib/python3.9/site-packages /usr/local/lib/python3.9/site-packages - Osvald Laurits
2
太好了,谢谢!我可以建议将libffi<X>添加到此列表中。在运行sudo apt install ...之后,我仍然需要安装libffi7 - S3DEV
5
我遇到了同样的问题,尝试在基于Debian的Raspberry Pi OS上安装Python 3.11.1。Python >= 3.10中的ssl模块需要OpenSSL 1.1.1或更高版本 (https://docs.python.org/3/library/ssl.html#module-ssl)。树莓派仍在运行Stretch(带有OpenSSL 1.1.0)。更新OpenSSL后,我必须使用标志--with-openssl=/path/to/openssl --with-openssl-rpath=auto运行./configure - brainfrozen
显示剩余9条评论

88
我正在使用Windows 10,并安装了Python 3.7的Miniconda 3。
我通过按照这个链接https://github.com/conda/conda/issues/8273解决了这个错误。
具体来说,我将以下文件从C:\Users\<user>\Miniconda3\Library\bin复制到C:\Users\<user>\Miniconda3\DLLs目录中。
  • libcrypto-1_1-x64.dll
  • libcrypto-1_1-x64.pdb
  • libssl-1_1-x64.dll
  • libssl-1_1-x64.pdb
如果你在一个环境中工作,路径将会从 C:\Users\<user>\Miniconda3\envs\<name>\Library\binC:\Users\<user>\Miniconda3\envs\<name>\DLLs

4
可以,感谢您的肯定。我已经在两台机器上成功地安装了Windows 10(Anaconda)。 - Akbar Hussein
3
这个方法对我也有效。我安装了Anaconda而不是Miniconda,但是我没有使用它(或者我以为)。我在vscode中使用.venv新建了一个项目,但在进行安装包时无法安装,直到我按照此方法操作。 - Soenhay
4
太棒了!它对我起作用了!非常感谢,兄弟 ;) - DANIEL ROSAS PEREZ
3
谢谢,这在SQL Server环境和Windows 11上对我有效。 使用相同的登录信息,将文件从C:\ Program Files \ Microsoft SQL Server \ MSSQL15.MSSQLSERVER \ PYTHON_SERVICES \ Library \ bin复制到C:\ Program Files \ Microsoft SQL Server \ MSSQL15.MSSQLSERVER \ PYTHON_SERVICES \ DLLs。 - Abelini
2
只是补充一下。如果您正在使用conda环境,则路径为C:\ Users \ MyUser \ Miniconda3 \ envs <NAME_OF_YOUR_ENV> \ Library \ bin到C:\ Users \ MyUser \ Miniconda3 \ envs <NAME_OF_YOUR_ENV> \ DLLs。 - CoMartel
显示剩余6条评论

60

对于CentOS 7:

安装 OpenSSL:

sudo yum install openssl-devel

现在进入我们提取Python tar文件的Python目录,

运行以下命令:

sudo ./configure
sudo make
sudo make install

这将修复CentOS中的问题...


4
Python 3.8不起作用。还有其他可能的解决方案吗? - yuv
3
我看到了“Package 1:openssl-devel-1.0.2k-25.el7_9.x86_64已经安装并且是最新版本”,因此在我构建Python 3.10.4时它是可用的。 - Lou K
6
无法在RedHat 7.9上运行Python3.10.6。 - hafiz031
9
无法在Centos 7上使用Python3.10.6。 - Mr. Pancho
1
现在有任何修复措施吗?我没有将我的CentOS 7更改为CentOS Stream的选项!@Mr.Pancho - Bosco Tsin
显示剩余7条评论

37

对于未来尝试解决此问题的 Oracle Linux 用户,以下是对我有效的解决方法。首先安装缺失的库:

yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel 
readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

然后进入你的Python3.X库并运行:

make
make install 

1
这个答案很好地解决了我的CentOS 7问题。 - Max
2
这些库是什么?为什么需要它们? - Mohit Motwani
通过互联网进行安全连接需要此操作-例如当您运行“pip install”时。 - limboy
@MohitMotwani - 别管它了... https://www.urbandictionary.com/define.php?term=fuhgeddaboudit - barrypicker
确实,并不是每个人都需要dgdbm或tk-devel库。特别是对于服务器来说。 - mckenzm
在Amazon Linux 2.0.20220912.1镜像中安装Python 3.6.12后,已解决pip3问题。 - trust in ratio

32

macOS, pyenv

如果你的 Python 是通过在 macOS 上使用 homebrew 安装的 pyenv 安装的,那么可能会有一个更新的版本可用,可以解决这个问题:

$ brew update && brew upgrade pyenv

然后重新安装Python版本:

$ pyenv install 3.7.2
pyenv: /Users/luckydonald/.pyenv/versions/3.7.2 already exists
continue with installation? (y/N) 

注意,像这样覆盖现有的Python安装可能会有些不太干净,但在我的情况下它确实起作用了。最好的做法可能是将其删除,然后正确地重新创建。


挽救了局面! - Mezbah
谢谢。这种复杂的垃圾代码让我花了三个小时,这就是为什么我讨厌Python的原因。 - scotty4567
尝试升级npm包,你会喜欢Python做得很对。 - luckydonald
1
openssl@1已经过时了。我用brew将其移除了。我没有意识到有这么多的brew软件包与它相关联。我通过移除和重新安装来纠正了这些问题。我没有意识到一些Python软件包也与同一个brew安装的openssl@1软件包相关联。你的建议解决了我的问题。 - undefined

19

10
我知道正确的答案,如果您想在普通的命令提示符中使用pip,而不是Anaconda prompt,您需要添加3个环境变量路径,就像这样: D:\Anaconda3; D:\Anaconda3\Scripts; D:\Anaconda3\Library\bin现在只添加Scripts路径! - 无名小路
1
@无名小路 不是!路径看起来没问题,但那不是正确答案。在添加了你的路径并让pip工作后,它会将包安装到一个不确定的位置!! 继续使用conda提示符是正确答案。 - H.C.Chen
对我没有用... - Antoine

19

对我有用。

sudo apt-get install libssl-dev

使用此选项可为pip启用SSL。如果有人遇到问题,请告诉我。


在CentOS 7上对Python 3.11没有帮助。 - Paul

11

在Ubuntu上从源代码安装Python 3.8时,遇到了这个问题。要成功地与默认的Python 3.7一起安装它,需要执行以下步骤:

sudo apt -y install libssl-dev zlib1g-dev build-essential

wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz
tar -xf Python-3.8.0.tgz
cd Python-3.8.0/

./configure --enable-optimizations
make
sudo make altinstall

zlib1g-devbuild-essential 的安装指令是多余的,因为Ubuntu桌面版已经包含这些,但某些Amazon's EC2实例需要这些软件。目前最新的Python版本是3.8.0,但应该替换为可用的最新版本。

这些指令最适合将Python 3.7保留为python3的默认版本,并在虚拟环境中运行Python 3.8。


除了“make”步骤出现错误(我甚至不确定是否需要),这个答案解决了我的问题,即如何在树莓派上让Python 3.11的pip工作。谢谢。 - David Arno

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