Ошибка "ValueError: _type_ 'v' не поддерживается" после установки PyReadline
После того, как я установил 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 ответ
Как указано на их сайте, 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
Он пытается импортировать конкретные типы данных Windows из ctypes
что, очевидно, невозможно, так как вы не используете Windows.
Скорее всего, это точно никому не поможет в 2020 году или позже, но все же я хочу записать это здесь для потомков.
Я испытал то же самое ValueError: _type_ 'v' not supported
трассировка с установкой Python 2.7.16 в кластерной среде HPC, при попытке установить pdbpp, который зависит от fancycompleter, который зависит от pyreadline, который импортируетctypes.wintypes
и затронута этой основной проблемой Python с 2012 года.
Это правда что ctypes.wintypes
никогда не должны импортироваться на платформу, отличную от Windows (Cygwin, MSYS2 и Git Bash технически не относятся к Windows, поскольку они будут иметь настоящую библиотеку GNU Readline и им не понадобится чистая оболочка Python).
Однако, если он был импортирован на платформу, отличную от Windows, из-за проблемы, упомянутой выше,ctypes.wintypes
бросает ValueError
вместо ImportError
, что означает, что типичный try
/except
который рассчитывает поймать ImportError
просто взорвется из-за необработанного исключения.
Fancycompleter, или, скорее, pyreadline, каким-то образом стал жертвой этого. Я не понимаю, кто виноват, потому что fancycompleter'ssetup.py
не должен вводить pyreadline в качестве зависимости, кроме как в Windows, но каким-то образом это было в моей системе Linux. И если он там, fancycompleter пытается его импортировать.
Все, что я могу понять, это то, что у меня в кеше pip был старый fancycompleter с опечаткой в setup.py
что тянул в pyreadline, когда он не должен иметь, потому что это был захват, что зависимость, время от времени.
Что на самом деле окончательно разрешило эту ситуацию для меня, так это pip uninstall pyreadline
, тогда pip install -U --ignore-installed --no-cache-dir fancycompleter
чтобы получить "свежую" версию fancycompleter, которая не привносит ненужную зависимость pyreadline.