Poetry 1.1.11执行install报'Link'无name属性,降级后仍触发JSONDecodeError
问题成因
- 你最早遇到的
AttributeError: 'Link' object has no attribute 'name'是Poetry 1.1.x系列的已知bug,触发原因是PyPI上游调整了包元数据的返回结构,1.1.11及更低版本的Poetry内置的元数据解析逻辑没有适配该变更,导致executor.py中对Link对象的属性调用失败。 - 降级后出现的
JSONDecodeError: Expecting value: line 1 column 1 (char 0)通常由三类原因导致:一是降级过程中没有清理干净全局Poetry缓存、虚拟环境的残留文件,新旧版本逻辑冲突;二是你配置的PyPI源网络不通,返回了空响应;三是1.1.7版本的Poetry不兼容你项目pyproject.toml中使用的新语法。
修复步骤
- 彻底卸载旧版本Poetry并清理残留
- 如果你是通过pip安装的Poetry,执行:
pip uninstall poetry poetry-core -y - 如果你是通过官方脚本安装的,执行内置卸载命令:
poetry self uninstall - 手动删除全局残留目录:
rm -rf ~/.local/share/pypoetry ~/.cache/pypoetry - 重启终端后执行
poetry --version确认无输出,代表卸载完成
- 如果你是通过pip安装的Poetry,执行:
- 安装已修复该bug的稳定版本
直接安装1.8.x系列稳定版即可,执行:pip install poetry==1.8.3
安装完成后验证版本:poetry --version - 清理项目层面的残留文件
进入你的项目根目录,执行:rm -rf poetry.lock .venv- 如果你配置了第三方PyPI源,先确认源地址可正常访问,也可临时切换为官方源测试,在pyproject.toml中添加以下配置:
[[tool.poetry.source]] name = "pypi" url = "https://pypi.org/simple/" priority = "default"
- 重新执行依赖安装流程
- 如果不需要升级项目依赖的版本,只重新生成符合新版本Poetry规范的lock文件,执行:
poetry lock --no-update - 执行安装命令:
poetry install
- 如果不需要升级项目依赖的版本,只重新生成符合新版本Poetry规范的lock文件,执行:
异常排查
如果执行安装时仍然出现JSONDecodeError,先执行poetry cache clear --all pypi清理所有包缓存,再检查WSL的网络连接是否正常,确保可以访问配置的PyPI源。
内容的提问来源于stack exchange,提问作者StressedBoi69420
相关产品推荐
相关产品推荐

