已关闭
[Bug]: 在线安装最新 PyPI 包不支持文档中的 --show-releases 参数 #204
肾炝喜鲤创建于  7月7日关闭于  8月19日
肾炝喜鲤
肾炝喜鲤
7月7日 创建

问题描述

当前中文下载文档和下载参数说明中已经指导用户通过在线安装方式执行:

ascend-download --show-releases

用于查看软件包配套版本。但使用当前 PyPI 最新发布包 ascend-deployer==7.3.0 安装后,ascend-download 命令并不识别 --show-releases 参数,会直接退出。

这会导致在线安装用户按文档执行配套版本查询时失败。

复现步骤

  1. 查看文档中的在线安装下载步骤:

    rg -n "ascend-download --show-releases|--show-releases" docs/zh/05_installation_and_upgrade/01_download_softwares.md docs/zh/06_api/01_download_parameter.md
    
  2. 在隔离环境安装当前 PyPI 最新版本:

    python3 -m venv /tmp/ascend-deployer-pip-test
    . /tmp/ascend-deployer-pip-test/bin/activate
    pip install --no-cache-dir ascend-deployer==7.3.0
    
  3. 执行文档中的配套版本查询命令:

    ascend-download --show-releases
    

实际结果

命令退出失败,提示参数不识别:

usage: ascend-download [-h] [--os-list <OS> [<OS> ...]]
                       [--download <PKG>|<PKG>==<Version> [<PKG>|<PKG>==<Version> ...]]
ascend-download: error: unrecognized arguments: --show-releases

进一步检查当前 PyPI wheel,包内也没有 ascend_deployer/downloader/release_config.json:

ascend_deployer/downloader/release_config.json False

预期结果

建议根据实际发布节奏选择一种处理方式:

  1. 如果当前文档面向已经发布的在线安装版本,则 PyPI 包应同步支持 --show-releases,并随包携带 release_config.json 等必要配置。
  2. 如果该能力尚未发布,则文档中应明确该参数的最低版本要求,或暂时不要在在线安装路径中指导用户使用该参数。
  3. 增加打包/安装后的命令回归测试,覆盖:
    • ascend-download --help
    • ascend-download --show-releases
    • bash start_download.sh --show-releases

影响

  • 在线安装用户无法按文档查看软件配套版本。
  • 用户可能继续用不配套的软件版本下载/安装,增加后续安装失败和定位成本。
  • 文档、开发分支能力和 PyPI 发布包能力不一致,容易造成“文档可用、安装后不可用”的体验问题。

本地验证环境

代码分支:Ascend/ascend-deployer dev,HEAD 326c7da1
PyPI 包:ascend-deployer==7.3.0
Python:3.11
likedislike
ascend-robotascend-robot成员
7月7日 添加了label:bug
xiangjie10成员
7月7日 评论:

👋 您好,感谢向 ascend-deployer 提交 Issue!
🎉 我们已收到您的反馈,感谢你对开源社区的支持!

📅 处理时效 维护团队将在工作日 24 小时内查看并回复您的问题。
🔍 自助排查(推荐优先查看) 在等待回复期间,您可以先查阅仓库README以及历史 Issue 中相似问题的解决方案,多数问题可快速解决。
💡 为了更快定位问题,请您确保 Issue 包含:

  • 清晰的问题描述
  • 可复现的操作步骤
  • 相关日志、截图或环境信息
    我们会尽快跟进,感谢您的理解与配合!
likedislike
xiangjie10成员
7月7日 评论:

/label add triaged

likedislike
ascend-robotascend-robot成员
7月7日 添加了label:triaged
肾炝喜鲤肾炝喜鲤
7月7日 关联了pull request:确保配套版本配置随下载器打包
Wu,Qiang-RoyWu,Qiang-Roy成员
7月7日 issue状态由 TODO 改变为 Analysing
ascend-robotascend-robot成员
7月7日 关联了看板:MindStudio ISSUE管理
xuchuan成员
7月11日 评论:

因为--show-releases该参数是目前开发完合入主线,还未打包发布到pypi

likedislike
xuchuan成员
7月11日 评论:

/label add resolved

likedislike
ascend-robotascend-robot成员
7月11日 添加了label:resolved
ascend-robot
ascend-robot成员
7月18日 评论:

您好,当前Issue标记为resolved且有一段时间未进一步更新,因此我们将其标记为'stale'(闲置)状态。若您认为这是误操作,可通过添加任意评论来去除'stale'标签。标记为stale的Issue在4天内无更新活动将自动关闭。

likedislike
ascend-robotascend-robot成员
7月18日 添加了label:stale
肾炝喜鲤
肾炝喜鲤
7月19日 评论:

