本卡屬 FR-092(母卡 CM-1703),第 6 棒盤點。只盤不修、不動 pyproject。

這一棒在做什麼(白話)

主專案 pyproject 宣告了 60 多個第三方套件。第 2 棒(CM-1705)刪掉 PDF 工具鏈後,pdfplumber、pypdfium2 很可能沒人用了;其他套件也可能早就沒人 import 但一直裝著(每個都進 Nuitka 編譯與出貨 image,是體積與資安面)。你要列出「宣告了但主專案零 import」的套件,並查清是不是被 jedi 套件、build 腳本、或 Nuitka 的 --include-package 間接需要。

為什麼切這一塊

落地版出貨 image 每多一個套件就多一份授權盤點(2026-08 授權盤點 PyMuPDF 就是這樣抓到 AGPL)與 CVE 面。沒人用的套件是純成本。

重點看什麼

已知背景

本範圍從未系統性掃過。CM-1235(2026-08-18)拔 PyMuPDF 時只處理那一支。FR-069 D9 曾抓到 jedi 套件端 4 個虛掛依賴,主專案端沒對應盤過。

怎麼做

第一步:裝 deptry 到 scratchpad:

S=<你的 scratchpad>
poetry run python -m pip install -q --target "$S/tools" deptry
PYTHONPATH="$S/tools" poetry run python -m deptry . --ignore-notebooks -o "$S/deptry.json" --json-output "$S/deptry.json" 2>&1 | tail -40

第二步:deptry 的「宣告但未用」每條再做三查:① 主專案 grep -rn "^from <pkg>\|^import <pkg>" --include='*.py' .(注意 import 名與 pypi 名不同,如 PIL↔Pillow、google.generativeai↔google-generativeai、yaml↔pyyaml);② jedi 套件目錄同款 grep,並查該套件自己的 pyproject 有沒有宣告;③ scripts/build/ 兩檔 grep 套件名。

第三步:分四類——A 主專案與套件都零用、build 也沒列:可拔;B 主專案零用但某 jedi 套件在用且已自行宣告:主專案可拔;C 主專案零用、jedi 套件在用但沒宣告:套件 pyproject 缺漏,主專案暫不可拔;D build 腳本明列:要查為什麼列。

交付什麼