From aff1f0da0c6d92b130474e6f1cfa89dd3a4a4b8c Mon Sep 17 00:00:00 2001 From: "agent.develop" Date: Sun, 20 Sep 2026 19:12:05 +0800 Subject: [PATCH] M11b-2a: resolve root-package spec compliance (rev2: tighten packaging surface, record real import evidence) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - pyproject.toml: [tool.setuptools.packages.find] where=[.] include=[world_sync*] namespaces=false — 把「仓库根从不作为包」固化为配置约束,杜绝双路径歧义回归。 - 承接 9f97d58(删除仓库根 157 行转发 __init__.py)。 - 实测更正:sys.path=modules/(模块父目录)场景 在删除前(01941aa 沙箱)与删除后同样 ImportError(解析到 init/ 目录), 非本次删除引入的回归;宿主真实解析路径为 venv editable finder → pkgs 副本内层包,实测 OK。 证据见 projects/pbls/docs/02-develop/m11b2a-1-root-package-disposition.md §4(rev2)。 --- pyproject.toml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index be4f3ad..3dd25f9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,6 +8,21 @@ version = "1.0.0" requires-python = ">=3.8" dependencies = ["sqlor", "bricks_for_python"] +# 打包面显式收紧(M11b-2a-1 rev2,响应 QC #14 改法 (b) 的合规部分) +# --------------------------------------------------------------------------- +# 事实基线(实测,见 projects/pbls/docs/02-develop/m11b2a-1-root-package-disposition.md §4.3): +# find_packages(where=".", include=["world_sync*"]) == ['world_sync'] +# 即 setuptools 只发现内层包 ./world_sync/(仓库根 "." 本身从不被当作包, +# 删除前根级 __init__.py 也从未进入 wheel/egg-link 打包面)。 +# 这里显式写死 namespaces=false,目的是把该事实固化为配置约束而非巧合: +# ① 防止未来有人往仓库根/`init/`/`json/`/`models/` 等数据目录放 __init__.py +# 或开启 namespace 发现,使 `world_sync` 出现两个候选落点(双路径歧义); +# ② 保证 `pip install -e` 生成的 __editable___world_sync_*_finder.MAPPING +# 恒指向 /world_sync(内层包目录),与宿主 apps/scense 实测一致。 +# 唯一受支持的导入根 = 仓库根目录(或 editable finder 映射), +# 不支持把 modules/(模块父目录)放进 sys.path —— 该场景实测 ImportError, +# 且删除根包前后同样失败(详见处置文档 §4.2/§4.3)。 [tool.setuptools.packages.find] where = ["."] include = ["world_sync*"] +namespaces = false