进展更新:问题已确认源于主线能力尚未发布到 PyPI。相关打包契约与回归补强见 PR !2220,当前 CLA、CI 和文档检查均已通过;后续继续跟进新版本发布及人工检视。

likedislike
肾炝喜鲤
肾炝喜鲤
7月19日 评论:

/label remove stale

likedislike
ascend-robotascend-robot成员
7月19日 删除了label:stale
ascend-robot
ascend-robot成员
7月26日 评论:

您好,当前Issue标记为resolved且有一段时间未进一步更新,因此我们将其标记为'stale'(闲置)状态。若您认为这是误操作,可通过添加任意评论来去除'stale'标签。标记为stale的Issue在4天内无更新活动将自动关闭。

likedislike
ascend-robotascend-robot成员
7月26日 添加了label:stale
肾炝喜鲤
肾炝喜鲤
7月29日 评论:

按父任务 #126 的检视要求,补充本 Issue 的设计文档与自验证报告。以下材料只覆盖本 Issue,不代表父任务整体已经验收。

设计文档

#126-204 发布包能力一致性设计文档

目录

1. 评审目标

确认配套版本配置应作为显式运行时包数据,并由回归测试保护
ascend-download --show-releases 的“展示后直接退出”语义。

项目 内容
父任务 #126
改进 Issue #204
对应 PR !2220
PR head 7664d34a51f6228cc1f687a013b79744559cba67
目标分支 dev@3fef2e620246ca72879920bf8ff26e52c2f0cb91

2. 问题边界

中文资料已经指导在线安装用户执行:

ascend-download --show-releases

但 PyPI 最新公开版本 7.3.0 不识别该参数,wheel 也没有
ascend_deployer/downloader/release_config.json。代码 PR 可以保护后续构建,
但不能追溯修改已发布的 7.3.0。

3. PR 设计

!2220 修改两个文件:

  1. setup.py 显式声明:

    package_data={
        'ascend_deployer': ['downloader/release_config.json'],
    }
    
  2. test/st/test_release_package.py:

    • 调用 CLI 的 --show-releases 路径;
    • 断言 show_releases() 被调用一次;
    • 断言不会继续调用下载逻辑;
    • 通过 AST 读取 setup() 的 package_data,避免依赖源码排版。

4. 方案取舍

A/B 构建显示,当前 dev 即使没有 !2220,也可能通过
MANIFEST.in + include_package_data=True 把配置文件带入 wheel。

因此 !2220 的准确价值是:

  • 把运行时数据依赖从隐式打包行为变为显式契约;
  • 防止未来 MANIFEST 或 setuptools 行为变化造成漏包;
  • 保护 CLI 展示完成后不进入下载流程。

它不是当前 dev wheel 携带配置文件的唯一必要条件,也不能代替正式发版。

5. 验收标准

  • 新增测试在项目支持的 Python 版本上通过;
  • wheel 包含 release_config.json;
  • 全新环境安装后 ascend-download --show-releases 返回 0;
  • CI、CLA 和安全门禁通过;
  • 新版本发布后对真实 PyPI 安装路径再次回归。

6. 当前状态与限制

2026-07-29 API 回读确认 !2220 open、mergeable,当前 head 的 CLA、文档和主 CI
通过;#204 仍 open。PyPI 官方 API 同日确认最新版仍为 7.3.0,所以用户侧发布
闭环仍是外部待办。

7. 目标、非目标与约束

目标是让运行时配置的打包意图和 CLI 返回语义可被测试。非目标是声称 !2220 是
当前 dev 唯一打包机制、追溯修改 PyPI 7.3.0 或替维护者执行发版。约束是保持现有
CLI 参数和输出兼容,并承认 MANIFEST.in 的现有作用。

8. 需求与评审意见追踪

来源 要求 决定 证据 状态
#204 文档能力与公开包一致 显式包数据 + CLI 回归 测试、构建、安装 候选已验证
A/B 复核 判断 PR 是否唯一必要 降级为契约/防回归叙事 两组均通过 已收敛
发布边界 新版公开安装可用 合入后发版并复跑 旧 7.3.0 失败 external-pending

9. 总体架构与职责边界

flowchart LR
    S["源码配置"] -->|由 setup.py / MANIFEST 声明| W["wheel"]
    W -->|安装到| E["隔离环境"]
    E -->|执行| C["ascend-download --show-releases"]
    C -->|读取| J["release_config.json"]
    C -->|展示后返回| U["用户"]

仓库负责构建契约与回归;发布流程负责上传新版本;PyPI 用户路径负责最终验证。

10. 代表性主流程

sequenceDiagram
    participant Build as 构建
    participant Wheel as wheel
    participant CLI as ascend-download
    participant Config as release_config.json
    Build->>Wheel: 打包显式运行时数据
    Wheel->>CLI: 安装命令入口
    CLI->>Config: 读取配套版本
    Config-->>CLI: 返回版本表
    CLI-->>CLI: 展示后直接返回

