我该如何帮助?#

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

当你开始你的开源之旅时,记住如果你不理解某些东西是没关系的,犯错也是没关系的,而且你只需要贡献修复你正在处理的问题所需的一小部分代码也是没关系的。任何和所有的帮助都是受欢迎的,任何和所有的人都鼓励参与贡献。

提交拉取请求#

欢迎个人提交拉取请求并为 Jupyter 源代码做出贡献。如果你是第一次参与 Jupyter 贡献的新手,你可以在 GitHub 搜索中使用以下查询来找到适合初学者的跨 Jupyter 代码库的问题。这个查询特别有用,因为 Jupyter 代码库分散在 jupyter 组织内的多个仓库中,而不是单一仓库。你可以点击下面的链接找到适合冲刺的问题。

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

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

请记住,以下是一些指导原则。如果你按照步骤操作并有问题或遇到时间限制,请提交你已经完成的部分作为拉取请求,并在上面提问。你的努力,包括部分或正在进行的工作,都是值得赞赏的。

  1. Fork 与你正在处理的问题相关的仓库,并将其克隆到你机器上的本地目录。

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

    选择一个能反映你正在解决的问题的分支名称。例如,如果你正在更新程序在发生特定错误时记录的文本,你可能会将你的分支命名为 update-error-text

  3. 有关配置系统进行开发的详细信息,请参阅仓库的 README 和文档。

  4. 确定你要进行代码更改的模块或类,并在文件中留下评论,描述你要解决的问题。

  5. 在仓库中打开一个带有 [WIP] 前缀的拉取请求,以便核心团队知道你正在积极处理该问题。创建拉取请求时,确保标题清晰简洁地描述了你的代码所做的事情。例如,我们可能会使用标题“更新了 ExampleException 上的错误消息”。在拉取请求的正文中,确保你包含了“Closes #issue-number-here”这句话,其中 issue number 是你在这个 PR 中解决的问题的编号。

    尽早提交PR。尽早获得对你方法的反馈将节省你的时间,并防止日后需要进行大规模的重构。

  6. 在本地运行测试套件,以确保系统上的所有配置都正确。请参考仓库的README文件,了解如何运行测试套件。这通常需要你在命令行中运行 nosetests 命令。或者,你可以提交一个拉取请求。我们的持续集成系统将测试你的代码并报告测试结果。

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

    • 对于这个问题,我可以写的最简单的测试用例是什么?

    • 如果你的代码接收到混乱的输入会发生什么?

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

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

    • 如果你的代码接收了过多的输入,会发生什么?

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

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

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

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

  11. 一旦你的拉取请求准备好被审核,请移除问题前面的 [WIP] 标签,项目审核人员将会审核你的代码质量。你可以预期审核人员会检查你在更改中提供的文档、你提供的测试用例的全面性,以及你的代码的效率。审核人员会对你提供的代码提供反馈,你将有机会编辑你的代码并应用修复。

  12. 一旦你的PR准备好成为代码库的一部分,它将被核心团队的一名成员合并。

贡献工作流程#

一个流程图列出了向 Jupyter 贡献代码的步骤,包含 14 个带标签的方框,由箭头连接。该图是单向的。在每个步骤中,箭头向前指向一个或多个方框,并返回前一个或多个方框。请参阅图像下方的链接以获取完整文本。

完整贡献工作流程描述。[1]

核心开发者工作流程#

为了帮助你理解在你提交拉取请求后核心开发者的审查过程,这里有一个概述一般流程的指南(具体细节可能在我们不同的仓库中略有不同)。以下是 Jupyter notebook 4.x 的一个示例:

通常,拉取请求是针对 master 分支的,除非它们仅影响回溯分支。如果一个PR影响master并且应该被回溯,一般的流程是:

  1. 为 PR 标记下一个回溯发布(4.3)的里程碑

  2. 合并到主分支

  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

提交一个错误#

在使用 Notebook 时,您可能会遇到表现为意外行为的错误。如果是这样,我们鼓励您在 GitHub 上提交问题。为了使开发者和用户更容易导航问题,我们要求您在提交问题之前采取以下步骤。

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

  2. 准备一个小的、自包含的代码片段,以便其他人能够重现您遇到的问题。

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

  4. 准备一个简单的测试,概述代码的预期行为或描述预期的行为应该是什么。

  5. 准备一个解释,说明为什么当前的行为是不被期望的,以及它应该是什么样的。

报告漏洞#

如果你认为在 Jupyter 项目中发现了一个安全漏洞,请向 security@ipython.org 报告。如果你希望加密你的安全报告,你可以使用 这个 PGP 公钥