Skip to content

feat: resume verified on-demand runtime downloads and clean temporary artifacts #53

Description

@hyjd1314

背景

#49 已经让 HTTP 响应和读取阶段都有硬性边界:下载库即使忽略取消令牌,也不会无限卡住。

但现场测速显示 files.pythonhosted.org 在当前网络约为 51 KB/s。playwright-1.60.0 约 37.9 MiB,即使持续有进展也可能超过单次 15 分钟限时。当前失败清理 staging 后会从零重新下载,不能把“可诊断”误当成“可完成”。

目标

  • 保持受控按需下载、逐件 HTTPS 来源白名单和固定 SHA-256;不改用系统 Python、不放开任意镜像或动态依赖解析。
  • 在应用专属缓存中仅保留可验证的 .part 片段;按固定 artifact 身份、源和哈希隔离。
  • 下一次尝试使用 HTTP Range 续传;只有服务器返回严格匹配的 206 Content-Range 时才追加,否则安全地重新开始。
  • 每次完成后重新校验完整长度(若清单有)和 SHA-256;任一不匹配都丢弃片段并给出已脱敏错误。
  • 成功解压/安装/激活后删除 Python ZIP、bootstrap、完整 wheel 和 .part 缓存;不把原始压缩包长期留在用户机器。
  • 取消、超时、掉线和服务器不支持 Range 时均可安全重试,日志只记录阶段、错误码、文件名/序号和版本。

验收

  • 测试覆盖:从已下载前缀以 206 续传、服务器忽略 Range、错误 Content-Range、哈希失败、取消和成功后的清理。
  • 续传路径不会把不受信任的旧内容混入最终文件,且不会逃离应用管理缓存。
  • 慢速网络在多次有界尝试后能累积完成单个大 wheel,而不是每次从零开始。
  • 正常完成的运行时不残留原始下载文件或临时 wheel 目录。
  • 不打包 Python 运行时进正式安装器;桥接诊断包仍是独立、临时的排障工具。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions