安装 PyReadline 后出现“ValueError: _type_ 'v' not supported”错误

Posted

技术标签:

【中文标题】安装 PyReadline 后出现“ValueError: _type_ \'v\' not supported”错误【英文标题】:"ValueError: _type_ 'v' not supported" error after installing PyReadline安装 PyReadline 后出现“ValueError: _type_ 'v' not supported”错误 【发布时间】:2015-12-13 00:26:31 【问题描述】:

安装 PyReadline 后,IPython 将无法工作。当我卸载它时,它又开始工作了。

ipython 的堆栈跟踪:

(py2.7_monitor)[root@vm10-136-8-98 monitor]# ipython
WARNING: IPython History requires SQLite, your history will not be saved
Traceback (most recent call last):
  File "/home/py2.7_monitor/bin/ipython", line 11, in <module>
    sys.exit(start_ipython())
  File "/home/py2.7_monitor/lib/python2.7/site-packages/IPython/__init__.py", line 118, in start_ipython
    return launch_new_instance(argv=argv, **kwargs)
  File "/home/py2.7_monitor/lib/python2.7/site-packages/traitlets/config/application.py", line 591, in launch_instance
    app.initialize(argv)
  File "<string>", line 2, in initialize
  File "/home/py2.7_monitor/lib/python2.7/site-packages/traitlets/config/application.py", line 75, in catch_config_error
    return method(app, *args, **kwargs)
  File "/home/py2.7_monitor/lib/python2.7/site-packages/IPython/terminal/ipapp.py", line 314, in initialize
    self.init_shell()
  File "/home/py2.7_monitor/lib/python2.7/site-packages/IPython/terminal/ipapp.py", line 330, in init_shell
    ipython_dir=self.ipython_dir, user_ns=self.user_ns)
  File "/home/py2.7_monitor/lib/python2.7/site-packages/traitlets/config/configurable.py", line 380, in instance
    inst = cls(*args, **kwargs)
  File "/home/py2.7_monitor/lib/python2.7/site-packages/IPython/core/interactiveshell.py", line 531, in __init__
    self.init_readline()
  File "/home/py2.7_monitor/lib/python2.7/site-packages/IPython/core/interactiveshell.py", line 1941, in init_readline
    import IPython.utils.rlineimpl as readline
  File "/home/py2.7_monitor/lib/python2.7/site-packages/IPython/utils/rlineimpl.py", line 21, in <module>
    _rl = __import__(_rlmod_name)
  File "/home/py2.7_monitor/lib/python2.7/site-packages/readline.py", line 6, in <module>
    from pyreadline.rlmain import Readline
  File "/home/py2.7_monitor/lib/python2.7/site-packages/pyreadline/__init__.py", line 12, in <module>
    from . import logger, clipboard, lineeditor, modes, console
  File "/home/py2.7_monitor/lib/python2.7/site-packages/pyreadline/clipboard/__init__.py", line 13, in <module>
    from .win32_clipboard import GetClipboardText, SetClipboardText
  File "/home/py2.7_monitor/lib/python2.7/site-packages/pyreadline/clipboard/win32_clipboard.py", line 37, in <module>
    import ctypes.wintypes as wintypes
  File "/usr/local/lib/python2.7/ctypes/wintypes.py", line 23, in <module>
    class VARIANT_BOOL(_SimpleCData):
ValueError: _type_ 'v' not supported

【问题讨论】:

【参考方案1】:

As stated 在他们的网站上,PyReadline 库用于 Windows

查看堆栈跟踪的最后几行:

import ctypes.wintypes as wintypes
File "/usr/local/lib/python2.7/ctypes/wintypes.py", line 23, in <module>
class VARIANT_BOOL(_SimpleCData):
ValueError: _type_ 'v' not supported

它正在尝试从ctypes 导入特定于 Windows 的数据类型,这显然是不可能的,因为您没有运行 Windows。

【讨论】:

这也适用于我的情况,Win10下的Msys2。我只是用pacman -Rs mingw-w64-x86_64-python-pyreadline 删除了pyreadline,问题就消失了。【参考方案2】:

这在 2020 年或以后可能对任何人都没有帮助,但我还是想在这里记录下来以供后代使用。

我在 HPC 集群环境中安装 Python 2.7.16 时遇到了相同的 ValueError: _type_ 'v' not supported 回溯,尝试安装 pdbpp,它依赖于 fancycompleter,它依赖于 pyreadline,它导入 ctypes.wintypes 和从 2012 年开始受到 this core Python issue 的影响。

确实,ctypes.wintypes 永远不应该在非 Windows 平台上导入(Cygwin、MSYS2 和 Git Bash 在技术上是非 Windows,因为它们将有一个 真正的 GNU Readline 库和不需要纯 Python shim)。

但是,如果它在非 Windows 平台上导入的,由于上述问题,ctypes.wintypes 会抛出 ValueError 而不是 ImportError,这意味着典型的 @期望捕获 ImportError 的 987654331@/except 将因为未处理的异常而爆炸。

Pdbpp 的 fancycompleter,或者更确切地说是 pyreadline,不知何故成为了这个的牺牲品。我对谁应该受到责备感到困惑,因为fancycompleter 的setup.py 不应该将pyreadline 作为依赖项except on Windows 引入,但不知何故它在我的Linux 系统上如果它在那里,fancycompleter 会尝试导入它。

我所能想到的是,我的 pip 缓存中可能有一个旧的 fancycompleter,它的 setup.py 中有一个错字,它在不应该有的时候拉入了 pyreadline,因为它正在抓取这种依赖,一次又一次。

实际上最终为我解决了这种情况的是pip uninstall pyreadline,然后pip install -U --ignore-installed --no-cache-dir fancycompleter 来获得一个“新鲜”版本的fancycompleter,它不会带来不必要的pyreadline依赖。

【讨论】:

以上是关于安装 PyReadline 后出现“ValueError: _type_ 'v' not supported”错误的主要内容,如果未能解决你的问题,请参考以下文章

如何安装ipython notebook

ipython notebook环境搭建

在执行第一个 epoch 后,Tensorflow 无法将批次附加在一起

pip 的操作系统特定要求

Windows 上的 IPython - 没有突出显示或自动完成

安装MyEclipse6.5后出现错误提示