开发工具
代码检查/格式化/测试
flake8
有点像 pycodestyle:确保代码风格符合规范。
与 black 兼容,实际上,当前的 flake8 配置直接取自 black
代码合规性可以通过以下命令简单测试:
flake8 <file-or-directory>
您可以使用
# noqa: <QA-CODE> 例如 # noqa: E731 以允许 lambda 赋值
来绕过 flake8 对某行的检查
pre-commit
一个 Python 工具,它读取配置文件 (.pre-commit-config.yaml) 并安装其中指定的 git 提交钩子。
Git 提交钩子是本地的,因此所有想使用它们的人都需要单独安装。这可以通过以下命令完成:
pre-commit install
该工具还可以安装 pre-push 钩子。这可以通过以下命令单独完成:
pre-commit install --hook-type pre-push --config .pre-push-config.yaml
git pre-commit 钩子
自动运行 black
自动修复尾随空格、文件末尾空行,排序 requirements.txt
检查没有意外添加大型文件(>512kb)
自动运行 flake8
自动运行 cspell
注意:如果钩子修复了某些内容(例如尾随空格或使用 black 重新格式化),这些更改不会自动添加和提交。您必须再次添加修复后的文件并再次运行 commit。我认为这是一种安全措施:不要盲目接受来自 git 钩子的更改。
注意 2:钩子只会在您 git add 到 commit 中的文件上运行。这与 CI 流水线不同,CI 流水线总是测试所有内容。
注意 3:如果某个单词被标记为拼写错误但应该保留,您可以将该单词添加到
.dict-speechbrain.txt
中。
git pre-push 钩子
Black 和 flake8 作为整个仓库的检查
对整个仓库运行单元测试和 doctests
这些钩子只能在完整环境中运行,因此如果您安装了它们,您需要在推送前激活 virtualenv 等环境。
pytest doctests
这不是一个额外的依赖项,只是 doctests 现在使用 pytest 运行。使用:
pytest --doctest-modules <file-or-directory>
因此,您可以在 docstring 示例中使用一些 pytest 特性。我认为最值得注意的是:
tmpdir = getfixture('tmpdir')
,它创建一个临时目录并为您提供其路径,而无需使用with tempfile.TemporaryDirectory() as tmpdir:
持续集成
什么是 CI?
对紧凑合并计划的通用术语
通常辅以自动化测试和代码评审工具 + 实践
CI / CD 流水线
GitHub Actions(也作为第三方解决方案提供)功能,它能够自动响应 git 事件并执行任何操作。
CI 流水线由 pull requests 触发。
在 GitHub 提供的 Ubuntu 环境中运行
GitHub 提供有限的免费 CI 流水线分钟数。
CD 代表持续部署,请查看“发布新版本”部分。
我们的测试套件
运行代码检查器。这意味着 black 和 flake8。它们在 speechbrain(库目录)、recipes 中的所有内容和 tests 中的所有内容上运行。
请注意,black 仅在需要更改文件时才会报错,但在此阶段不会重新格式化任何内容。您需要对您的代码运行 black 并推送新的 commit。black 提交钩子有助于避免这些错误。
运行所有单元测试和 doctests。您可以通过在推送前自己运行它们来检查它们是否通过,使用
pytest tests
和pytest --doctest-modules speechbrain
集成测试(最小示例)。最小示例既用于说明基本任务和实验运行,也作为工具包的集成测试。为此,任何以
example_
为前缀的文件都会被 pytest 收集,并且我们在最小示例的末尾添加一个简短的test_
函数。目前,这些测试未运行:docstring 格式测试(这应该在 docstring 转换完成后添加)。
如果所有测试都通过,整个流水线需要几分钟时间。