解决Anaconda执行pip等命令报alueError: failed to parse CPython sys.version错误的问题

转自:
piaoxue1949:https://blog.csdn.net/piaoxue1949/article/details/80295385
python运行报错

File "/usr/share/Anaconda3/lib/python3.6/platform.py", line 1257, in python_implementation
  return _sys_version()[0]
File "/usr/share/Anaconda3/lib/python3.6/platform.py", line 1215, in _sys_version
  repr(sys_version))
ValueError: failed to parse CPython sys.version: '3.6.4 |Anaconda, Inc.| (default, Jan 16 2018, 18:10:19) \n[GCC 7.2.0]'

问题定位:
/usr/share/Anaconda3/lib/python3.6/platform.py:1215:

# CPython 
match = _sys_version_parser.match(sys_version) 
if match is None: 
    raise ValueError( 'failed to parse CPython sys.version: %s' % repr(sys_version)) 
    version, buildno, builddate, buildtime, compiler = \ match.groups()

_sys_version_parser:

_sys_version_parser = re.compile(
r'([\w.+]+)\s*' # "version<space>"
r'\(#?([^,]+)' # "(#buildno"
r'(?:,\s*([\w ]*)' # ", builddate"
r'(?:,\s*([\w :]*))?)?\)\s*' # ", buildtime)<space>"
r'\[([^\]]+)\]?', re.ASCII) # "[compiler]"

发现此正则表达式未考虑Anaconda增加了”|Anaconda, Inc.|”的问题,需要过滤掉.

解决方法:
在_sys_version_parser中增加一行过滤掉”|Anaconda xxx|”等信息即可:

_sys_version_parser = re.compile(
r'([\w.+]+)\s*' # "version<space>"
r'(?:\|[^|]*\|)*\s*' #去掉'|Anaconda xxx|'等,避免出现failed to parse CPython sys.version
r'\(#?([^,]+)' # "(#buildno"
r'(?:,\s*([\w ]*)' # ", builddate"
r'(?:,\s*([\w :]*))?)?\)\s*' # ", buildtime)<space>"
r'\[([^\]]+)\]?', re.ASCII) # "[compiler]"

猜你喜欢

转载自blog.csdn.net/u011799895/article/details/81703792