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

2024-12-18 08:39:00
admin
原创
235
摘要:问题描述:我已经在本地机器上成功安装了 Python 3.4 和 Python 3.6,但无法使用 安装包pip3。当我执行时pip3 install <package>,我收到以下与 SSL 相关的错误:pip is configured with locations that require ...

问题描述:

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


解决方案 1:

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

  1. 安装 Python 和 ssl 必要的软件包:$ sudo apt-get install build-essential libffi-dev 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 中测试。

解决方案 2:

如果你使用的是 Windows 并且使用 anaconda,那么这对我有用:

我尝试了很多其他解决方案,但都没有用(环境 PATH 变量改变......)

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

修复方法是从https://slproweb.com/products/Win32OpenSSL.html安装 openSSL ,用较新版本替换 dll。

解决方案 3:

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

解决方案 4:

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

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

花了几个小时取消链接 openssl、重新安装、更改路径……但毫无效果。将 openssl 版本从旧版本改回即可解决问题:

brew switch openssl 1.0.2e

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

解决方案 5:

在 Ubuntu 中,这可以帮助:

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

解决方案 6:

同意 mastaBlasta 的回答。对我有用。我遇到了与主题描述相同的问题。

环境:MacOS Sierra。我使用 Homebrew。

我的解决方案:

  1. 通过以下方式重新安装 opensslbrew 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"

解决方案 7:

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

在配置之前列出配置选项当然是一个好主意,甚至使用一些附加选项:

./configure --help

最后但同样重要的一点是,如果您使用 --prefix 作为非默认安装位置,请记住将您的 <python_installation_root>/lib 添加到您的 LD_LIBRARY_PATH 。

解决方案 8:

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

解决方案 9:

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

在安装 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

解决方案 10:

降级 openssl 对我有用,

brew switch openssl 1.0.2s

解决方案 11:

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

使用 brew 安装 opensslbrew install openssl

确保遵循 brew 提供的有关设置CPPFLAGS和的说明LDFLAGS。 在我的例子中,我使用openssl@1.1brew 公式,我需要这 3 个设置才能使 python 构建过程正确链接到我的 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"

假设该库安装在该位置。

解决方案 12:

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

唯一有效的方法是:

  • 卸载 Anaconda

  • 卸载 Python(我使用的是 3.7.3 版本)

  • 再次安装Python(记得勾选自动添加到PATH的选项)

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

不知道为什么,或者这个问题是否与 Anaconda 有关。

解决方案 13:

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

解决方案 14:

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

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

3)import sslexit()

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

到这里,一切就绪了。

解决方案 15:

您可以执行以下任一操作:

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

或者

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

\水蟒

\Anaconda\Library\mingw-w64\bin

\Anaconda\Library/usr\bin

\Anaconda\Library\bin

\Anaconda\脚本

\anaconda\图书馆

\anaconda\condabin

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

解决方案 16:

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

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

解决方案 17:

在使用来管理 Mac OS Catalina 上的 python 安装的情况下pyenv,我必须openssl先使用 brew 安装,然后运行,pyenv install 3.7.8它似乎使用 homebrew 构建了 python 安装openssl(它甚至在安装输出中这样说)。然后pyenv global 3.7.8我就走了。

解决方案 18:

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

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

解决方案 19:

在我使用 Mac 的情况下,我删除了
/Applications/Python 3.7. 因为我已经有了 Python3.7 brew 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 install 失败。

解决方案 20:

我终于解决了这个问题。这些是我的环境的详细信息:

要安装的 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

解决方案 21:

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

升级至版本 3.7.3

解决方案 22:

特尔姆克斯

这是有效的,因为我没有安装现有的 openssl 版本。

pkg install openssl-tool

解决方案 23:

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

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

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

这对我有用;)

解决方案 24:

