Twine上传包至AWS CodeArtifact时额外上传大量依赖包如何解决
解决Twine上传AWS CodeArtifact时意外上传第三方依赖包的问题
根本原因
Twine本身不具备自动扫描、上传包依赖的能力,你遇到的大量第三方包被同步上传的问题,是通配符匹配范围过大导致的:
你使用的target/dist/*/dist/*.tar.gz通配符,会匹配到pybuilder构建过程中缓存到target目录下的所有第三方依赖包的安装包产物,Twine只是按命令要求上传了所有匹配到的文件。
上图中未标记的第三方包均为通配符误匹配后被Twine上传的内容。
解决方法
- 第一步先校验当前通配符的匹配结果,执行如下命令查看所有要上传的文件:
ls target/dist/*/dist/*.tar.gz
确认输出列表中是否包含非自研的第三方包。 - 优化通配符缩小匹配范围
如果你的自研包名固定,可将通配符限制为只匹配你的包名前缀的产物,修改后的上传命令示例为:twine upload --repository codeartifact target/dist/*/dist/你的包名-*.tar.gz - 固定构建产物输出目录(更稳定的方案)
在pybuilder的build.py配置文件中添加规则,将自研包的构建产物单独输出到项目根目录下的独立文件夹(例如my_dist),之后上传时直接匹配该目录下的所有文件即可,完全避免误匹配第三方缓存包,命令如下:twine upload --repository codeartifact ./my_dist/* - 上传前预校验
每次正式上传前可添加--dry-run参数执行测试,确认待上传的文件列表符合预期后再正式执行:twine upload --dry-run --repository codeartifact target/dist/*/dist/你的包名-*.tar.gz
补充说明
你在CodeArtifact中配置的PyPI上游仓库是生效的,只要不在仓库中存储冗余的第三方依赖包,安装自研包时会自动从上游拉取对应依赖,不会影响使用。
内容的提问来源于stack exchange,提问作者Sam Mylle
相关产品推荐
相关产品推荐

