pip安装SelectMenu时出现ImportError报错无法完成安装
执行requirements依赖安装过程中,SelectMenu包安装阶段抛出错误,暂未明确问题触发原因、未找到有效修复方案,完整报错日志如下:
Collecting SelectMenu Using cached SelectMenu-1.0.0b2.tar.gz (3.4 kB) Preparing metadata (setup.py): started Preparing metadata (setup.py): finished with status 'error' error: subprocess-exited-with-error python setup.py egg_info did not run successfully. exit code: 1 [10 lines of output] Traceback (most recent call last): File "<string>", line 2, in <module> File "<pip-setuptools-caller>", line 34, in <module> File "C:\Users\user\AppData\Local\Temp\pip-install-f60sp66w\selectmenu_815b28a3de7f43b983f0ed0a1ecdd478\setup.py", line 5, in <module> from selectmenu import __author__, __version__ File "C:\Users\user\AppData\Local\Temp\pip-install-f60sp66w\selectmenu_815b28a3de7f43b983f0ed0a1ecdd478\selectmenu\__init__.py", line 4, in <module> from selectmenu.core import SelectMenu File "C:\Users\user\AppData\Local\Temp\pip-install-f60sp66w\selectmenu_815b28a3de7f43b983f0ed0a1ecdd478\selectmenu\core.py", line 6, in <module> from prompt_toolkit.token import Token ImportError: cannot import name 'Token' from 'prompt_toolkit.token' (C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\prompt_toolkit\token.py) [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. error: metadata-generation-failed
故障根因
报错核心是依赖版本不兼容:SelectMenu 1.0.0b2是2020年发布的beta版本,发布后长期停更,代码仅适配3.0以下版本的prompt_toolkit;当前Python环境中安装的是3.0及以上版本的prompt_toolkit,新版本已经将Token类从prompt_toolkit.token模块中移除,导致SelectMenu安装阶段执行导入逻辑时直接抛出 ImportError: cannot import name 'Token' from 'prompt_toolkit.token' 错误,元数据生成流程中断,安装失败。
修复方案
- 方案1:降级prompt_toolkit到兼容版本
先执行命令安装SelectMenu适配的旧版prompt_toolkit:pip install "prompt_toolkit<3.0"
安装完成后重新执行requirements依赖安装命令即可正常完成SelectMenu的部署。 - 方案2:替换为维护状态正常的同功能库
如果项目中其他依赖要求必须使用3.0以上版本的prompt_toolkit,直接弃用这个停更多年的SelectMenu包,替换为仍在迭代、适配新版依赖的终端交互选择库,比如simple-term-menu、pick等,对应修改业务代码中的导入和调用逻辑即可。 - 方案3:手动修改SelectMenu源码适配高版本依赖
若必须保留SelectMenu且不能降级prompt_toolkit,可以手动下载SelectMenu源码包,解压后找到selectmenu/core.py文件,将第6行的from prompt_toolkit.token import Token修改为高版本兼容的导入语句:from prompt_toolkit.formatted_text import Token
修改完成后在源码根目录执行python setup.py install完成本地手动安装即可。
内容的提问来源于stack exchange,提问作者Contivalious
相关产品推荐
相关产品推荐

