
使用 uv 开发 Flower Datasets贡献者环境搭建、质量检查与依赖管理完全指南【免费下载链接】flowerFlower: A Friendly Federated AI Framework项目地址: https://gitcode.com/GitHub_Trending/flo/flower本文面向希望参与Flower Datasetsflwr-datasets开发的贡献者完整讲解基于uv的开发工作流从克隆仓库后的环境同步、一键运行全部质量检查与单元测试、代码自动格式化、文档构建、端到端E2E测试到规范的依赖管理与锁文件更新。读完本文你将掌握flwr-datasets项目贡献者日常使用的全部命令并能理解每条命令背后在仓库中对应的脚本与配置实现。为什么 Flower Datasets 选择 uv 作为开发工具Flower Datasets 的开发与 CI 全程基于uv中明确说明Flower Datasets usesuvfor development and CI.从仓库配置可以印证这一选择的落地细节datasets/pyproject.toml 中声明了[tool.uv]段default-groups [dev]意味着默认uv sync就会把开发依赖组一并安装无需额外参数[dependency-groups]中的dev组集中定义了isort、black[jupyter]、taplo、mypy、pylint、parameterized、pytest、pytest-watcher、ruff、devtool等一整套代码质量工具[tool.uv.sources]中通过devtool { path ../dev, editable true }以可编辑模式引入仓库根目录dev/下的内部工具包仓库根目录存在 datasets/uv.lock版本 1、revision 3 的锁文件锁定了全部传递依赖的精确版本保证团队与 CI 环境完全可复现。下文的所有命令均假设你已克隆 Flower 仓库git clone后进入仓库根目录并准备好 Python 3.11 环境flwr-datasets要求requires-python 3.11。第一步环境同步Setup进入datasets目录并通过uv同步环境安装全部依赖含可选 extrascd datasets uv sync --all-extras几点说明uv sync会依据pyproject.toml与uv.lock创建/复用虚拟环境并安装依赖--all-extras会安装pyproject.toml中定义的所有可选特性依赖。当前仓库中flwr-datasets定义了visionpillow12.2.0与audiotorch2.10.0、torchcodec0.7.0两个 extra涉及视觉、音频类数据集的处理路径因此全量同步对开发最保险由于[tool.uv]设置了default-groups [dev]dev 依赖组lint/format/test 工具会被默认装入无需手动指定。官方 tip务必遵守如果你希望严格保证uv.lock不被改动应使用uv sync --frozen --all-extras--frozen让 uv 跳过锁文件的重新解析与更新在 CI 或需要精确复现环境时是推荐姿势。第二步运行全部检查格式检查 单元测试环境就绪后一键运行项目定义的全部静态检查与单元测试cd datasets uv run ./dev/test.shuv run会在项目虚拟环境中执行脚本因此无需手动激活环境。该命令对应的实现位于 datasets/dev/test.sh脚本以set -e开头任何一步失败都会立即终止并返回非零退出码。从源码看它会按顺序执行以下检查isortpython -m isort --check-only flwr_datasets/仅检查不修改导入语句排序是否符合规范blackpython -m black --check flwr_datasets/仅检查代码格式是否符合 black 风格init_py_checkpython -m devtool.init_py_check flwr_datasets/调用仓库根目录dev/devtool/中的内部工具校验各包__init__.py的完整性/一致性copyrightpython -m devtool.check_copyright flwr_datasets/校验源码文件是否包含规范的版权头参考 datasets/dev/format.sh 中的 Apache License 2.0 头部模板ruffpython -m ruff check flwr_datasets/Lint 检查pyproject.toml中[tool.ruff.lint]启用了Dpydocstylenumpy 约定、E、F、W、B、ISC、C4、UP等规则组mypypython -m mypy flwr_datasets/严格模式[tool.mypy]中strict true的类型检查pylintpython -m pylint flwr_datasets/额外 Lint 检查pyproject.toml中禁用了duplicate-code、too-few-public-methods、useless-import-aliastaplotaplo fmt --check对 TOML 文件如pyproject.toml、taplo.toml做格式校验pytestpython -m pytest flwr_datasets/运行flwr_datasets包内的全部单元测试pyproject.toml中[tool.pytest.ini_options]设置了minversion 6.2、addopts -qq、testpaths [./]。全部通过后会输出- All Python checks passed。这条命令是提交 PR 前最重要的体检入口。第三步自动格式化Format当test.sh中的--check类检查报出格式问题时运行格式化脚本自动修复cd datasets uv run ./dev/format.sh从 datasets/dev/format.sh 的源码看该脚本按以下顺序处理TOML 部分taplo fmt格式化 TOML 文件Python 部分python -m devtool.check_copyright flwr_datasets/先做版权头检查python -m isort flwr_datasets/排序导入python -m black -q flwr_datasets/以静默模式格式化代码python -m ruff check --fix flwr_datasets/自动修复可修复的 Lint 问题Notebook 部分python -m black --ipynb -q docs/source/*.ipynb格式化文档目录下的 Jupyter Notebookpython -m nbstripout --keep-output docs/source/*.ipynb --extra-keys ...清理 Notebook 元数据中的编辑器相关键如cell.metadata.id、cell.metadata.tags、vscode、pycharm等同时保留输出。格式化完成后建议重新运行test.sh确认全部检查通过。第四步构建文档Build docsFlower Datasets 的文档采用 Sphinx 体系见 datasets/docs/source/conf.py 与 datasets/docs/source/index.rst。贡献者指南中给出的构建命令为cd datasets uv run ./dev/build-flwr-datasets-docs.sh需要说明的是在当前仓库快照中datasets/dev/目录实际包含的是format.sh、lock-e2e.sh、publish.sh、rm-caches.sh、test.sh五个脚本文档中提到的build-flwr-datasets-docs.sh属于 CI/发布流程中的文档构建入口其功能与仓库根datasets/docs目录下的Makefile、make.bat对应也可通过 Sphinx 的make html等目标在本地构建。因此在本地验证文档改动时可参考仓库根目录的 datasets/docs/Makefile 使用 Sphinx 的标准构建方式并最终以 CI 中的该命令作为权威校验。第五步运行 E2E 测试单元测试之外项目为每个支持的深度学习框架维护了独立的端到端测试工程位于datasets/e2e/下的pytorch、scikit-learn、tensorflow三个子目录。以 PyTorch 为例cd datasets/e2e/pytorch uv sync --frozen uv run python -m unittest discover -p *_test.py然后再对另外两个目录重复同样的操作cd datasets/e2e/scikit-learn uv sync --frozen uv run python -m unittest discover -p *_test.py cd datasets/e2e/tensorflow uv sync --frozen uv run python -m unittest discover -p *_test.pyE2E 工程本身是独立可解析的 Python 项目。以 datasets/e2e/pytorch/pyproject.toml 为例它声明了flwr-datasets[vision]通过[tool.uv.sources]以path ../..可编辑方式指向本地datasets源码、torch2.10.0,3.0.0、torchvision0.25.0,1.0.0以及parameterized0.9.0。因此每个 E2E 目录都有自己独立的uv.lock这也是为什么官方指南要求进入对应目录后先uv sync --frozen。E2E 测试的实际内容可从 datasets/e2e/pytorch/pytorch_test.py 一窥究竟。该测试通过parameterized_class参数化了两组 CIFAR10 配置一组只做ToTensor()另一组叠加Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))然后用FederatedDataset(datasetcifar10, partitioners{train: 100})构建 100 个分区的联邦数据集并load_partition(0, train)取出第 0 个分区对分区执行train_test_split(test_size0.2, seed42)切出训练子集通过with_transform应用图片变换后交给torch.utils.data.DataLoader断言 batch 的形状(16, 3, 32, 32)、类型dict、张量类型Tensor并实际训练一轮 SimpleCNN验证 loss 既不是 NaN 也不是 Inf。这套用例覆盖了FederatedDataset → 分区 → DataLoader → 训练的完整链路是验证flwr-datasets与 PyTorch 生态集成是否正常的关键防线。依赖管理规范不使用uv pip项目明确约定依赖管理统一走uv的声明式工作流而不是uv pip这类临时安装命令。在datasets目录下cd datasets # 添加一个运行时依赖 uv add package # 添加一个开发依赖进入 dev 依赖组 uv add --dev package # 添加一个可选特性extra依赖例如 vision uv add --optional vision package # 更新锁文件结果需要提交入库 uv lock各命令与 datasets/pyproject.toml 中的结构一一对应不带参数的uv add package会写入[project].dependencies运行时依赖区当前已有numpy1.26.0,3.0.0、datasets4.0.0,5.0.0、tqdm4.66.1,5.0.0、rich14.0.0,15.0.0、matplotlib3.7.5,4.0.0、seaborn0.13.0,0.14.0--dev写入[dependency-groups].dev--optional vision package写入[project.optional-dependencies].vision每次变更依赖后运行uv lock重新生成 datasets/uv.lock并把锁文件变更作为提交内容的一部分——这正是保证开发环境与 CI 可复现的核心约定。补充其他维护脚本datasets/dev/下还提供了两个与本工作流配套的脚本贡献者可一并了解datasets/dev/lock-e2e.sh依次进入e2e/pytorch、e2e/scikit-learn、e2e/tensorflow三个目录执行uv lock用于在修改 E2E 工程依赖后统一刷新三份锁文件datasets/dev/publish.sh发布脚本通过环境变量PYPI_REPOSITORY_PASSWORD校验后执行uv publish --token ${PYPI_REPOSITORY_PASSWORD}属于维护者发布流程普通贡献者无需执行。贡献者日常开发流程小结把上述步骤串起来一个典型的flwr-datasets贡献循环是cd datasets uv sync --all-extras首次或依赖变更后同步环境追求可复现时加--frozen修改flwr_datasets/源码或docs/source/文档uv run ./dev/format.sh自动格式化含 Notebookuv run ./dev/test.sh跑全部静态检查与单元测试直至全部通过涉及框架集成改动时进入datasets/e2e/pytorch以及scikit-learn、tensorflow执行uv sync --frozen uv run python -m unittest discover -p *_test.py涉及文档改动时按 Sphinx 流程本地构建验证改动依赖时用uv add系列命令声明并uv lock后把锁文件一并提交。这一套uv 统一驱动的开发体验配合 datasets/dev/test.sh 中从 isort、black、ruff、mypy、pylint 到 pytest 的层层把关让贡献者在提交前就能获得与 CI 一致的质量反馈是参与 Flower Datasets 开发最值得先掌握的工作流。【免费下载链接】flowerFlower: A Friendly Federated AI Framework项目地址: https://gitcode.com/GitHub_Trending/flo/flower创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考