Win11+PyCharm环境下Python3.7的pip安装/升级错误修复
解决Windows 11下Python 3.7 pip安装osgeo/升级pip时的UnicodeDecodeError问题
问题场景
- 环境:Windows 11 + PyCharm + Python 3.7
- 执行
pip install osgeo或pip install --upgrade pip时触发相同解码错误,核心报错:UnicodeDecodeError: 'cp949' codec can't decode byte 0xff in position 0: illegal multibyte sequence - 已尝试修改
text_file.py和netrc.py添加encoding="UTF8",但问题未解决
完整错误日志
ERROR: Exception: Traceback (most recent call last): File "j:\python\goci-ii_navigation\lib\site-packages\pip\_internal\cli\base_command.py", line 188, in _main status = self.run(options, args) File "j:\python\goci-ii_navigation\lib\site-packages\pip\_internal\cli\req_command.py", line 185, in wrapper return func(self, options, args) File "j:\python\goci-ii_navigation\lib\site-packages\pip\_internal\commands\install.py", line 333, in run reqs, check_supported_wheels=not options.target_dir File "j:\python\goci-ii_navigation\lib\site-packages\pip\_internal\resolution\legacy\resolver.py", line 179, in resolve discovered_reqs.extend(self._resolve_one(requirement_set, req)) File "j:\python\goci-ii_navigation\lib\site-packages\pip\_internal\resolution\legacy\resolver.py", line 362, in _resolve_one abstract_dist = self._get_abstract_dist_for(req_to_install) File "j:\python\goci-ii_navigation\lib\site-packages\pip\_internal\resolution\legacy\resolver.py", line 305, in _get_abstract_dist_for skip_reason = self._check_skip_installed(req) File "j:\python\goci-ii_navigation\lib\site-packages\pip\_internal\resolution\legacy\resolver.py", line 250, in _check_skip_installed self.finder.find_requirement(req_to_install, upgrade=True) File "j:\python\goci-ii_navigation\lib\site-packages\pip\_internal\index\package_finder.py", line 901, in find_requirement req.name, specifier=req.specifier, hashes=hashes, File "j:\python\goci-ii_navigation\lib\site-packages\pip\_internal\index\package_finder.py", line 883, in find_best_candidate candidates = self.find_all_candidates(project_name) File "j:\python\goci-ii_navigation\lib\site-packages\pip\_internal\index\package_finder.py", line 828, in find_all_candidates project_url, link_evaluator=link_evaluator, File "j:\python\goci-ii_navigation\lib\site-packages\pip\_internal\index\package_finder.py", line 792, in process_project_url html_page = self._link_collector.fetch_page(project_url) File "j:\python\goci-ii_navigation\lib\site-packages\pip\_internal\index\collector.py", line 612, in fetch_page return _get_html_page(location, session=self.session) File "j:\python\goci-ii_navigation\lib\site-packages\pip\_internal\index\collector.py", line 451, in _get_html_page resp = _get_html_response(url, session=session) File "j:\python\goci-ii_navigation\lib\site-packages\pip\_internal\index\collector.py", line 166, in _get_html_response "Cache-Control": "max-age=0", File "j:\python\goci-ii_navigation\lib\site-packages\pip\_vendor\requests\sessions.py", line 543, in get return self.request('GET', url, **kwargs) File "j:\python\goci-ii_navigation\lib\site-packages\pip\_internal\network\session.py", line 421, in request return super(PipSession, self).request(method, url, *args, **kwargs) File "j:\python\goci-ii_navigation\lib\site-packages\pip\_vendor\requests\sessions.py", line 516, in request prep = self.prepare_request(req) File "j:\python\goci-ii_navigation\lib\site-packages\pip\_vendor\requests\sessions.py", line 459, in prepare_request hooks=merge_hooks(request.hooks, self.hooks), File "j:\python\goci-ii_navigation\lib\site-packages\pip\_vendor\requests\models.py", line 318, in prepare self.prepare_auth(auth, url) File "j:\python\goci-ii_navigation\lib\site-packages\pip\_vendor\requests\models.py", line 549, in prepare_auth r = auth(self) File "j:\python\goci-ii_navigation\lib\site-packages\pip\_internal\network\auth.py", line 202, in __call__ url, username, password = self._get_url_and_credentials(req.url) File "j:\python\goci-ii_navigation\lib\site-packages\pip\_internal\network\auth.py", line 178, in _get_url_and_credentials username, password = self._get_new_credentials(original_url) File "j:\python\goci-ii_navigation\lib\site-packages\pip\_internal\network\auth.py", line 142, in _get_new_credentials netrc_auth = get_netrc_auth(original_url) File "j:\python\goci-ii_navigation\lib\site-packages\pip\_vendor\requests\utils.py", line 204, in get_netrc_auth _netrc = netrc(netrc_path).authenticators(host) File "C:\python\Lib\netrc.py", line 30, in __init__ self._parse(file, fp, default_netrc) File "C:\python\Lib\netrc.py", line 39, in _parse toplevel = tt = lexer.get_token() File "C:\python\Lib\shlex.py", line 105, in get_token raw = self.read_token() File "C:\python\Lib\shlex.py", line 136, in read_token nextchar = self.instream.read(1) UnicodeDecodeError: 'cp949' codec can't decode byte 0xff in position 0: illegal multibyte sequence
解决建议
1. 检查并修复_netrc文件编码
错误根源是pip读取Windows下的_netrc配置文件时编码不兼容:
- 定位文件:通常在
C:\Users\<你的用户名>_netrc,或通过echo %USERPROFILE%找到用户目录 - 编码修复:用记事本打开文件,点击「文件」→「另存为」,若当前是UTF-16带BOM(0xff字节是UTF-16的BOM标识),改为UTF-8无BOM或ANSI编码后保存
- 无效文件处理:若文件无实际认证内容,直接删除也可解决问题
2. 临时跳过netrc认证
无需修改任何文件,直接在pip命令前添加环境变量禁用netrc:
set PIP_NETRC=off && pip install osgeo
升级pip时用:
set PIP_NETRC=off && pip install --upgrade pip
3. 修复Python标准库的netrc读取逻辑
若修改文件编码无效,可修改Python的netrc.py强制指定编码:
- 打开
C:\python\Lib\netrc.py - 找到打开文件的代码块,原代码类似:
with open(file, 'r') as fp: self._parse(file, fp, default_netrc) - 修改为:
若明确文件实际编码(如UTF-16),可替换with open(file, 'r', encoding='utf-8', errors='ignore') as fp: self._parse(file, fp, default_netrc)encoding='utf-8'为对应编码
内容的提问来源于stack exchange,提问作者SUNJU LEE
相关产品推荐
相关产品推荐

