安裝報告

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: 套件的 metadata,已轉換成 JSON 物件,符合 PEP 566 轉換

  • is_direct: 如果需求是提供給或限制成直接 URL 連結,則為 true。如果該需求是提供給名稱和版本規格,則為 false

  • is_yanked: 如果需求從索引中移除,但仍由 pip 選擇,則為 true,此情形符合 PEP 592

  • 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

會產生類似以下的輸出 (為了簡略起見,已縮減 metadata)

{
  "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"
  }
}