web-dev-qa-db-ja.com

ValueError:condaコマンドを使用した後、CPythonsys.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

これで、Anacondaにプリインストールされているcondaを使用したいと思います。アナコンダが私に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を使用しません) 別の提案 再インストールキャノピーですが、ここでは使用していません。最後に、 番目の提案 これは実際にはバグであり、修正を提案します。残念ながら、sys.versionの名前を変更してもエラーは解決されません。これは私のコンピューターでもないので、コードに深く入り込み、何かを台無しにするリスクを冒したくありません。

いくつかの考えやアドバイスをいただければ幸いです。

11

3番目の解決策は正しいです。変更されたsys.version文字列は、特定の形式のその文字列に依存する多くのplatformモジュール関数を壊すため、これは確かにバグです。

ただし、適切に修正できない場合は、ハッキーな回避策を試すことができます。モジュールplatformには、実際にはsys.version文字列を解析するためのキャッシュがあります。したがって、実行する必要があるのは次のとおりです。

  1. Anacondaのバックアップ-sys.versionを変更しました。
  2. 有効なバージョンの文字列に置き換えてください。
  3. Sys.version文字列を解析しないplatformモジュール関数を呼び出します。
  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

このコードを実行される場所に配置する必要がありますbefore condaは例外で失敗する可能性があります。最適な場所はわかりませんが、conda/cli/main.pyconda/api.py、またはconda/connection.pyで試すことができます。

10
Lav

Windowsでも同じ問題が発生し、PythonPathをAnacondaインストールに変更して修正しました(以前にPythonをインストールしていました)。

7
TheSwiftHippo

この問題の別の解決策を見つけました。 MACでSpyderを開いているときに同じ問題が発生していました。これが私のために働いた解決策です。

  • まず、既存のSpyderをシステムから削除しますconda remove spyder

ディレクトリのクローンを作成し、セットアップを実行します

これにより、スパイダーインスタンスが開きます。

1
Vaibhav K

このエラーが発生しました(ValueError: failed to parse CPython sys.version)FiPy Webサイトの 次の行を使用してFiPyをインストールした後にSpyderを開こうとした場合

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
0
drpm

システムのアップグレード後、Linuxでも同じ問題が発生しました。 〜/ .localディレクトリを削除することで、このメッセージ( "CPython sys.versionの解析に失敗しました")をなんとか乗り越えました。多分役に立つかもしれません...

0
dputhier

適切なバージョンのPythonをインストールするだけです。私にとっては、インストール時に機能しましたPython 3.6.5。このコマンドを使用してください

  • conda install Python = 3.6.5

インストールが完了したら、もう一度spyderを実行します。

0
Vaibhav K