ValueError:使用conda命令后,无法解析CPython sys.version



我遇到了一个无法解决的错误,尽管其他人也报告了同样的错误。

我正在远程连接到一台Linux机器。我已经安装了最新版本的anaconda:

$ bash Anaconda2-2.4.0-Linux-x86_64.sh
// A lot of python libraries get installed
installing: _cache-0.0-py27_x0 ...
Python 2.7.10 :: Continuum Analytics, Inc.
creating default environment...
installation finished. 

我更新了相应的路径,看起来它很有效:

$ python
Python 2.7.10 |Anaconda 2.4.0 (64-bit)| (default, Oct 19 2015, 18:04:42) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://anaconda.org

很棒,所以现在我想使用conda,它是与Anaconda一起预装的。看起来Anaconda给了我3.18.3:

$ conda --version
conda 3.18.3

按照试驾说明,我更新了conda:

$ conda update conda
Fetching package metadata: An unexpected error has occurred, please consider sending the
following traceback to the conda GitHub issue tracker at:
    https://github.com/conda/conda/issues
Include the output of the command 'conda info' in your report.

Traceback (most recent call last):
  File "/code/anaconda2-4-0/bin/conda", line 5, in <module>
    sys.exit(main())
  File "/code/anaconda2-4-0/lib/python2.7/site-packages/conda/cli/main.py", line 195, in main
    args_func(args, p)
  File "/code/anaconda2-4-0/lib/python2.7/site-packages/conda/cli/main.py", line 202, in args_func
    args.func(args, p)
  File "/code/anaconda2-4-0/lib/python2.7/site-packages/conda/cli/main_update.py", line 48, in execute
    install.install(args, parser, 'update')
  File "/code/anaconda2-4-0/lib/python2.7/site-packages/conda/cli/install.py", line 239, in install
    offline=args.offline)
  File "/code/anaconda2-4-0/lib/python2.7/site-packages/conda/cli/common.py", line 598, in get_index_trap
    return get_index(*args, **kwargs)
  File "/code/anaconda2-4-0/lib/python2.7/site-packages/conda/api.py", line 42, in get_index
    unknown=unknown)
  File "/code/anaconda2-4-0/lib/python2.7/site-packages/conda/utils.py", line 119, in __call__
    value = self.func(*args, **kw)
  File "/code/anaconda2-4-0/lib/python2.7/site-packages/conda/fetch.py", line 237, in fetch_index
    session = CondaSession()
  File "/code/anaconda2-4-0/lib/python2.7/site-packages/conda/connection.py", line 61, in __init__
    super(CondaSession, self).__init__(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 272, in __init__
    self.headers = default_headers()
  File "/usr/lib/python2.7/dist-packages/requests/utils.py", line 555, in default_headers
    'User-Agent': default_user_agent(),
  File "/usr/lib/python2.7/dist-packages/requests/utils.py", line 524, in default_user_agent
    _implementation = platform.python_implementation()
  File "/usr/lib/python2.7/platform.py", line 1521, in python_implementation
    return _sys_version()[0]
  File "/usr/lib/python2.7/platform.py", line 1486, in _sys_version
    repr(sys_version))
ValueError: failed to parse CPython sys.version: '2.7.10 |Anaconda 2.4.0 (64-bit)| (default, Oct 19 2015, 18:04:42) n[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]'

不幸的是,我不知道如何避免这个错误。

我发现了其他一些StackOverflow帖子。这个建议从头开始重新安装python和pycharm(但我刚刚安装了Anaconda,我不使用pycharm)。另一个建议重新安装遮篷,但我在这里不使用。最后,第三个人认为这实际上是一个bug,并提出了修复方案。不幸的是,重新命名sys.version未能解决该错误。这甚至不是我的电脑,所以我不想深入代码,冒着把事情搞砸的风险。

如果能给我一些想法或建议,我将不胜感激。

第三个解决方案是正确的。这确实是一个错误,因为修改后的sys.version字符串破坏了许多依赖于具有特定格式的字符串的platform模块函数。

然而,如果你不能正确地修复它,你可以尝试一个巧妙的变通方法。模块platform实际上有一个用于解析sys.version字符串的缓存:所以您要做的是:

  1. 备份Anaconda修改了sys.version
  2. 将其替换为合法版本字符串
  3. 调用任何一个platform模块函数,该函数将解析sys.version字符串
  4. 为Anaconda修改的sys.version复制它的缓存
  5. 从备份中还原sys.version

黑客本身:

try:
    import sys # Just in case
    start = sys.version.index('|') # Do we have a modified sys.version?
    end = sys.version.index('|', start + 1)
    version_bak = sys.version # Backup modified sys.version
    sys.version = sys.version.replace(sys.version[start:end+1], '') # Make it legible for platform module
    import platform
    platform.python_implementation() # Ignore result, we just need cache populated
    platform._sys_version_cache[version_bak] = platform._sys_version_cache[sys.version] # Duplicate cache
    sys.version = version_bak # Restore modified version string
except ValueError: # Catch .index() method not finding a pipe
    pass

在conda出现异常失败之前,您需要将此代码放在执行的某个地方。不确定什么地方是最好的,但你可以试试conda/cli/main.pyconda/api.pyconda/connection.py

刚刚在Windows上遇到了同样的问题,通过将PythonPath更改为Anaconda安装来修复它(我以前安装过Python)。

我找到了这个问题的另一个解决方案。我在MAC上打开Spyder时遇到了同样的问题。这是对我有效的解决方案。

  • 首先从系统中删除现有的Spyderconda删除spyder

克隆目录并运行设置

  • git克隆https://github.com/spyder-ide/spyder.git
  • cd spyder

  • python引导程序.py

这将打开spyder实例。

系统升级后,我在Linux下遇到了同样的问题。通过删除~/.local目录,我成功地掌握了这条消息("未能解析CPython sys.version")。可能有用。。。

只需安装正确版本的python即可。对我来说,当我安装Python 3.6.5时,它就起了作用。使用此命令

  • conda安装Python=3.6.5

安装完成后,再次运行spyder。

在使用FiPy网站上的以下行安装FiPy后,我尝试打开Spyder时出现了此错误(ValueError: failed to parse CPython sys.version):

conda create --name <MYFIPYENV> --channel guyer --channel conda-forge fipy nomkl 

错误源自一个名为zmq:的包

File "/Users/user/anaconda3/lib/python3.6/site-packages/spyder/utils/introspection/plugin_client.py", line 18, in
import zmq
File "/Users/user/anaconda3/lib/python3.6/site-packages/zmq/init.py", line 34, in
from zmq import backend
File "/Users/user/anaconda3/lib/python3.6/site-packages/zmq/backend/init.py", line 21, in
if platform.python_implementation() == 'PyPy':
File "/Users/user/anaconda3/lib/python3.6/platform.py", line 1234, in python_implementation
return _sys_version()[0]
File "/Users/user/anaconda3/lib/python3.6/platform.py", line 1192, in _sys_version
repr(sys_version))

在终端中运行以下代码行解决了问题(来自GitHub上的Spyder维护人员):

conda update --name <MYFIPYENV> python pyzmq python.app

相关内容

最新更新