(不适用于 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.1和替换了它libcrypto.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 等,但最后我很高兴我不需要这样做。

希望这对你们有帮助。

解决方案 25:

在 AWS Linux 上安装 Python 3.11 时,您需要:

sudo yum remove openssl-devel
sudo yum install openssl11-1.1.1g openssl11-libs-1.1.1g openssl11-devel-1.1.1g

然后你就可以运行:

./configure --enable-optimizations
sudo make altinstall

来自https://github.com/actions/setup-python/issues/93的答案,并于 2024 年 1 月验证有效

解决方案 26:

在 macos 上,使用下面的命令配置 python 3.8.1 将解决问题,我认为它在 Linux 上也可以起作用。

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

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

解决方案 27:

我做了一些 PATH 更改来模仿 Anaconda Powershell Prompt 的一部分 $env:PATH

C:UsersmerhebMiniconda3;C:UsersmerhebMiniconda3Librarymingw-w64in;C:UsersmerhebMiniconda3Library/usrin;C:UsersmerhebMiniconda3Libraryin;C:UsersmerhebMiniconda3Scripts;C:UsersmerhebMiniconda3in;C:UsersmerhebMiniconda3condabin;

在此处输入图片描述

它对我有用。

解决方案 28:

在 Ubuntu 22.10 上,从源代码构建对我来说是有效的:

手动安装 OpenSSL,这里使用 OpenSSL 1.1.1s 进行测试,提取然后运行:

./config --prefix='/opt/openssl' --openssldir='/opt/ssl'
make
make install

然后使用旧版本 Python 3(此处为 Python-3.8.16)运行:

export LD_RUN_PATH='/opt/openssl/lib'
export CC='gcc-12'  # sudo apt install gcc-12
./configure --enable-optimizations \n            --with-openssl='/opt/openssl' \n            --prefix='/opt/python/3.8' -C
make
make install

测试:

/opt/python/3.8/bin/python3 -c 'import ssl; print(ssl.OPENSSL_VERSION)'
OpenSSL 1.1.1s  1 Nov 2022

解决方案 29:

我在 centos 7 和 python 3.6 中遇到了这个问题。没有一个答案可以解决这个问题,我终于找到了解决方法。

首先,通过以下链接从源代码安装 openssl:

安装 openssl

之后,ssl 头文件“openssl/ssl.h”位于路径:

/usr/local/openssl/include

ssl lib文件在路径中;

/usr/local/openssl/lib

现在从源代码编译 python。在编译之前,请转到setup.py,找到函数detect_modules(),搜索“ssl”。

将 ssl 包含文件路径添加到以下代码:

        search_for_ssl_incs_in = [
                              '/usr/local/openssl/include'
                             ]

对于lib文件,这里有一个技巧。

代码首先从一些标准系统路径搜索 ssl lib 文件:

lib_dirs: ['/usr/local/lib', '/lib64', '/usr/lib64', '/lib', '/usr/lib']

如果这些文件夹中的任何一个包含 ssl lib 文件,那么它将返回一个空路径,因此编译将跳过 ssl。我不知道这里的逻辑,但我只是从这些路径中删除了 ssl lib 文件。在我的主机中,有libssl.a/lib所以将它移动到子文件夹。

然后在setup.py中指定ssl lib路径:

        ssl_libs = find_library_file(self.compiler, 'ssl',lib_dirs,
                                     [
                                      '/usr/local/openssl/lib'
                                     ] )

编译python:

./configure
make
make install

解决方案 30:

我两天前遇到了同样的问题,现在才修复。

我曾尝试使用--trust-host选项,但DigiCert_High_Assurance_EV_Root_CA.pem没有成功,我无法安装 ssl 模块(它提示无法为 2.6 以上的 Python 版本安装),设置$PIP_CERT变量也没有解决问题,我安装libssl1.0.2了它libssl1.0.0。另外值得一提的是,我没有文件~/.pip/pip.conf,创建它也没有解决这个错误。

最终解决问题的方法是make再次安装 python3.6。从网站下载 Python-3.6.0.tgz,configure然后运行make​​,make test然后make install。希望它对你有用。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用