我使用一个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"]

否则.

推荐答案

以下几点应该可以做到这一点:

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

一百零一:

Python相关问答推荐

Pandas 填充条件是另一列

Pystata:从Python并行运行stata实例

时间序列分解

从numpy数组和参数创建收件箱

将图像拖到另一个图像

在ubuntu上安装dlib时出错

给定高度约束的旋转角解析求解

如果满足某些条件,则用另一个数据帧列中的值填充空数据帧或数组

实现神经网络代码时的TypeError

Python中的变量每次增加超过1

将scipy. sparse矩阵直接保存为常规txt文件

如果初始groupby找不到满足掩码条件的第一行,我如何更改groupby列,以找到它?

干燥化与列姆化的比较

Python 3试图访问在线程调用中实例化的类的对象

递归函数修饰器

你能把函数的返回类型用作其他地方的类型吗?'

如何在SQLAlchemy + Alembic中定义一个"Index()",在基表中的列上

极点用特定值替换前n行

我怎样才能让深度测试在OpenGL中使用Python和PyGame呢?

无法使用请求模块从网页上抓取一些产品的名称