fix(build): init副本命名修正(副本名=目录名,独立initout输出目录)+增量跳过(产物新于源码不重编)——首跑44个init全FAIL实抓:点号进模块名AssertionError+子包mv名不符
This commit is contained in:
parent
7e310ec653
commit
3ef5e43554
@ -62,24 +62,33 @@ voucher:voucher
|
||||
tenant:tenant
|
||||
"
|
||||
|
||||
# 生成编译任务:src dest mode stem
|
||||
# 生成编译任务:src dest mode stem cout
|
||||
# init 分支(2026-09-17 首跑实抓两处 bug 的修正):
|
||||
# ① 副本名必须**恰好等于目录名**(顶层=包名/子包=子包名)——曾拼成 init_<pkg>_<dir>.py,
|
||||
# dir="." 时点号进模块名触发 Nuitka AssertionError;子包副本名带前缀则产物 .so 名与
|
||||
# mv 目标不符 FAIL(mv)。实验定型形态:cp 成 <目录名>.py。
|
||||
# ② init 的编译输出目录用独立 $WORK/initout/<pkg>(不能直接进最终 dest:Nuitka 按
|
||||
# 副本 stem 命名产物,需 mv 成 __init__.<tag>.so)。
|
||||
gen_jobs() {
|
||||
local pkgdir=$1 outpkg=$2
|
||||
find "$pkgdir" -name "*.py" -not -path "*__pycache__*" -not -name "test_*" \
|
||||
-not -path "*/tests/*" -not -path "*/.git/*" | while read -r f; do
|
||||
local rel=${f#$pkgdir/} dir stem src mode
|
||||
local rel=${f#$pkgdir/} dir stem src mode cout
|
||||
dir=$(dirname "$rel"); stem=$(basename "$f" .py)
|
||||
local destdir="$OUT/$outpkg"; [ "$dir" != "." ] && destdir="$OUT/$outpkg/$dir"
|
||||
if [ "$stem" = "__init__" ]; then
|
||||
# 改名 trick:副本名=该包目录最后一段(顶层=包名,子包=子包名)
|
||||
local comp; comp=$(basename "$dir"); [ "$dir" = "." ] && comp=$outpkg
|
||||
src="$WORK/init_${outpkg}_${dir//\//_}.py"
|
||||
src="$WORK/initcopy/$outpkg/$comp.py"
|
||||
mkdir -p "$(dirname "$src")" "$WORK/initout/$outpkg"
|
||||
cp "$f" "$src"
|
||||
mode=init; stem=$comp
|
||||
mode=init; stem=$comp; cout="$WORK/initout/$outpkg"
|
||||
else
|
||||
src=$f; mode=mod
|
||||
src=$f; mode=mod; cout=$destdir
|
||||
fi
|
||||
printf "%s\t%s\t%s\t%s\n" "$src" "$destdir" "$mode" "$stem" >> "$JOBS"
|
||||
# 增量:产物 .so 比源码新则跳过(重跑只补缺/失败项)
|
||||
local sofinal="$destdir/$stem.$TAG.so"; [ "$mode" = init ] && sofinal="$destdir/__init__.$TAG.so"
|
||||
if [ -f "$sofinal" ] && [ "$sofinal" -nt "$f" ]; then continue; fi
|
||||
printf "%s\t%s\t%s\t%s\t%s\n" "$src" "$destdir" "$mode" "$stem" "$cout" >> "$JOBS"
|
||||
done
|
||||
# 包内数据文件原样进覆盖层(不用 rsync:目标机可能没装)
|
||||
mkdir -p "$OUT/$outpkg"
|
||||
@ -105,14 +114,16 @@ for f in "$ROOT"/app/*.py; do
|
||||
done
|
||||
|
||||
cat > "$WORK/worker.sh" <<'EOS'
|
||||
src=$1; dest=$2; mode=$3; stem=$4
|
||||
src=$1; dest=$2; mode=$3; stem=$4; cout=$5
|
||||
tag="cpython-310-x86_64-linux-gnu"
|
||||
mkdir -p "$dest"
|
||||
out=$("$PYBIN" -m nuitka --module "$src" --output-dir="$dest" --remove-output 2>&1)
|
||||
mkdir -p "$dest" "$cout"
|
||||
out=$("$PYBIN" -m nuitka --module "$src" --output-dir="$cout" --remove-output 2>&1)
|
||||
rc=$?
|
||||
if [ $rc -ne 0 ]; then echo "FAIL $src :: $(echo "$out" | tail -2)" >> "$FAILLOG"; exit 0; fi
|
||||
if [ "$mode" = init ]; then
|
||||
mv "$dest/$stem.$tag.so" "$dest/__init__.$tag.so" 2>/dev/null || { echo "FAIL(mv) $src" >> "$FAILLOG"; exit 0; }
|
||||
mv "$cout/$stem.$tag.so" "$dest/__init__.$tag.so" 2>/dev/null || { echo "FAIL(mv) $src" >> "$FAILLOG"; exit 0; }
|
||||
else
|
||||
[ -f "$cout/$stem.$tag.so" ] || { echo "FAIL(no-so) $src" >> "$FAILLOG"; exit 0; }
|
||||
fi
|
||||
echo "OK $src" >> "$OKLOG"
|
||||
EOS
|
||||
@ -120,7 +131,11 @@ export PYBIN=$PY
|
||||
export FAILLOG OKLOG
|
||||
total=$(wc -l < "$JOBS")
|
||||
echo "编译任务 $total 个,并行 4 …"
|
||||
xargs -a "$JOBS" -P 4 -n 4 bash "$WORK/worker.sh"
|
||||
xargs -a "$JOBS" -P 4 -n 5 bash "$WORK/worker.sh"
|
||||
# 清理 .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
|
||||
find "$OUT" -maxdepth 4 -type d -name "*.build" | while read -r d; do rm -rf "$d" 2>/dev/null; done
|
||||
ok=$(wc -l < "$OKLOG"); fail=$(wc -l < "$FAILLOG")
|
||||
echo "完成: OK=$ok FAIL=$fail"
|
||||
if [ "$fail" -gt 0 ]; then echo "== 失败清单 =="; cat "$FAILLOG"; exit 1; fi
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user