贡献代码#

本地设置#

要贡献代码,需要具备基本的 git 知识。如果您不熟悉 git 工作流程,请参阅 GitHub 的教程。以下步骤说明了如何为 DoWhy 贡献代码。

  1. Fork dowhy 主仓库

  2. 使用以下命令将此仓库克隆到您的本地机器

    git clone https://github.com/<YOUR_GITHUB_USERNAME>/dowhy
    
  3. 安装 DoWhy 及其依赖项。Poetry 会自动创建一个虚拟环境,但如果更喜欢,也可以使用其他方式创建。默认情况下,Poetry 会以交互模式安装 DoWhy。这样,您可以立即测试对代码库的更改。

    cd dowhy
    pip install --upgrade pip
    poetry install -E "plotting"
    

    注意

    在某些平台安装 pygraphviz 可能会导致问题。对于大多数 Linux 发行版,一种可行的方法是先安装 graphviz,然后按照下面的方式安装 pygraphviz。否则,请查阅 pygraphviz 的文档

    sudo apt install graphviz libgraphviz-dev graphviz-dev pkg-config
    pip install --global-option=build_ext \
    --global-option="-I/usr/local/include/graphviz/" \
    --global-option="-L/usr/local/lib/graphviz" pygraphviz
    
  4. (可选)添加 dowhy 作为上游远程仓库,以使您的 fork 与 DoWhy 的 main 分支保持同步。

    git remote add upstream http://www.github.com/py-why/dowhy
    

    现在您已准备好在本地对代码库进行更改。

拉取请求清单#

  1. 执行 flake8 linter 检查破坏性警告,并修复所有报告的问题。

    poetry run poe lint
    
  2. 确保新添加的代码符合 blackisort 的格式要求。

    poetry run poe format_check
    

    您可以使用以下命令自动修复格式

    poetry run poe format
    
  3. 为您的新代码添加测试,并执行单元测试以确保您没有引入任何破坏性更改或错误。

    poetry run poe test
    

    请注意,您也可以一起执行这些任务

    poetry run poe verify
    

    可以使用以下命令获取可用任务的完整列表

    poetry run poe -h
    

    DoWhy 的完整测试套件需要相当长的时间。为了加快开发周期,您可以限制执行的测试,如下例所示。

    poetry run pytest -v tests/causal_refuters
    
  4. 代码完成后,并且所有检查都成功通过,提交您的更改。确保添加信息丰富的提交消息并签署您的提交

    git commit --signoff -m "informative commit message"
    

    通过包含此签署步骤,提交将附带一份开发者来源证书(DCO),其中包含作者的姓名和电子邮件地址。DCO 是 CLA 的一种轻量级替代方案,它确认作者是所提交代码的来源,并有权将其贡献给项目。完整文本请参见 DCO

    注意

    请注意,“--signoff” 或简写 “-s” 是强制性的,没有签名的提交无法合并。默认情况下,大多数 IDE 不会在其 git 集成中包含此步骤,因此可能需要额外的设置。

    如果您只做了一次提交,但没有添加必需的 DCO,您可以执行

    git commit --amend --no-edit --signoff
    git push -f origin <BRANCH_NAME>
    

    如果提交次数较多,一种方法是将它们压缩在一起(例如 3 次提交)

    git reset --soft HEAD~3
    git commit -s -m "new informative commit message of squashed commit"
    

    或者使用 rebase,其中 "^" 的数量与要更改的提交数量相同。

    git rebase --signoff HEAD^^^
    
  5. (高级)Poetry 使用 poetry.lock 文件固定其依赖项及其版本。维护人员应通过以下命令定期更新 Poetry 的依赖项

    poetry update
    

    对于大多数 PR,这不是必需的。如果 PR 需要更改 lockfile,我们请求您提供依赖项更新为何必要的理由。