程序化获取自己的pyproject.toml依赖项

2 投票
1 回答
48 浏览
提问于 2025-04-12 16:59

我使用一个 pyproject.toml 文件来列出一个包所需要的依赖项:

[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"

[project]
name = "foobar"
version = "1.0"
requires-python = ">=3.8"
dependencies = [
  "requests>=2.0",
  "numpy",
  "tomli;python_version<'3.11'",
]

在这个包内部,有没有办法获取自己依赖项的列表,并以字符串的形式显示出来?在上面的例子中,应该返回

["requests", "numpy"]

如果使用的是 Python 版本大于等于 3.11 的话,另外

["requests", "numpy", "tomli"]

则返回其他内容。

1 个回答

1

下面的内容应该可以解决你的问题:

import importlib.metadata
import packaging.requirements

def _get_dependencies(name):
    rd = metadata(name).get_all('Requires-Dist')
    deps = []
    for req in rd:
        req = packaging.requirements.Requirement(req)
        if req.marker is not None and not req.marker.evaluate():
            continue
        deps.append(req.name)
    return deps

参考资料:

撰写回答