开启VPN时pip安装Python包报错的解决方案求助
问题描述
我将Python 3.10与Python 3.9安装在同一目录,最初提示pip版本过低,先后升级pip和Python版本后问题仍未解决。发现关闭VPN后pip可正常安装包,但关闭VPN后安装速度极慢,希望找到无需关闭VPN即可正常使用pip安装Python包的方法。
报错信息
ERROR: Exception: Traceback (most recent call last): File "D:\Program Files\Python\Python310\lib\site-packages\pip\_internal\cli\base_command.py", line 173, in _main status = self.run(options, args) File "D:\Program Files\Python\Python310\lib\site-packages\pip\_internal\cli\req_command.py", line 203, in wrapper return func(self, options, args) File "D:\Program Files\Python\Python310\lib\site-packages\pip\_internal\commands\install.py", line 315, in run requirement_set = resolver.resolve( File "D:\Program Files\Python\Python310\lib\site-packages\pip\_internal\resolution\resolvelib\resolver.py", line 94, in resolve result = self._result = resolver.resolve( File "D:\Program Files\Python\Python310\lib\site-packages\pip\_vendor\resolvelib\resolvers.py", line 472, in resolve state = resolution.resolve(requirements, max_rounds=max_rounds) File "D:\Program Files\Python\Python310\lib\site-packages\pip\_vendor\resolvelib\resolvers.py", line 341, in resolve self._add_to_criteria(self.state.criteria, r, parent=None) File "D:\Program Files\Python\Python310\lib\site-packages\pip\_vendor\resolvelib\resolvers.py", line 172, in _add_to_criteria if not criterion.candidates: File "D:\Program Files\Python\Python310\lib\site-packages\pip\_vendor\resolvelib\structs.py", line 151, in __bool__ return bool(self._sequence) File "D:\Program Files\Python\Python310\lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 140, in __bool__ return any(self) File "D:\Program Files\Python\Python310\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:\Program Files\Python\Python310\lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 29, in _iter_built for version, func in infos: File "D:\Program Files\Python\Python310\lib\site-packages\pip\_internal\resolution\resolvelib\factory.py", line 272, in iter_index_candidate_infos result = self._finder.find_best_candidate( File "D:\Program Files\Python\Python310\lib\site-packages\pip\_internal\index\package_finder.py", line 851, in find_best_candidate candidates = self.find_all_candidates(project_name) File "D:\Program Files\Python\Python310\lib\site-packages\pip\_internal\index\package_finder.py", line 798, in find_all_candidates page_candidates = list(page_candidates_it) File "D:\Program Files\Python\Python310\lib\site-packages\pip\_internal\index\sources.py", line 134, in page_candidates yield from self._candidates_from_page(self._link) File "D:\Program Files\Python\Python310\lib\site-packages\pip\_internal\index\package_finder.py", line 758, in process_project_url html_page = self._link_collector.fetch_page(project_url) File "D:\Program Files\Python\Python310\lib\site-packages\pip\_internal\index\collector.py", line 490, in fetch_page return _get_html_page(location, session=self.session) File "D:\Program Files\Python\Python310\lib\site-packages\pip\_internal\index\collector.py", line 400, in _get_html_page resp = _get_html_response(url, session=session) File "D:\Program Files\Python\Python310\lib\site-packages\pip\_internal\index\collector.py", line 115, in _get_html_response resp = session.get( File "D:\Program Files\Python\Python310\lib\site-packages\pip\_vendor\requests\sessions.py", line 555, in get return self.request('GET', url, **kwargs) File "D:\Program Files\Python\Python310\lib\site-packages\pip\_internal\network\session.py", line 454, in request return super().request(method, url, *args, **kwargs) File "D:\Program Files\Python\Python310\lib\site-packages\pip\_vendor\requests\sessions.py", line 532, in request settings = self.merge_environment_settings( File "D:\Program Files\Python\Python310\lib\site-packages\pip\_vendor\requests\sessions.py", line 711, in merge_environment_settings env_proxies = get_environ_proxies(url, no_proxy=no_proxy) File "D:\Program Files\Python\Python310\lib\site-packages\pip\_vendor\requests\utils.py", line 797, in get_environ_proxies if should_bypass_proxies(url, no_proxy=no_proxy): File "D:\Program Files\Python\Python310\lib\site-packages\pip\_vendor\requests\utils.py", line 781, in should_bypass_proxies bypass = proxy_bypass(parsed.hostname) File "D:\Program Files\Python\Python310\lib\site-packages\pip\_vendor\requests\utils.py", line 102, in proxy_bypass return proxy_bypass_registry(host) File "D:\Program Files\Python\Python310\lib\site-packages\pip\_vendor\requests\utils.py", line 89, in proxy_bypass_registry if re.match(test, host, re.I): File "D:\Program Files\Python\Python310\lib\re.py", line 190, in match return _compile(pattern, flags).match(string) File "D:\Program Files\Python\Python310\lib\re.py", line 303, in _compile p = sre_compile.compile(pattern, flags) File "D:\Program Files\Python\Python310\lib\sre_compile.py", line 764, in compile p = sre_parse.parse(p, flags) File "D:\Program Files\Python\Python310\lib\sre_parse.py", line 948, in parse p = _parse_sub(source, state, flags & SRE_FLAG_VERBOSE, 0) File "D:\Program Files\Python\Python310\lib\sre_parse.py", line 443, in _parse_sub itemsappend(_parse(source, state, verbose, nested + 1, File "D:\Program Files\Python\Python310\lib\sre_parse.py", line 511, in _parse sourceget() File "D:\Program Files\Python\Python310\lib\sre_parse.py", line 256, in get self.__next() File "D:\Program Files\Python\Python310\lib\sre_parse.py", line 245, in __next raise error("bad escape (end of pattern)", re.error: bad escape (end of pattern) at position 12
解决方法
从报错信息判断,问题根源是VPN代理的no_proxy环境变量包含错误的正则表达式转义字符,导致pip调用正则解析时失败。以下是几种可行的解决办法:
修复系统no_proxy配置
打开系统环境变量设置,找到NO_PROXY或no_proxy变量,检查其值是否存在类似\的错误转义字符,直接删除或修正这类字符。比如把example\.com改成example.com,或者清空有问题的条目。给pip手动指定VPN代理
- 临时使用:安装包时添加代理参数,命令格式为:
pip install 你的包名 --proxy=http://VPN代理地址:端口 - 永久配置:找到pip的配置文件(Windows为
pip.ini,路径一般是%APPDATA%\pip\pip.ini;Linux/macOS为pip.conf,路径是~/.config/pip/pip.conf),添加以下内容:[global] proxy = http://VPN代理地址:端口
- 临时使用:安装包时添加代理参数,命令格式为:
搭配国内PyPI源使用
国内源速度更快,结合VPN代理可兼顾稳定性和速度:- 临时使用:
pip install 你的包名 -i https://pypi.tuna.tsinghua.edu.cn/simple --proxy=http://VPN代理地址:端口 - 永久配置:在pip配置文件中添加:
[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple proxy = http://VPN代理地址:端口
- 临时使用:
重置pip网络配置
如果之前的pip代理配置有问题,先执行以下命令清空:pip config unset global.proxy之后再重新设置正确的代理参数。
内容的提问来源于stack exchange,提问作者MXUne
相关产品推荐
相关产品推荐

