ValueError: не удалось проанализировать CPython sys.version после использования команды conda

Я сталкиваюсь с ошибкой, которую не могу исправить, несмотря на то, что другие сообщали об этой ошибке.

Я подключаюсь удаленно к машине 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. Похоже, Анаконда дала мне 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)]'

К сожалению, я не могу понять, как избежать этой ошибки.

Я нашел несколько других сообщений Stackru. Этот предлагает переустановить python и pycharm с нуля (но я только что установил Anaconda, и я не использую pycharm). Другой предлагает переустановить купол, но я не использую это здесь. Наконец, третий предполагает, что это действительно ошибка, и предлагает исправление. К сожалению, переименование sys.version не удается устранить ошибку. Это даже не мой компьютер, поэтому я не хочу углубляться в код и рискнуть что-то испортить.

Буду признателен за некоторые мысли или советы.

6 ответов

Решение

Третье решение правильное. Это действительно ошибка, так как модифицированный 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.py, conda/api.py или же conda/connection.py,

Просто была та же проблема в Windows, исправлена ​​путем изменения PythonPath на установку Anaconda (у меня была предыдущая установка Python).

Я нашел другое решение для этой проблемы. Я получил ту же проблему при открытии Spyder на MAC. вот решение, которое сработало для меня.

  • Сначала удалите существующий Spyder из системы.

Клонировать каталог и запустить установку

Это откроет экземпляр Spyder.

У меня была такая же проблема под Linux после обновления системы. Мне удалось получить это сообщение ("не удалось разобрать CPython sys.version"), удалив каталог ~/.local. Может быть полезным может быть...

Просто установите правильную версию Python. Для меня это сработало, когда я установил Python 3.6.5. Используйте эту команду

  • Конда установить Python=3.6.5

после завершения установки снова запустите spyder.

У меня была эта ошибка (ValueError: failed to parse CPython sys.version) при попытке открыть Spyder после установки FiPy с помощью следующей строки на веб-сайте FiPy:

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))

Выполнение следующей строки кода в Terminal разрешило ее ( из сопровождающего Spyder на GitHub):

conda update --name <MYFIPYENV> python pyzmq python.app
Другие вопросы по тегам