出為 CycloneDX SBOM?uv export --format cyclonedx1.5)
uv 如何把 uv.lock 導(dǎo)出為 CycloneDX SBOMuv export --format cyclonedx1.5【免費(fèi)下載鏈接】uvAn extremely fast Python package and project manager, written in Rust.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/uv/uv當(dāng)你需要把 Python 項(xiàng)目的依賴清單交給安全審計(jì)、合規(guī)檢查或供應(yīng)鏈分析工具時(shí)可以用 uv 把項(xiàng)目鎖文件uv.lock導(dǎo)出為 CycloneDX 格式的 SBOMSoftware Bill of Materials。執(zhí)行uv export --format cyclonedx1.5后uv 會(huì)生成一個(gè) JSON 編碼的 CycloneDX v1.5 文檔包含項(xiàng)目本身及其全部依賴。這個(gè)功能適用于已經(jīng)具備uv.lock的 uv 項(xiàng)目需要注意的是CycloneDX 導(dǎo)出目前處于 preview預(yù)覽狀態(tài)后續(xù)版本可能隨時(shí)調(diào)整。前提項(xiàng)目里要有 uv.lockuv export的輸入是項(xiàng)目的鎖文件。確認(rèn)項(xiàng)目目錄里已有uv.lock如果還沒有或依賴聲明pyproject.toml有變更可以先運(yùn)行uv lock生成或更新它。uv 的鎖文件機(jī)制包括uv lock、uv sync的用法見 locking and syncing 文檔。導(dǎo)出命令在項(xiàng)目根目錄執(zhí)行$ uv export --format cyclonedx1.5命令默認(rèn)把 JSON 打印到 stdout方便直接管道給下游工具。如果要落盤成文件用--output-file$ uv export --format cyclonedx1.5 --output-file sbom.jsonuv export支持三種格式requirements.txt、pylock.toml、cyclonedx1.5通過--format切換格式總覽見 Exporting a lockfile。處理 preview 警告由于 CycloneDX 導(dǎo)出是預(yù)覽功能首次運(yùn)行時(shí) stderr 會(huì)輸出警告warning: uv export --formatcyclonedx1.5 is experimental and may change without warning. Pass --preview-features sbom-export to disable this warning.這不影響導(dǎo)出結(jié)果只是提醒格式可能變化。如果不想每次都看到它可以顯式啟用sbom-export這個(gè) preview feature啟用方式見 Preview features 文檔$ uv export --format cyclonedx1.5 --preview-features sbom-export或者通過環(huán)境變量$ UV_PREVIEW_FEATURESsbom-export uv export --format cyclonedx1.5如果希望整個(gè)項(xiàng)目固定啟用該特性也可以在uv.toml或pyproject.toml的[tool.uv]中寫入preview-features [sbom-export]也可以直接用--preview標(biāo)志或UV_PREVIEW1環(huán)境變量一次性啟用全部 preview 功能但范圍更大通常推薦按特性啟用。驗(yàn)證輸出內(nèi)容成功時(shí)命令退出碼為 0stdout或指定文件是如下結(jié)構(gòu)的 JSON 文檔。下面是倉(cāng)庫(kù)測(cè)試快照中的一個(gè)示例結(jié)果做了刪節(jié)serialNumber、timestamp等值每次運(yùn)行都會(huì)不同{ bomFormat: CycloneDX, specVersion: 1.5, version: 1, metadata: { tools: [ { vendor: Astral Software Inc., name: uv, version: [VERSION] } ], component: { type: library, bom-ref: project-10.1.0, name: project, version: 0.1.0 } }, components: [ { type: library, bom-ref: urllib3-22.2.0, name: urllib3, version: 2.2.0, purl: pkg:pypi/urllib32.2.0, externalReferences: [ { type: distribution, url: https://files.pythonhosted.org/packages/.../urllib3-2.2.0-py3-none-any.whl, hashes: [ { alg: SHA-256, content: ce3711610ddce217e6d113a2732fafad960a03fd0318c91faa79481e35c11224 } ] } ] } ], dependencies: [ { ref: project-10.1.0, dependsOn: [urllib3-22.2.0] }, { ref: urllib3-22.2.0 } ] }示例中的關(guān)鍵字段bomFormat與specVersion標(biāo)識(shí)這是 CycloneDX 1.5 文檔metadata.component是項(xiàng)目根CycloneDX 要求恰好一個(gè)根組件components列出各依賴帶purl和分發(fā)包的 SHA-256 哈希dependencies描述依賴關(guān)系圖。uv 還會(huì)在組件上附加兩個(gè)自定義屬性供下游工具使用uv:package:marker環(huán)境標(biāo)記例如python_version 3.8uv:workspace:pathworkspace 成員的相對(duì)路徑。默認(rèn)情況下導(dǎo)出的組件會(huì)帶上哈希信息如果下游工具不需要可加--no-hashes省略。限制與邊界CycloneDX 導(dǎo)出在 preview 階段官方文檔明確提示may change in any future release即格式和字段可能在后續(xù)版本中改變。用于 CI 或歸檔時(shí)建議記錄生成時(shí)的 uv 版本。導(dǎo)出內(nèi)容來自u(píng)v.lock因此先保證鎖文件與pyproject.toml中的依賴聲明一致必要時(shí)先跑uv lock再導(dǎo)出。關(guān)于其他兩種導(dǎo)出格式requirements.txt、pylock.toml的取舍export 文檔中的建議是uv.lock本身比導(dǎo)出文件表達(dá)能力更強(qiáng)如果發(fā)現(xiàn)自己需要長(zhǎng)期維護(hù)一份導(dǎo)出的requirements.txt可以考慮向項(xiàng)目提交 issue 討論使用場(chǎng)景?!久赓M(fèi)下載鏈接】uvAn extremely fast Python package and project manager, written in Rust.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/uv/uv創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考