简体中文🀄 | English🌎
我们非常欢迎并希望您对PaddleNLP
做出开源贡献。在您开始提交您的贡献之前,请先行签署PaddlePaddle 贡献者许可协议。
本文接下来将介绍我们的开发与贡献流程:
我们欢迎不同的向PaddleNLP
做出贡献的方式,例如:
- 修复已知的Issue
- 提交新的Issue,例如提出功能需求或者bug报告
- 实现新的模型结构
如果您不知道从哪里开始,请查看Issues板块中的Good First Issue
标签。它为您提供一个对初学者友好的已知Issue列表,可以降低贡献的门槛,帮助您开始为开源做出贡献。您只需在您想处理的Issue中告知我们您想负责此Issue即可。
PaddleNLP 使用 Git 分支模型。对于常见的开源贡献,我们有以下的贡献流程:
因为PaddleNLP的开发社区一直在发展,如果每位贡献者都直接向官方Repo提交commit将会难以管理。因此,请从您的分支中提交 Pull Requests。建议您通过GitHub的“Fork”按钮来创建您的Fork分支。
请运行一下命令将您的分支clone到本地
git clone https://github.com/<your-github-account>/PaddleNLP
cd PaddleNLP
对于添加新功能或修复错误等日常工作,请在开发前创建您的本地开发分支:
git checkout -b my-cool-feature
在开始编码之前,您需要设置开发环境。我们强烈建议您在虚拟环境中进行所有开发,例如venv或conda。 请您设置并激活虚拟环境后,运行以下命令:
make install
这将设置 PaddleNLP
的所有依赖以及 pre-commit
工具。
如果您需要开发 examples
或 applications
模块并加载 PaddleNLP
,请确保以可编辑模式(-e
)安装 PaddleNLP
。
如果在虚拟环境中已经安装 PaddleNLP
,请使用 pip uninstall paddlenlp
将其删除,然后以可编辑模式重新安装它
pip install -e .
当您开发时,请确保您新增的代码会被单元测试所覆盖。我们所有的单元测试都可以在 tests
目录下找到。
您可以修改现有单元测试以覆盖新功能,也可以从头开始创建新测试。
当您完成代码时,您应该确保相关的单元测试可以通过。您可以像这样运行受更改影响的测试:
pytest tests/<test_to_run>.py
我们使用 pre-commit
工具(包括black、[isort](https:/ /pycqa.github.io/isort/) 和
flake8)来检查每次提交中的代码和文档的风格。当你运行 git commit
时,你会看到
类似于以下内容:
➜ (my-virtual-env) git commit -m "commiting my cool feature"
black....................................................................Passed
isort....................................................................Passed
flake8...................................................................Passed
check for merge conflicts................................................Passed
check for broken symlinks............................(no files to check)Skipped
detect private key.......................................................Passed
fix end of files.....................................(no files to check)Skipped
trim trailing whitespace.............................(no files to check)Skipped
CRLF end-lines checker...............................(no files to check)Skipped
CRLF end-lines remover...............................(no files to check)Skipped
No-tabs checker......................................(no files to check)Skipped
Tabs remover.........................................(no files to check)Skipped
copyright_checker........................................................Passed
但大多数时候事情并没有那么顺利。当您的代码或文档不符合标准时,pre-commit
检查将失败。
➜ (my-virtual-env) git commit -m "commiting my cool feature"
black....................................................................Passed
isort....................................................................Failed
- hook id: isort
- files were modified by this hook
Fixing examples/information_extraction/waybill_ie/run_ernie_crf.py
flake8...................................................................Passed
check for merge conflicts................................................Passed
check for broken symlinks............................(no files to check)Skipped
detect private key.......................................................Passed
fix end of files.....................................(no files to check)Skipped
trim trailing whitespace.............................(no files to check)Skipped
CRLF end-lines checker...............................(no files to check)Skipped
CRLF end-lines remover...............................(no files to check)Skipped
No-tabs checker......................................(no files to check)Skipped
Tabs remover.........................................(no files to check)Skipped
copyright_checker........................................................Passed
我们的工具将自动修复大部分样式错误,但是有些错误需要手动解决。幸运的是,错误信息一般通俗易懂,很容易修复。 解决错误后,您可以再次运行 git add 和 git commit ,这将再次触发 pre-commit 。 一旦 pre-commit 检查通过,您就可以推送代码了。
[Google][http://google.com/] 或 StackOverflow 是帮助您了解代码风格错误的好工具。
如果您仍然无法弄清楚,请不要担心。您可以使用 git commit -m "style error" --no-verify
提交,我们很乐意在您创建 Pull Request 后帮助您。
有经验的 Git 用户经常从官方Repo中git pull。因为这样子他们会及早注意到与其他人的代码冲突,并且让代码冲突更容易解决
git remote add upstream https://github.com/PaddlePaddle/PaddleNLP
git pull upstream develop
您可以将您的本地开发分支中的工作 push 到您的fork的分支中:
git push origin my-cool-stuff
git push之后,您可以提交Pull Request,请求官方repo 采纳您的开发工作。请您依照这些步骤创建Pull Request。
为了保持您本地的工作区和fork分支的干净整洁,建议您在Pull Request合入之后删除本地的残余分支:
git push origin my-cool-stuff
git checkout develop
git pull upstream develop
git branch -d my-cool-stuff
-
在您的Pull Request能够顺利通过本地测试以及CI的情况下,您可以在Pull Request中 @ 相关的Reviewer,提醒他们尽快对您的Pull Request进行Review。
-
请处理Reviewer的每一条评论。如果您已按照评论修改,请回复“完成”;否则,可以在评论下展开讨论。
-
如果您不希望您的Reviewer被电子邮件通知淹没,您可以批量回复。