Questo probabilmente non aiuterà esattamente nessuno nell'anno 2020 o oltre, ma lo stesso voglio registrarlo qui per i posteri.
Ho sperimentato lo stesso ValueError: _type_ 'v' not supported
traceback con un'installazione di Python 2.7.16 in un ambiente cluster HPC, tentando di installare pdbpp, che dipende da fancycompleter, che dipende da pyreadline, che importa ctypes.wintypes
ed è interessato da questo problema principale di Python dal 2012.
È vero che ctypes.wintypes
non dovrebbe mai essere importato su una piattaforma non Windows (Cygwin, MSYS2 e Git Bash sono tecnicamente non Windows, poiché avranno un reale libreria GNU Readline e non hanno bisogno del puro shim Python).
Tuttavia, se lo fosse importato su una piattaforma non Windows, a causa del problema menzionato sopra, ctypes.wintypes
lancia un ValueError
invece di un ImportError
, il che significa che un tipico try
/except
che si aspetta di catturare un ImportError
esploderà a causa dell'eccezione non gestita.
Il fancycompleter di Pdbpp, o meglio pyreadline, in qualche modo ne è stato vittima. Mi confondo su chi sia la colpa, perché il setup.py
di fancycompleter non dovrebbe inserire pyreadline come dipendenza tranne su Windows, ma in qualche modo era lì sul mio sistema Linux. E se è lì, fancycompleter tenta di importarlo.
Tutto quello che riesco a capire è che potrei aver avuto un vecchio fancycompleter nella mia pip cache con un errore di battitura nel suo setup.py
che stava inserendo pyreadline quando non avrebbe dovuto, perché lo era afferrando quella dipendenza, volta dopo volta.
Ciò che in realtà alla fine ha risolto questa situazione per me è stato il pip uninstall pyreadline
, quindi pip install -U --ignore-installed --no-cache-dir fancycompleter
per ottenere una versione "fresca" di fancycompleter che non introduca l'inutile dipendenza pyreadline.
Come dichiarato sul loro sito, il PyReadline
la libreria è utilizzata per Windows .
Osservando le ultime righe della traccia dello stack:
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
Sta tentando di importare tipi di dati specifici di Windows da ctypes
il che ovviamente non è possibile dal momento che non stai utilizzando Windows.