11. 关键类或组件关系

setup.py 和 MANIFEST.in 共同影响包内容;ascend_download.py 负责参数分支;
download_util.show_releases() 消费配置。!2220 不增加公共接口。

12. 兼容、迁移与版本策略

无需用户配置迁移。合入后必须通过新版本号发布;旧 7.3.0 保持原行为。回滚会移除
显式声明和测试,但当前隐式打包链可能仍让构建通过,因此门禁需同时核对声明和行为。

自验证报告

#126-204 自验证报告

目录

1. 验证基线

项目 内容
本地验证日期 2026-07-21
集成基线 dev@bcf91984
PR head 7664d34a51f6228cc1f687a013b79744559cba67
Python 3.8.8、3.10.20
状态刷新 2026-07-29

2. 公开发布物验证

在隔离环境安装当时及当前仍为最新版的 ascend-deployer==7.3.0:

wheel 包含 release_config.json:否
ascend-download --show-releases 退出码:2
错误:unrecognized arguments: --show-releases

2026-07-29 再次通过 PyPI 官方 JSON API 确认最新版仍是 7.3.0;本轮没有重新安装
wheel,因此命令行为沿用 2026-07-21 的实跑证据。

3. PR 目标测试

执行:

python3.8 -m pytest test/st/test_release_package.py -q
python3.10 -m pytest \
  test/st/test_release_package.py test/st/test_download.py -q

结果:

Python 3.8:2 passed,1 warning
Python 3.10:20 passed,2 warnings

警告是既有依赖的弃用提示。

4. 构建与安装验证

将 !2219 和 !2220 临时叠加到验证基线后:

sdist/wheel 构建:通过
wheel 包含 release_config.json:是
全新环境安装:通过
ascend-download --show-releases:退出码 0

5. A/B 对照

验证项 仅基线 + !2219 再应用 !2220
wheel 包含配置 是 是
全新环境安装 通过 通过
--show-releases 退出码 0 退出码 0

对照证明 !2220 是显式契约和回归保护,不应被描述为当前 dev 成功打包的唯一原因。

6. 远端状态

2026-07-29 GitCode API 回读:

Issue #204:open;标签含 resolved、stale
PR !2220:open、mergeable
head:7664d34a
门禁:CLA、docs CI、主 CI passed

7. 结论与限制

提交方证据支持 PR 候选的测试、构建和安装后 CLI 行为。PR 尚未合入,新 PyPI
版本也未发布,因此不能把 #204 写成用户侧最终闭环。

8. 验证范围

覆盖 PyPI 7.3.0 实装行为、!2220 目标测试、与 !2219 联合构建、隔离安装、CLI
E2E 和 A/B。未覆盖新版本发布后的公开安装、所有 Python 小版本或生产镜像。

9. 不可变环境基线

实跑固定为 2026-07-21:dev@bcf91984、!2220 7664d34a,
Python 3.8.8/3.10.20、setuptools 82.0.1、wheel 0.47.0。远端与 PyPI 版本状态于
2026-07-29 回读。

10. 需求到验证矩阵

要求 场景 结果 证明 未证明
包含运行时配置 构建后检查 两组均包含 当前构建可用 !2220 唯一必要
展示后返回 目标测试 / 安装后 CLI passed / exit 0 候选控制流 新 PyPI
公开用户可用 7.3.0 实装 exit 2 当前缺口存在 未来版本

11. 自验证结果总览

范围 结果 分类
PR 目标测试 3.8: 2 passed;3.10: 20 passed verified
联合构建与安装 通过 verified
A/B 两组均通过 verified
PR 合入 / 新版发布 未发生 external-pending

12. 故障与负向链路

旧 PyPI exit 2 是公开负向基线;A/B 对照否定“只有 package_data 才能成功”的过强
因果;回归测试还断言展示后不进入下载逻辑,防止成功输出后继续产生副作用。

13. 兼容与迁移验证

Python 3.8/3.10 目标测试通过,隔离安装后 CLI 返回 0。没有数据迁移;版本迁移依赖
发布新包。Python 3.6 未实跑。

14. 限制与提交方结论

提交方结论是 !2220 的显式契约和防回归价值有证据支持。它尚未合入或发布,不能
称为 #204 的公开用户侧最终闭环。

likedislike
ascend-robotascend-robot成员
7月29日 删除了label:resolvedstale
yangpeng197成员
7月29日 评论:

/label add feature

likedislike
ascend-robotascend-robot成员
7月29日 添加了label:feature
肾炝喜鲤肾炝喜鲤
8月19日 关闭了 issue
Xxiangjie10成员
27 天前 issue状态由 Analysing 改变为 DONE