You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pip安装pytrec_eval遇ssl.SSLCertVerificationError错误求助

问题描述

在Ubuntu 9.4.0系统的conda环境(Python=3.9)中执行python -m pip install pytrec_eval安装pytrec_eval包时失败,报错如下:

ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate in certificate chain (_ssl.c:1133)

仅该包出现此错误,其他包安装正常,完整错误日志:

Collecting pytrec_eval
  Using cached pytrec_eval-0.5.tar.gz (15 kB)
  Preparing metadata (setup.py): started
  Preparing metadata (setup.py): finished with status 'error'
  error: subprocess-exited-with-error
  
  × python setup.py egg_info did not run successfully.
  │ exit code: 1
  ╰─> [44 lines of output]
      Traceback (most recent call last):
        File "/home/myusername/miniconda3/envs/hipporag-py39/lib/python3.9/urllib/request.py", line 1346, in do_open
          h.request(req.get_method(), req.selector, req.data, headers,
        File "/home/myusername/miniconda3/envs/hipporag-py39/lib/python3.9/http/client.py", line 1285, in request
          self._send_request(method, url, body, headers, encode_chunked)
        File "/home/myusername/miniconda3/envs/hipporag-py39/lib/python3.9/http/client.py", line 1331, in _send_request
          self.endheaders(body, encode_chunked=encode_chunked)
        File "/home/myusername/miniconda3/envs/hipporag-py39/lib/python3.9/http/client.py", line 1280, in endheaders
          self._send_output(message_body, encode_chunked=encode_chunked)
        File "/home/myusername/miniconda3/envs/hipporag-py39/lib/python3.9/http/client.py", line 1040, in _send_output
          self.send(msg)
        File "/home/myusername/miniconda3/envs/hipporag-py39/lib/python3.9/http/client.py", line 980, in send
          self.connect()
        File "/home/myusername/miniconda3/envs/hipporag-py39/lib/python3.9/http/client.py", line 1454, in connect
          self.sock = self._context.wrap_socket(self.sock,
        File "/home/myusername/miniconda3/envs/hipporag-py39/lib/python3.9/ssl.py", line 501, in wrap_socket
          return self.sslsocket_class._create(
        File "/home/myusername/miniconda3/envs/hipporag-py39/lib/python3.9/ssl.py", line 1074, in _create
          self.do_handshake()
        File "/home/myusername/miniconda3/envs/hipporag-py39/lib/python3.9/ssl.py", line 1343, in do_handshake
          self._sslobj.do_handshake()
      ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate in certificate chain (_ssl.c:1133)
      
      During handling of the above exception, another exception occurred:
      
      Traceback (most recent call last):
        File "<string>", line 2, in <module>
        File "<pip-setuptools-caller>", line 34, in <module>
        File "/tmp/pip-install-d8_09f0p/pytrec-eval_ea7e63f86646420cbfc12ae9c46aac88/setup.py", line 27, in <module>
          response = urllib.request.urlopen(REMOTE_TREC_EVAL_URI)
        File "/home/myusername/miniconda3/envs/hipporag-py39/lib/python3.9/urllib/request.py", line 214, in urlopen
          return opener.open(url, data, timeout)
        File "/home/myusername/miniconda3/envs/hipporag-py39/lib/python3.9/urllib/request.py", line 517, in open
          response = self._open(req, data)
        File "/home/myusername/miniconda3/envs/hipporag-py39/lib/python3.9/urllib/request.py", line 534, in _open
          result = self._call_chain(self.handle_open, protocol, protocol +
        File "/home/myusername/miniconda3/envs/hipporag-py39/lib/python3.9/urllib/request.py", line 494, in _call_chain
          result = func(*args)
        File "/home/myusername/miniconda3/envs/hipporag-py39/lib/python3.9/urllib/request.py", line 1389, in https_open
          return self.do_open(http.client.HTTPSConnection, req,
        File "/home/myusername/miniconda3/envs/hipporag-py39/lib/python3.9/urllib/request.py", line 1349, in do_open
          raise URLError(err)
      urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate in certificate chain (_ssl.c:1133)>
      Fetching trec_eval from https://github.com/usnistgov/trec_eval/archive/v9.0.8.tar.gz.
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> See above for output.

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
原因分析

pytrec_eval的setup.py在安装过程中会主动通过urllib请求GitHub上的trec_eval源码包,而你的环境处于使用自签名证书的网络中,urllib默认会严格验证SSL证书,导致请求失败。其他包安装正常是因为它们的安装流程不会触发这种额外的外部请求,或者pip本身已经配置了证书信任。

解决方法

方法1:临时跳过SSL验证安装

在安装时设置环境变量,让Python的urllib跳过SSL证书验证:

export PYTHONHTTPSVERIFY=0 && python -m pip install pytrec_eval

安装完成后可取消该环境变量:

unset PYTHONHTTPSVERIFY

方法2:手动下载依赖后本地安装

  1. 手动下载trec_eval源码包:
    wget --no-check-certificate https://github.com/usnistgov/trec_eval/archive/v9.0.8.tar.gz
    
  2. 下载pytrec_eval源码包(若此步骤也有SSL问题,可添加--trusted-host pypi.org --trusted-host files.pythonhosted.org参数):
    pip download pytrec_eval
    
  3. 解压pytrec_eval源码包,修改其中的setup.py,将REMOTE_TREC_EVAL_URI的值改为本地下载的trec_eval包路径,例如:
    REMOTE_TREC_EVAL_URI = "/path/to/your/downloaded/v9.0.8.tar.gz"
    
  4. 进入pytrec_eval解压目录,执行本地安装:
    python setup.py install
    

方法3:配置Python信任自签名证书

将自签名证书添加到Python的信任列表:

  1. 查找conda环境中的证书存储路径:
    python -c "import ssl; print(ssl.get_default_verify_paths())"
    
  2. 将自签名证书复制到该路径下的cafile或capath对应位置
  3. 设置环境变量让Python加载该证书后安装:
    export SSL_CERT_FILE=/path/to/your/certificate.crt
    python -m pip install pytrec_eval
    

内容的提问来源于stack exchange,提问作者Betty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 15:54:52