一、报错再现
我准备了一个工具环境,这里面有一些工具包需要安装,当我运行一下代码:
pip install -r requirements-cpu.txt
回车过后,发生了如下报错:
ERROR: Exception:
Traceback (most recent call last):File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_internal\cli\base_command.py", line 173, in _mainstatus = self.run(options, args)File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_internal\cli\req_command.py", line 203, in wrapperreturn func(self, options, args)File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_internal\commands\install.py", line 316, in runreqs, check_supported_wheels=not options.target_dirFile "D:\Anaconda\envs\rknn\lib\site-packages\pip\_internal\resolution\resolvelib\resolver.py", line 95, in resolvecollected.requirements, max_rounds=try_to_avoid_resolution_too_deepFile "D:\Anaconda\envs\rknn\lib\site-packages\pip\_vendor\resolvelib\resolvers.py", line 472, in resolvestate = resolution.resolve(requirements, max_rounds=max_rounds)File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_vendor\resolvelib\resolvers.py", line 341, in resolveself._add_to_criteria(self.state.criteria, r, parent=None)File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_vendor\resolvelib\resolvers.py", line 172, in _add_to_criteriaif not criterion.candidates:File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_vendor\resolvelib\structs.py", line 151, in __bool__return bool(self._sequence)File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 140, in __bool__return any(self)File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 128, in <genexpr>return (c for c in iterator if id(c) not in self._incompatible_ids)File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 29, in _iter_builtfor version, func in infos:File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_internal\resolution\resolvelib\factory.py", line 275, in iter_index_candidate_infoshashes=hashes,File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_internal\index\package_finder.py", line 851, in find_best_candidatecandidates = self.find_all_candidates(project_name)File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_internal\index\package_finder.py", line 798, in find_all_candidatespage_candidates = list(page_candidates_it)File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_internal\index\sources.py", line 134, in page_candidatesyield from self._candidates_from_page(self._link)File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_internal\index\package_finder.py", line 758, in process_project_urlhtml_page = self._link_collector.fetch_page(project_url)File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_internal\index\collector.py", line 490, in fetch_pagereturn _get_html_page(location, session=self.session)File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_internal\index\collector.py", line 400, in _get_html_pageresp = _get_html_response(url, session=session)File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_internal\index\collector.py", line 132, in _get_html_response"Cache-Control": "max-age=0",File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_vendor\requests\sessions.py", line 555, in getreturn self.request('GET', url, **kwargs)File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_internal\network\session.py", line 454, in requestreturn super().request(method, url, *args, **kwargs)File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_vendor\requests\sessions.py", line 542, in requestresp = self.send(prep, **send_kwargs)File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_vendor\requests\sessions.py", line 655, in sendr = adapter.send(request, **kwargs)File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_vendor\cachecontrol\adapter.py", line 53, in sendresp = super(CacheControlAdapter, self).send(request, **kw)File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_vendor\requests\adapters.py", line 449, in sendtimeout=timeoutFile "D:\Anaconda\envs\rknn\lib\site-packages\pip\_vendor\urllib3\connectionpool.py", line 696, in urlopenself._prepare_proxy(conn)File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_vendor\urllib3\connectionpool.py", line 964, in _prepare_proxyconn.connect()File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_vendor\urllib3\connection.py", line 359, in connectconn = self._connect_tls_proxy(hostname, conn)File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_vendor\urllib3\connection.py", line 506, in _connect_tls_proxyssl_context=ssl_context,File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_vendor\urllib3\util\ssl_.py", line 453, in ssl_wrap_socketssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls)File "D:\Anaconda\envs\rknn\lib\site-packages\pip\_vendor\urllib3\util\ssl_.py", line 495, in _ssl_wrap_socket_implreturn ssl_context.wrap_socket(sock)File "D:\Anaconda\envs\rknn\lib\ssl.py", line 407, in wrap_socket_context=self, _session=session)File "D:\Anaconda\envs\rknn\lib\ssl.py", line 773, in __init__raise ValueError("check_hostname requires server_hostname")
ValueError: check_hostname requires server_hostname
报错的关键句是:
ValueError: check_hostname requires server_hostname
二、原因分析
从报错的关键句看,他这个错误通常意味着在进行 HTTPS 请求时缺少了服务器的主机名信息,这可能由以下原因导致:
-
检查网络连接和代理设置:确保你的网络连接正常,没有任何代理设置干扰了 HTTPS 请求的正常进行。
-
更新 OpenSSL:有时候旧版本的 OpenSSL 会导致一些 SSL/TLS 相关的问题。尝试更新 OpenSSL 到最新版本,或者升级你的 Python 或者相关的库到最新版本。
-
检查 SSL/TLS 配置:如果你有自定义的 SSL/TLS 配置,例如在使用自签名证书或者需要特定的 SSL/TLS 版本,确保这些配置正确并且与服务器配置相匹配。
-
检查 URL 和请求:确认你的请求的 URL 是正确的,并且没有拼写错误或者其他问题。
三、解决方案
大部分是产生于原因②,因为你正在使用一些代理软件。(反正我是这个原因导致的)例如:V2ray
, SSR
,Charles
,Fiddler
,mitm
,…
如果真的是这样,那么你关掉代理软件或者清空系统代理,再重新运行之前失败的命令,我相信应该能解决问题了。
四、参考文献
[1]Stack Overflow. (2021). ValueError: check_hostname requires server_hostname. [Online Forum Comment]. Stack Overflow. Retrieved November 3, 2023, from https://stackoverflow.com/questions/67297278/valueerror-check-hostname-requires-server-hostname