如何在pyproject.toml中指定含连字符或下划线的可选依赖?
如何在pyproject.toml中指定含连字符或下划线的可选依赖?
我来帮你理清这个问题~你遇到的矛盾其实是setuptools和pip对可选依赖名称的处理规则差异导致的:
问题根源
- setuptools要求
optional-dependencies下的键必须是有效的Python标识符——也就是说只能用字母、数字和下划线,不能有连字符,所以你用some-extra当键会直接报错。 - 而pip在解析安装命令里的额外依赖时,会自动把连字符转换成下划线去匹配setuptools定义的依赖项名称。
正确的解决方案
你只需要在pyproject.toml里用下划线命名可选依赖,然后安装时两种写法都能用:
- 先把
pyproject.toml的配置改成这样(用下划线):
[tool.setuptools.dynamic.optional-dependencies] some_extra = {file = ["requirements-some-extra.txt"]}
- 安装时,你可以任选一种方式:
- 直接用下划线匹配配置里的键:
pip install -e "./package[some_extra]" - 或者用连字符(pip会自动转成下划线去匹配):
pip install -e "./package[some-extra]"
- 直接用下划线匹配配置里的键:
为什么你之前会收到警告?
如果按照上面的配置还是出现警告,大概率是你的pip或setuptools版本太旧了——旧版本可能存在标识符映射的bug。建议先把这两个工具更新到最新版:
pip install --upgrade pip setuptools
这样就能正常使用带连字符或下划线的可选依赖啦~
备注:内容来源于stack exchange,提问作者dnlbschff
相关产品推荐
相关产品推荐

