修复uv换源 - #373
Conversation
|
Hi @Mikachu2333 ❤️ 感谢你的贡献!我们将在最少半小时,最多5天内阅读此 PR 并回复你 |
|
cmd有点恶心了,竟然没法处理 |
There was a problem hiding this comment.
Pull request overview
该 PR 针对 uv recipe 修复“只换 PyPI、不换 Python 解释器下载镜像”的问题:在 uv.toml/pyproject.toml 中同时管理 [[index]] / [[tool.uv.index]] 与 python-install-mirror,并引入内部轻量 TOML 字符串改写模块与配套单测,接入现有测试入口(Makefile/just)。
Changes:
- 重写
uv的 get/set/reset 流程:项目级同时支持uv.toml与pyproject.toml([tool.uv]),并补齐python-install-mirror的换源。 - 新增
uv-helper.c作为受限 TOML 读写/改写工具,替代外部 grep/sed/PowerShell 依赖,并新增对应单元测试。 - 补充文档与测试接入(Makefile/justfile),并做少量仓库维护性变更(gitignore、编辑器设置、贡献者信息更新)。
Reviewed changes
Copilot reviewed 13 out of 15 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| test/xy.c | 更新测试文件头部的作者/贡献者联系方式 |
| test/uv-helper-test.c | 新增 uv-helper 的单元测试(覆盖 uv.toml/pyproject.toml 与 CRLF 等场景) |
| src/recipe/recipe-template.c | 更新模板文件头部的贡献者联系方式 |
| src/recipe/lang/Python/uv.c | 重写 uv 配置读写与 get/set/reset;支持 pyproject.toml;新增 python-install-mirror 处理与内部镜像测速 target |
| src/recipe/lang/Python/uv-helper.c | 新增受限 TOML 字符串读写/改写模块(供 uv.c 与测试复用) |
| src/recipe/lang/Python/common.h | PyPI 源列表行对齐/格式微调 |
| src/chsrc-main.c | 更新 contributor 注册信息(邮箱) |
| Makefile | 将 uv-helper-test 接入 make test 并纳入 clean |
| lib/xy.h | 更新库头部贡献者联系方式 |
| justfile | 增加 uv-helper-test 的构建/运行入口并纳入 test/clean |
| doc/12-uv换源实现说明.md | 新增 uv 换源实现说明文档(配置优先级、reset 策略、实现边界) |
| doc/10-如何编写recipe.md | 更新文档头部贡献者信息,并新增/调整开发准则条目 |
| .vscode/settings.json | 增加 clangd 相关设置(禁用) |
| .gitignore | 增加忽略 *.pdb |
| .github/workflows/PR-test.yml | 更新 workflow 文件头部贡献者联系方式 |
Suppressed comments (1)
doc/10-如何编写recipe.md:120
- 开发准则第 4 条以中文逗号结尾但没有后续内容,属于不完整的文档条目。
- 新增 uv-helper.c,提供 uv.toml 配置字符串改写工具 - 支持替换/插入 [[index]] 段的 url 与 default 行 - 支持替换/插入/删除顶层 python-install-mirror 键 - set 时同时配置 PyPI 索引源与 Python 下载源 - reset 时清理 [[index]] 的 url/default 与顶层 python-install-mirror - get 时读取并输出 python-install-mirror 配置 - 新增 uv-helper 单元测试并接入 make/just 测试流程 1
|
咱们在这里讨论。
我查了下,3.11 是 2022年10月发布的,距今已经有快4年。
是的,但是想了想,C语言的 recipe 如果存在大量自定义操作,维护成本太高了。 如果用 PowerShell,又兼顾不了 Linux、macOS 用户。 所以我还是建议直接用 Python 来换源,并提前用C语言检测版本, |
这个我同意,C的维护确实太麻烦
但这个我不同意,因为我经常需要帮别人通过uv干净地安装python,或者说在当下,通过uv安装python才是所有「现代化教程」的首选推荐,连python自己也推出了类似uv的 python-install-manger 就为了避免python的版本地狱和依赖问题。 一旦python通过全局安装,种种依赖问题便接踵而至,所以目前比较「现代化」的教程均推荐使用uv等进行python的版本管理,避免直接系统全局安装python及其依赖。 我的建议仍然不变,用其他语言写个简单的解析库,编译为lib,chsrc引用。这是维护成本最低的方法了。 如果按照项目readme所说,必须基于c完成,那我就没啥办法了,toml的格式本就多变,再加上c这个啥啥解析库都得手搓的情况(再叠加上LF/CRLF、 UTF-8 BOM等各种杂七杂八的情况),更是地狱级的 uv helper里面一大半都在各种错误处理 |
所以这条路其实是困难重重的
是的,所以我们不要手搓 |
我上述的描述,没有说要全局安装 python,如果系统里一个 python 都没有,或者有 python 但是 |
|
明白你的意思了,python 3.11以下直接docs提示,>3.11通过python script换源, @ccmywish 等等,python3.11自带的toml解析库也不能写入啊,写入还是得自己实现,这工程量区别不大了就…… |
当前我只实现了读这两个相关词条,其它一律跳过
确实,这点我没考虑过
关键在于用Python解析toml刚刚看了看也是极其难用的,只能实现读,与c的数据交互、写配置还是得重新实现。那引入了外部程序却还不能一次性实现,感觉收益有些低了。 我还是倾向于使用纯C解决。 尝试写了,但是越写越发现不对劲,问了问ai
|
这样吗?那确实降低了使用 tomllib 的意义。
这个确实是固有难点,现在的这个PR解决了这点吗?如果没解决,合并后我来考虑解决。 |
我认为可视为解决,详情如下。如果要求用户手动输入python mirror也正确响应,那就得靠你多费心了,这个我真写不明白,现在这个已经燃尽了
来自pr introduction |
问题描述
uv换源不完整,还需考虑Python解释器本身下载地址的换源 #358 , re-closeuv换源不完整,还需考虑Python解释器本身下载地址的换源 #309方案与实现
uv.cpyproject.toml与uv.tomlpython-build-standalone测速uv-helper.cuv-helper-test.c: 新增单元测试,接入 make test / just testMakefile/justfile: 编译uv-helper-test.cdoc/12-uv换源实现说明.md特殊的地方
chsrc set uv xxx潜在问题
uv-helper.c仅处理了一般常见情况和一点点常见的edge case(话说常见了还能叫edge case么),对极限情况不予支持(intended)REF