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
строка: так что вам нужно сделать, это:
- Резервная копия Anaconda-модифицированная sys.version.
- Замените его допустимой версией строки.
- Позвони любому
platform
функция модуля, которая разбирает строку sys.version. - Продублируйте его кеш для модифицированного Anaconda sys.version.
- Восстановите 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 из системы.
Клонировать каталог и запустить установку
- git clone https://github.com/spyder-ide/spyder.git
CD Spyder
python bootstrap.py
Это откроет экземпляр 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