介绍
现在已知 BenchTicket 的获批版本,但相同名称与版本的发行包仍可能包含不同代码。本独立环境提供正确来源、受控替换包及独立批准目录。
你将让安装方案接受精确获批字节、拒绝直接或间接依赖的变化,同时继续使用合法镜像。命令建立在首个 guided 实验之上。所有 wheel 均为合成内容,不涉及公共包服务或漏洞利用。
理解版本标签为何不够
本步骤比较正确示例与同版本替换包。从 Terminal 开始:
cd /home/labex/project/ticket-build
/opt/labex-lookalike/demo
正常 T101 金额为 3200,32.00。已保存的要求锁定 prices 1.4.0 和 labels 1.0.0。本实验安装程序接受目标环境与 wheel 目录两个参数。--no-index 禁用索引查询;--find-links 搜索指定目录。
创建一次性演示环境:
python3 -m venv --without-pip .trial
bash install.sh .trial '/opt/labex-lookalike/sources/changed direct'
引号保留这个路径参数内的空格。两个版本仍与目录一致:
python3 -m pip --isolated --python .trial show benchticket-prices benchticket-labels
.trial/bin/python quote.py orders.csv
T101 现在为 3300,33.00。此替换包具有有效 wheel 结构,元数据未变,仅代码不同。名称与版本没有绑定预期字节。
将候选字节与独立批准比较
本步骤区分测量文件与批准文件。SHA-256 为精确字节生成摘要;摘要不同意味着文件不同。
阅读单独提供的目录:
cat /opt/labex-lookalike/approval/packages.tsv
pip hash 测量 wheel。测量获批文件:
python3 -m pip hash /opt/labex-lookalike/sources/approved/benchticket_prices-1.4.0-py3-none-any.whl
其摘要与目录一致。再测量同名替换包:
python3 -m pip hash '/opt/labex-lookalike/sources/changed direct/benchticket_prices-1.4.0-py3-none-any.whl'
摘要不同。计算新哈希不代表替换包获批。训练假设是:项目外的独立目录经可信审查渠道送达;哈希本身不能识别发布者。
必须同时约束 prices 与 labels。否则间接依赖被改变,即使 prices 包保持不变,显示金额仍可能变化。
约束完整依赖集合
本步骤将经过审查的字节保存为 pip 要求。每个版本与其 --hash=sha256: 值放在同一行:
cat > requirements.txt <<'EOF'
benchticket-prices==1.4.0 --hash=sha256:db50f7ff915dcc6cbdbf5b0afe2be55849ee70a8c7b55c44b1b3dab5deb806f9
benchticket-labels==1.0.0 --hash=sha256:3b3d881be08017aee54a825aaf3da158cd0b00b69f6d3f89744e8473f879baef
EOF
--require-hashes 要求完整依赖集合(包括间接包)均锁定版本并带哈希。--force-reinstall 还会替换已安装的同版本包,避免把先前试验误当成全新检查。
cat > install.sh <<'EOF'
#!/bin/bash
set -e
python3 -m pip --isolated --python "$1" install --force-reinstall --require-hashes --no-cache-dir --no-index --find-links "$2" -r requirements.txt
EOF
让 requirements.txt 相对于当前项目目录,使两个方案文件可以一起迁移。目标属于调用者,无需 sudo。保留两个参数的引号:第一个选择环境,第二个选择提供的 wheel 目录。方案必须实际使用第二目录,不能静默取用其他来源。它应接受提供的任意获批 wheel 副本并拒绝变化字节。
哈希输错应使安装停止。对照独立目录修正要求,不要用失败候选包的摘要替换批准内容。
构建并交付获批票价
本步骤在主环境使用修正后的方案。与之前的试验分开创建环境:
python3 -m venv --without-pip .venv
bash install.sh .venv /opt/labex-lookalike/sources/approved
两个获批包均应安装。生成真实交付物:
.venv/bin/python quote.py orders.csv --output handover.csv
cat handover.csv
预期保留原 ID 和数量,总额依次为 3200、1200、1600、0、4200 分。检查整个文件:
diff -u /opt/labex-lookalike/approval/reference.csv handover.csv
没有输出表示匹配。这同时检验计算和标签;仅看到两个已安装版本会漏掉代码变化。如果先前误装了变化字节,向本方案提供获批来源时,强制重装会恢复获批代码。保持原调用程序与订单不变。
拒绝被修改的间接依赖
本步骤在不损坏有效价目表的情况下检验拒绝。changed indirect 目录包含获批 prices,但 labels 被同版本包替换。
python3 -m venv --without-pip .blocked
下一次安装预期因哈希不匹配而失败,退出状态为 1:
bash install.sh .blocked '/opt/labex-lookalike/sources/changed indirect'
Pip 报告 THESE PACKAGES DO NOT MATCH THE HASHES,并显示 labels 的预期与收到的摘要。立即读取原生状态:
echo $?
预期为 1。连接失败、路径或解释器缺失属于其他错误,不能证明哈希拒绝。如果路径输错,返回 ticket-build,用 ls 列出条目,再重复一次性试验。
失败安装可能留下不完整的 .blocked 环境,它不是交付物。有效 .venv 与 handover.csv 必须仍可用:
.venv/bin/python quote.py orders.csv
预期五行均正确。不要为让被拒来源安装而削弱可信哈希清单。
接受未被修改的镜像
本步骤证明方案仍允许合法构建。镜像是存有相同获批文件的另一位置;路径包含空格,用于练习带引号的参数。
python3 -m venv --without-pip '.mirror environment'
bash install.sh '.mirror environment' '/opt/labex-lookalike/sources/approved mirror'
'.mirror environment/bin/python' quote.py orders.csv
预期再次得到五个正确订单。拒绝所有来源、忽略所提供的来源参数或依赖现有环境,均不满足契约。
交付物包括保存的安装方案、完整带哈希要求、实际主环境及正确 handover.csv。试验环境仅用于受控演示。新依赖或获批发行版需要重新审查字节;自动添加来源报告的任意哈希会消除保护。
练习建立的是所提供原始 wheel 的边界。它不能证明获批包没有漏洞,也不能证明整个构建在所有平台均可复现。
总结
你区分了版本元数据与发行包精确字节,约束直接和间接依赖,并拒绝同版本替换。原售票工具仍生成每个正确订单,未改变的镜像仍可用。独立批准目录是信任输入,候选包不能批准自己。



