Skip to content
← 返回发布与制品管理列表
发布与制品管理完整实践与解答

发布与制品管理:完整实践与解答 ​

需能阅读文件清单和摘要。本地制品示例用 Python 3.11+ 标准库与 zlib,把 payload/README.txt 打成 ZIP,并记录字节数与 SHA-256;输出目录必须全新。本页解释标识、晋级和回滚前提,示例只打包、不发布。 示例未在本轮执行;本页完整源码与README列出输入、阅读顺序和预期。

制品 完整打包源码 ​

制品完整打包源码使用Python标准库把固定文本打入ZIP并生成清单。示例未执行;输出只在读者指定的新目录,源码拒绝已存在目标,避免覆盖旧制品,不调用任何发布平台。

制品 摘要练习 ​

题目:README改一个字符但版本仍为1.0.0,摘要是否应相同?

参考答案

字节变化会改变SHA-256;同版本重新发布不同字节会破坏不可变性,应生成新版本或明确未发布草稿。

制品 清理恢复 ​

制品清理恢复只删除读者指定输出目录中的demo.zip与manifest.json,先核对路径和保留需要的摘要记录。示例没有线上状态,不存在远端回滚;删除本地包不能撤回已分发副本。

完整源码、配置与输入 ​

下列文件与仓库同源,包含完整实现和输入;不是运行证明。部分练习只需人工阅读配置,不强制构造模拟器。

payload/README.txt ​

text
Offline artifact example, version 1.0.0.
No deployment has occurred.

pack.py ​

python
import hashlib
import json
import sys
import zipfile
from pathlib import Path

def pack(output):
    output.mkdir(parents=True, exist_ok=False)
    source = Path(__file__).parent / "payload" / "README.txt"
    if source.is_symlink() or not source.is_file():
        raise ValueError("payload must be a regular file")
    content = source.read_bytes()
    target = output / "demo.zip"
    with zipfile.ZipFile(target, "x", compression=zipfile.ZIP_DEFLATED) as archive:
        archive.writestr("README.txt", content)
    digest = hashlib.sha256(target.read_bytes()).hexdigest()
    manifest = {"version": "1.0.0", "source": "fictional-offline-course",
                "files": [{"name": target.name, "bytes": target.stat().st_size,
                           "sha256": digest}]}
    with (output / "manifest.json").open("x", encoding="utf-8") as stream:
        json.dump(manifest, stream, indent=2)
        stream.write("\n")
    print("created demo.zip and manifest.json; not published")

if __name__ == "__main__":
    try:
        if len(sys.argv) != 2:
            raise ValueError("usage: python pack.py NEW_OUTPUT_DIRECTORY")
        pack(Path(sys.argv[1]))
    except (ValueError, OSError, zipfile.BadZipFile) as exc:
        print(str(exc), file=sys.stderr)
        sys.exit(2)

CHANGELOG.md ​

markdown
# Changelog

## 1.0.0 (fictional, unpublished)

Initial README-only artifact; no API or database changes.

requirements.txt ​

text
# Python 3.11+ standard library, including zlib support for ZIP_DEFLATED.

项目README与完整依赖 ​

README提供前置、完整自跑或阅读方式、预期、失败案例与恢复清理。本轮没有执行任何示例、产品CLI、模型或外部API。

markdown
# 发布与制品管理:完整教学包

示例未执行。全部输入为教学虚构资料,不能用于真实账号、生产数据或外部系统。

## 前置与依赖

Python3.11以上标准库及zlib。命令在PowerShell适用;Linux将python换python3。

## 文件与输入

- `payload/README.txt`:本包完整文件。
- `pack.py`:本包完整文件。
- `CHANGELOG.md`:本包完整文件。
- `requirements.txt`:本包完整文件。

## 读者将来自跑或阅读

复制本包所有文件到独立目录,在该目录作为当前工作目录。以下是读者自用资料,本轮禁止执行。

```text
python pack.py out-new
```

## 正常预期

创建全新out-new目录,其中demo.zip含README.txt,manifest.json记录ZIP字节数及SHA-256;未发布。

## 失败案例与恢复

再次使用同一个out-new会因已存在目录退出2;若磁盘失败可能留下部分输出,不能当有效制品。

## 清理及能力边界

不保证ZIP字节可复现;核对目录后仅移除新输出,不删除payload或上传任何包。

## 来源

- [官方依据](https://semver.org/lang/zh-CN/)(2026-10-17资料核对;不是运行证明)

依据与适用范围 ​

本课完成的是列明任务的理论与静态资料,不代表产品全部能力或三平台运行通过。历史文档保留旧URL;涉及账号、版本、价格与界面位置时,以对应官方资料及实际授权环境为准。

继续阅读