diff --git a/scripts/build_binary.sh b/scripts/build_binary.sh index 5be106d..a7f2eaa 100644 --- a/scripts/build_binary.sh +++ b/scripts/build_binary.sh @@ -110,11 +110,14 @@ echo "$MANIFEST" | grep -v '^$' | while read -r entry; do gen_jobs "$pkgdir" "$pkg" done -# 入口与 app 顶层模块(script 形态,编译成顶层模块进 _appbin;5 字段与 worker 对齐) -mkdir -p "$OUT/_appbin" +# 入口与 app 顶层模块(script 形态;5 字段与 worker 对齐)。 +# 入口 .so 放 **overlay 顶层**(2026-09-17 实抓):入口模块 top-level 有 +# root_dir = dirname(dirname(__file__)) 形态(accounting worker 拿它 getConfig)——虚拟 +# __file__=overlay/.py 时上两级恰为应用根;放 _appbin/ 子目录则上两级=overlay 崩。 +mkdir -p "$OUT" for f in "$ROOT"/app/*.py; do stem=$(basename "$f" .py) - printf "%s\t%s\tmod\t%s\t%s\n" "$f" "$OUT/_appbin" "$stem" "$OUT/_appbin" >> "$JOBS" + printf "%s\t%s\tmod\t%s\t%s\n" "$f" "$OUT" "$stem" "$OUT" >> "$JOBS" done cat > "$WORK/worker.sh" <<'EOS' @@ -138,10 +141,13 @@ echo "编译任务 $total 个,并行 4 …" xargs -a "$JOBS" -P 4 -n 5 bash "$WORK/worker.sh" # app 命名空间包(2026-09-17 编译态起服务实抓):入口目录 app/ 无 __init__.py,源码态靠 # sys.path 插 root_dir 以命名空间包形式被 `from app.quality_gate import ...` 引用;编译态 -# 必须把 app 模块 .so 复制一份进 overlay/app/(无 __init__ = 命名空间包,py3 原生支持 -# 目录内 .so 子模块)。_appbin 顶层副本保留给入口自身 `from ktv_adapter import ...` 形态。 +# 把入口模块 .so 复制一份进 overlay/app/(无 __init__ = 命名空间包,py3 原生支持目录内 +# .so 子模块)。overlay 顶层副本服务入口自身 `from ktv_adapter import ...` 与 root_dir 语义。 mkdir -p "$OUT/app" -cp "$OUT"/_appbin/*.so "$OUT/app/" 2>/dev/null +for f in "$ROOT"/app/*.py; do + stem=$(basename "$f" .py) + cp "$OUT/$stem.$TAG.so" "$OUT/app/" 2>/dev/null +done # 清理 .build 残留(NFS 上 rm -rf 偶发 Directory not empty;--remove-output 只删自己那轮) find "$OUT" -maxdepth 4 -type d -name "*.build" -exec rm -rf {} + 2>/dev/null find "$OUT" -maxdepth 4 -type d -name "*.build" -exec rm -rf {} + 2>/dev/null @@ -150,28 +156,25 @@ ok=$(wc -l < "$OKLOG"); fail=$(wc -l < "$FAILLOG") echo "完成: OK=$ok FAIL=$fail" if [ "$fail" -gt 0 ]; then echo "== 失败清单 =="; cat "$FAILLOG"; exit 1; fi -# runner(工具脚本,非业务代码,保留源码形态) -cat > "$OUT/_appbin/run_compiled.py" <<'EOS' +# runner(工具脚本,非业务代码,保留源码形态;放 _runners/ 不污染 overlay 顶层模块面) +mkdir -p "$OUT/_runners" +cat > "$OUT/_runners/run_compiled.py" <<'EOS' #!/usr/bin/env python3 """编译态入口 runner:sys.argv 原样透传给 ahserver webapp 的参数解析。 -sys.path 顺序:_appbin(入口编译模块) > overlay 根(编译业务包,遮蔽 site-packages 源码) > 其余。""" +sys.path:overlay 根(入口编译模块+业务包,遮蔽 site-packages 源码)。""" import os, sys -_here = os.path.dirname(os.path.abspath(__file__)) -_overlay = os.path.dirname(_here) +_overlay = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, _overlay) -sys.path.insert(0, _here) import pipeline_app pipeline_app.main() EOS -cat > "$OUT/_appbin/run_accounting_compiled.py" <<'EOS' +cat > "$OUT/_runners/run_accounting_compiled.py" <<'EOS' #!/usr/bin/env python3 """编译态记账 worker runner:sys.argv 透传(-w workdir)。""" import os, sys -_here = os.path.dirname(os.path.abspath(__file__)) -_overlay = os.path.dirname(_here) +_overlay = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, _overlay) -sys.path.insert(0, _here) import pipeline_accounting_worker pipeline_accounting_worker.main() EOS diff --git a/start.sh b/start.sh index a15ca09..e22f112 100755 --- a/start.sh +++ b/start.sh @@ -36,7 +36,7 @@ echo "Starting pipeline-app ($MODE mode) on port $PORT..." export PATH="$WORKDIR/bin:$PATH" # Nuitka 编译态开关(2026-09-17):conf/compiled_mode 文件存在 → 用 overlay 的编译入口; # 删除该文件即回退源码态。overlay 与 runner 由 scripts/build_binary.sh 产出(测试机构建)。 -COMPILED_ENTRY=$WORKDIR/binpkg_overlay/_appbin/run_compiled.py +COMPILED_ENTRY=$WORKDIR/binpkg_overlay/_runners/run_compiled.py if [ -f "$WORKDIR/conf/compiled_mode" ] && [ -f "$COMPILED_ENTRY" ]; then ENTRY="$COMPILED_ENTRY" else @@ -59,8 +59,8 @@ if [ "$MODE" != "web" ]; then fi fi if [ ! -f "$ACC_PIDFILE" ]; then - if [ -f "$WORKDIR/conf/compiled_mode" ] && [ -f "$WORKDIR/binpkg_overlay/_appbin/run_accounting_compiled.py" ]; then - ACC_ENTRY="$WORKDIR/binpkg_overlay/_appbin/run_accounting_compiled.py" + if [ -f "$WORKDIR/conf/compiled_mode" ] && [ -f "$WORKDIR/binpkg_overlay/_runners/run_accounting_compiled.py" ]; then + ACC_ENTRY="$WORKDIR/binpkg_overlay/_runners/run_accounting_compiled.py" else ACC_ENTRY="$WORKDIR/app/pipeline_accounting_worker.py" fi