我能帮您什么?#

为开源做出贡献可能是一个令人紧张的过程,但不用担心,Jupyter 团队的每个人都致力于确保您的开源体验尽可能有趣。在下面描述的过程中的任何时候,您都可以通过 Gitter 或邮件列表联系 Jupyter 团队寻求帮助。如果您担心在公开场合提问,您还可以私下联系 Jupyter 开发人员之一。您可以使用公共 Gitter 找到对您正在处理的代码最了解的人,并通过个人聊天与他们互动。

当您开始您的开源之旅时,请记住,如果您不理解某些内容,犯错,或者只贡献少量代码来修复您正在解决的问题,这都是可以的。任何帮助都受欢迎,并且鼓励任何人做出贡献。

提交拉取请求#

欢迎并鼓励个人提交拉取请求并为 Jupyter 源代码做出贡献。如果您是希望参与 Jupyter 的首次贡献者,则可以在 GitHub 搜索中使用以下查询来查找 Jupyter 代码库中适合初学者的待解决问题。此查询特别有用,因为 Jupyter 代码库分散在 jupyter 组织内的多个存储库中,而不是单个存储库。您可以单击下面的链接以查找适合冲刺的问题。

is:issue is:open is:sprint-friendly user:jupyter

一旦您找到了您渴望解决的问题,您就可以使用下面的指南开始。如果您在处理问题时遇到任何问题,请在 GitHub 中的问题页面上留言,核心团队中的某人将能够为您提供帮助。

请记住,以下内容是指南。如果您完成这些步骤并有疑问或遇到时间限制,请提交您已经完成的工作作为拉取请求,并在其中提出问题。您的努力,包括部分或正在进行的工作,都受到赞赏。

  1. 分叉您正在解决的问题关联的存储库,并将其克隆到您计算机上的本地目录。

  2. cd 进入目录,并使用 git checkout -b insert-branch-name-here 创建一个新分支。

    选择一个分支名称,以深入了解您正在修复的问题。例如,如果您正在更新程序在发生特定错误时记录的文本,则可以将您的分支命名为 update-error-text

  3. 请参阅存储库的自述文件和文档,了解有关为开发配置系统的详细信息。

  4. 确定您将进行代码更改的模块或类,并在文件中留下注释,说明您正在尝试解决什么问题。

  5. 使用 [WIP] 附加到前端,向存储库打开一个拉取请求,以便核心团队知道您正在积极处理此问题。在创建拉取请求时,请确保标题清晰简洁地描述您的代码的作用。例如,我们可能会使用标题“更新 ExampleException 上的错误消息”。在拉取请求的主体中,请确保包含短语“Closes #issue-number-here”,其中问题编号是您在此 PR 中解决的问题的问题编号。

    尽早提出 PR。尽早获得对方法的反馈将节省你的时间,并避免以后需要大规模重构。

  6. 在本地运行测试套件,以确保在系统上正确配置所有内容。有关如何运行测试套件的信息,请参阅存储库的 README。这通常需要你在命令行上运行 nosetests 命令。或者,你可以提交一个 pull 请求。我们的持续集成系统将测试你的代码并报告测试结果。

  7. 找到与你将要更改的模块关联的测试文件。在测试文件中,添加一些测试,概述你期望的更改行为。如果我们继续使用更新在错误时记录的文本的示例,我们可能会编写测试用例,以检查在你引发错误时引发的异常是否包含适当的字符串。在编写测试用例时,请确保测试以下内容。

    • 我能为这个问题编写最简单的测试用例是什么?

    • 如果你的代码被赋予混乱的输入,会发生什么?

    • 如果你的代码没有输入,会发生什么?

    • 如果你的代码输入太少,会发生什么?

    • 如果你的代码输入太多,会发生什么?

    如果你需要编写测试用例的帮助,你可以在之前打开的 pull 请求中添加评论,核心团队成员之一将能够帮助你。

  8. 返回到你正在更新的文件,并开始添加 pull 请求的代码。

  9. 再次运行测试套件,以查看你的更改是否导致任何测试用例通过。如果任何测试用例失败,请返回你的代码并进行必要的更新以使其通过。

  10. 一旦你的所有测试用例都通过,提交测试用例和更新的模块,并将更新推送到分叉存储库中的分支。

  11. 一旦你准备好让你的 pull 请求接受审查,从问题的前面移除 [WIP] 标记,项目审查员将审查你的代码质量。你可以期望审查员检查你所做的更改中提供的文档、你提供的测试用例的彻底程度以及你的代码的效率。你的审查员将对你代码提供反馈,你将有机会编辑你的代码并应用修复。

  12. 一旦你的 PR 准备好成为代码库的一部分,核心团队成员将对其进行合并。

贡献工作流程#

A flow chart listing the steps of contributing code to Jupyter with 14 labeled boxes linked by arrows. The chart is uni-directional. At each step, arrows point forward to one or more boxes and back to the previous box or boxes. Refer to the link below the image for full text.

完整的贡献工作流程说明。[1]

核心开发者工作流程#

为了帮助你了解你在提交 pull 请求后核心开发者的审查流程,这里有一个指南概述了常规流程(具体流程可能因我们的存储库而异)。以下是 Jupyter notebook 4.x 的示例

通常,除非它们只影响反向移植分支,否则 Pull 请求针对 master。如果 PR 影响 master 并且应该反向移植,则一般流程是

  1. 使用下一个反向移植版本(4.3)的里程碑标记 PR

  2. 合并到 master

  3. 反向移植到 4.x

  4. 推送更新的 4.x 分支

反向移植可以通过多种方式完成,但我们有一个脚本,用于自动化常见流程

  1. 下载补丁 例如 <https://patch-diff.githubusercontent.com/raw/jupyter/notebook/pull/1645.patch>

  2. 签出 4.x 分支

  3. 应用补丁

  4. 提交

至少适用于简单的情况。

在这种情况下,它将是

python /path/to/ipython-repo/tools/backport_pr.py jupyter/notebook 4.x 1645

提交错误#

在使用笔记本时,你可能会遇到一个错误,它表现为意外的行为。如果是这样,我们鼓励你在 GitHub 上公开问题。为了让开发人员和用户更容易浏览问题,我们要求你在提交问题之前执行以下步骤。

  1. 在 StackOverflow 和现有的 GitHub 问题中进行搜索,以确保该问题尚未被其他用户报告。如果是这样,如果你认为有价值,请在现有问题上提供你的意见。

  2. 准备一小段自包含的代码片段,以便其他人可以重现你遇到的问题。

  3. 准备有关你在其中执行代码的环境的信息,以帮助调试问题。在提交错误时,你需要提供有关 Python 版本、Jupyter 版本、操作系统和正在使用的浏览器的信息。你还可以使用 pip listconda listgrep 来识别与你正在提交的问题相关的库的版本。

  4. 准备一个简单的测试,概述代码的预期行为或对预期行为的描述。

  5. 准备一个解释,说明为什么当前行为不受欢迎以及它应该是什么。

报告漏洞#

如果你认为你在 Jupyter 项目中发现了安全漏洞,请将其报告给 [email protected]。如果你希望加密你的安全报告,可以使用 此 PGP 公钥