安装报告

在版本 22.2 中添加。

在版本 23.0 中更改: version 已更新至 1 并且格式声明为稳定。

pip install 命令的 --report 选项会生成一个详细的 JSON 报告,其中包含它所安装的内容(或者如果与 --dry-run 选项一起使用,则包含它将要安装的内容)。

注意

在考虑用例时,请牢记

  • 虽然 --report 选项可用于实现需求锁定工具(以及其他用例),但此格式并非专门用于锁定文件格式;

  • pip 不会计划将安装报告作为 installdownloadwheel 命令的输入。

  • 虽然 --report 选项和此格式是 pip 的受支持功能,但它不是 PyPA 的互操作性标准,因此它的演变受 pip 流程控制,而不是 PyPA 标准化流程。

规范

该报告是一个 JSON 对象,包含以下属性

  • version: 字符串 1。它只会更改在引入向后不兼容的更改时,例如删除必填字段或更改现有字段的语义或数据类型。引入向后不兼容的更改将遵循 pip 的通常流程,例如弃用周期或功能标志。工具必须检查此字段以确保它们支持相应的版本。

  • pip_version: 一个字符串,包含用于生成报告的 pip 版本。

  • install: 一个 InstallationReportItem 数组,表示要安装的(或将要安装的)发行版包。

  • environment: 一个对象,描述生成安装报告的环境。有关更多信息,请参见 PEP 508 环境标记。值具有字符串类型。

一个 InstallationReportItem 是一个对象,描述一个要安装的(或将要安装的)发行版包,具有以下属性

  • metadata: 发行版的元数据,根据 PEP 566 转换 转换为 JSON 对象。

  • is_direct: 如果需求是作为直接 URL 引用提供的,或者被约束为直接 URL 引用,则为 true。如果需求是作为名称和版本规范提供的,则为 false

  • is_yanked: 如果需求从索引中被撤回,但仍根据 PEP 592 被 pip 选择,则为 true

  • download_info: 使用 直接 URL 数据结构,有关要下载的安装工件的信息。当 is_directtrue 时,此字段与 direct_url.json 元数据相同,否则它表示从索引或 --find-links 获取的工件的 URL。

    注意

    对于源代码存档,当需求从轮子缓存中安装且缓存条目由旧版本的 pip(未记录下载工件的原始 URL)填充时,download_info.archive_info.hashes 可能不存在。

  • requested: 如果需求是由用户显式提供的,无论是通过命令行参数直接提供,还是通过需求文件间接提供,则为 true。如果需求是作为另一个需求的依赖项安装的,则为 false

  • requested_extras: 用户请求的额外功能。此字段仅在 requested 字段为 true 时存在。

示例

以下命令

pip install \
  --ignore-installed --dry-run --quiet \
  --report - \
  "pydantic>=1.9" git+https://github.com/pypa/packaging@main

将产生类似于以下内容的输出(元数据为了简洁而简化)

{
  "version": "1",
  "pip_version": "22.2",
  "install": [
    {
      "download_info": {
        "url": "https://files.pythonhosted.org/packages/a4/0c/fbaa7319dcb5eecd3484686eb5a5c5702a6445adb566f01aee6de3369bc4/pydantic-1.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
        "archive_info": {
          "hashes": {
            "sha256": "18f3e912f9ad1bdec27fb06b8198a2ccc32f201e24174cec1b3424dda605a310"
          }
        }
      },
      "is_direct": false,
      "is_yanked": false,
      "requested": true,
      "metadata": {
        "name": "pydantic",
        "version": "1.9.1",
        "requires_dist": [
          "typing-extensions (>=3.7.4.3)",
          "dataclasses (>=0.6) ; python_version < \"3.7\"",
          "python-dotenv (>=0.10.4) ; extra == 'dotenv'",
          "email-validator (>=1.0.3) ; extra == 'email'"
        ],
        "requires_python": ">=3.6.1",
        "provides_extra": [
          "dotenv",
          "email"
        ]
      }
    },
    {
      "download_info": {
        "url": "https://github.com/pypa/packaging",
        "vcs_info": {
          "vcs": "git",
          "requested_revision": "main",
          "commit_id": "4f42225e91a0be634625c09e84dd29ea82b85e27"
        }
      },
      "is_direct": true,
      "is_yanked": false,
      "requested": true,
      "metadata": {
        "name": "packaging",
        "version": "21.4.dev0",
        "requires_dist": [
          "pyparsing (!=3.0.5,>=2.0.2)"
        ],
        "requires_python": ">=3.7"
      }
    },
    {
      "download_info": {
        "url": "https://files.pythonhosted.org/packages/6c/10/a7d0fa5baea8fe7b50f448ab742f26f52b80bfca85ac2be9d35cdd9a3246/pyparsing-3.0.9-py3-none-any.whl",
        "archive_info": {
          "hashes": {
            "sha256": "5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"
          }
        }
      },
      "is_direct": false,
      "requested": false,
      "metadata": {
        "name": "pyparsing",
        "version": "3.0.9",
        "requires_dist": [
          "railroad-diagrams ; extra == \"diagrams\"",
          "jinja2 ; extra == \"diagrams\""
        ],
        "requires_python": ">=3.6.8"
      }
    },
    {
      "download_info": {
        "url": "https://files.pythonhosted.org/packages/75/e1/932e06004039dd670c9d5e1df0cd606bf46e29a28e65d5bb28e894ea29c9/typing_extensions-4.2.0-py3-none-any.whl",
        "archive_info": {
          "hashes": {
            "sha256": "6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"
          }
        }
      },
      "is_direct": false,
      "requested": false,
      "metadata": {
        "name": "typing_extensions",
        "version": "4.2.0",
        "requires_python": ">=3.7"
      }
    }
  ],
  "environment": {
    "implementation_name": "cpython",
    "implementation_version": "3.10.5",
    "os_name": "posix",
    "platform_machine": "x86_64",
    "platform_release": "5.13-generic",
    "platform_system": "Linux",
    "platform_version": "...",
    "python_full_version": "3.10.5",
    "platform_python_implementation": "CPython",
    "python_version": "3.10",
    "sys_platform": "linux"
  }
}