DEBUG.WIKI
OnlineSIM:在线接收短信,虚拟号码租用
Evoxt;最高 6.0GHz CPU;高频云服务器 · 免费每周备份;查看配置 →
野草云;香港 200Mbps 峰值;不限月流量 · BGP VPS;查看套餐 →

Poetry no-binary 拒绝 ruamel.yaml,使用规范化包名

Poetry 配置 no-binary 拒绝合法的带点发行包名时,使用规范化的 ruamel-yaml,保留原有包策略,区分发行包名称与 Python 导入名。

给 Poetry 配置只从源码构建 ruamel.yaml,却收到 "ruamel.yaml" is an invalid value for installer.no-binary。点号是合法的发行包名称字符;这类错误应先检查配置值验证,不要把依赖改成另一个包,或修改 Python 代码中的 import。

正式 Poetry 2.5.1 的 PackageFilterPolicy.validator 只允许字母、数字、下划线和连字符,没有接受点号;而它稍后的名称规范化本来会把点号转成连字符。因此可以直接在这项配置中使用规范化的发行包名称。

在当前项目中使用 ruamel-yaml

如果原来没有其他 no-binary 条目,可以在项目根目录设置本地配置:

poetry config --local installer.no-binary ruamel-yaml

--local 把设置写入当前项目的 Poetry 配置,而不是用户全局配置。先查看原值;原本已经列出其他包时,应保留完整名单再修改,不能用这一条命令无意覆盖原策略。多个名称使用该配置支持的逗号分隔形式。

ruamel.yaml、ruamel-yaml 和相应下划线形式按发行包名称规范会归一到同一个名字。这不意味着 Python 的 import ruamel.yaml 应改成 import ruamel-yaml;发行包选择与模块导入使用不同语法。

也不要把包换成 PyYAML。名称看起来相近,并不表示它们是同一发行物,API 和行为也不能据此互换。

只改变包名拼写,不扩大策略范围

installer.no-binary 让选中的包避免使用 wheel,可能需要本机编译器、系统开发库,并增加安装成本。解决值验证之后,还要确认项目确实希望强制源码构建。把值改成 :all: 会影响所有包,不能作为一个带点名称被拒的通用绕过。

同一类包过滤策略还用于 installer.only-binary 等设置,应按实际报错的配置键使用规范化名字,不要同时给相互冲突的策略添加同一个包。通过环境变量传入未经验证的字符串也许能避开这一入口,但直接使用规范化名称更便于审查,且不依赖验证缺口。

截至 2026 年 10 月 26 日,正式 2.5.1 仍有上述验证正则。该处理不要求修改项目的依赖版本或重新生成全部锁定内容。

验收先确认配置读取显示了预期的规范化包名和原来的其他条目,再在受控安装中核对该包实际选择的发行形式。若随后报缺编译器或系统头文件,是进入源码构建后的新问题;不能因为配置已经保存就声称安装也已完成。需要回退时恢复原策略值,并保留本次工具版本和配置差异。