pip 安装virtualenv报错如下:

WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1018)'))': /simple/virtualenv/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1018)'))': /simple/virtualenv/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1018)'))': /simple/virtualenv/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1018)'))': /simple/virtualenv/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1018)'))': /simple/virtualenv/
Could not fetch URL https://pypi.org/simple/virtualenv/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/virtualenv/ (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1018)'))) - skipping
ERROR: Could not find a version that satisfies the requirement virtualenv (from versions: none)
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1018)'))) - skipping
ERROR: No matching distribution found for virtualenv

以下是对上述报错信息的分析和解决方法:

一、错误分析

  • SSL 证书验证错误
    • 从报错信息 SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1018)') 可以看出,在尝试通过 HTTPS 连接 pypi.org 时,SSL 证书验证失败。这通常发生在 Python 的 SSL 证书验证机制无法验证 pypi.org 的证书链,可能是因为本地缺少根证书或证书链不完整。

二、解决方法

1. 更新证书存储(Mac)

  • 在 Mac 上,你可以尝试更新系统的证书存储,使用以下命令:
sudo /usr/bin/python3 -m ensurepip --upgrade --default-pip
  • 解释:
    • sudo 用于以管理员权限运行命令。
    • /usr/bin/python3 调用系统的 Python 3 解释器。
    • -m ensurepip 确保 pip 安装。
    • --upgrade --default-pip 升级 pip 到最新版本。

2. 信任证书(临时解决方案)

  • 如果你想暂时绕过 SSL 证书验证(不推荐,因为这会降低安全性),可以在使用 pip 时添加 --trusted-host 参数。例如,安装 virtualenv 时:
pip install virtualenv --trusted-host pypi.org --trusted-host files.pythonhosted.org
  • 解释:
    • --trusted-host pypi.org --trusted-host files.pythonhosted.org 告诉 pip 信任 pypi.orgfiles.pythonhosted.org ,不进行 SSL 证书验证。

3. 检查系统日期和时间

  • 确保你的 Mac 系统的日期和时间设置正确。如果系统日期和时间不正确,可能会导致 SSL 证书验证失败。你可以在系统偏好设置中检查和调整日期和时间。

4. 安装 certifi 包(Python 证书包)

  • 你可以尝试安装 certifi 包,它是一个 Python 包,包含了一组根证书。
pip install certifi

然后,可以将 certifi 的证书添加到 Python 的证书存储中:

python -m certifi
  • 解释:
    • pip install certifi 安装 certifi 包。
    • python -m certifi 会显示 certifi 包中的证书路径,你可以尝试将其配置到 Python 的 SSL 环境中。

5. 检查网络代理和防火墙

  • 如果你在使用网络代理或防火墙,它们可能会干扰 SSL 证书验证。确保代理设置正确,或者暂时关闭代理和防火墙进行测试。

三、修改后的代码示例

  • 以下是一个使用 certifi 包解决问题的示例:
pip install certifi
export SSL_CERT_FILE=$(python -m certifi)
pip install virtualenv
  • 解释:
    • 首先,使用 pip install certifi 安装 certifi 包。
    • 然后,使用 export SSL_CERT_FILE=$(python -m certifi)certifi 的证书路径导出到环境变量 SSL_CERT_FILE 中,让 Python 的 SSL 环境使用 certifi 的证书。
    • 最后,使用 pip install virtualenv 尝试重新安装 virtualenv

四、注意事项

  • 安全问题
    • 绕过 SSL 证书验证(使用 --trusted-host )会使你的连接不安全,容易受到中间人攻击,仅在测试环境或你确认安全的情况下使用。
  • 网络环境
    • 确保你的网络环境稳定,尤其是在使用 pip 进行包安装时,网络连接问题可能导致各种异常。

通过上述方法,你可以尝试解决 SSL 证书验证失败的问题,从而成功安装 virtualenv 或其他 Python 包。如果问题仍然存在,请提供更多的信息,如网络环境、是否使用代理、系统配置等,以便更准确地解决问题。

在解决此类问题时,首先尝试更新系统证书存储或使用 certifi 包,尽量避免使用不安全的 --trusted-host 选项,以确保系统的安全性。

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