我能提供什麼幫助?#

為開源做貢獻可能是一個令人緊張的過程,但請不要擔心,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],以便核心團隊知道您正在積極處理該問題。建立拉取請求時,請確保標題清晰簡潔地描述您的程式碼所做的事情。例如,我們可以使用標題“Updated error message on ExampleException”。在拉取請求的正文中,請確保包含短語“Closes #issue-number-here”,其中 issue number 是您在此 PR 中正在處理的問題編號。

    請儘早開啟 PR。及早獲得關於您方法的回饋將為您節省時間,並防止以後需要進行大量重構。

  6. 在本地執行測試套件,以確保您的系統已正確配置。請參閱儲存庫的 README,瞭解如何執行測試套件。這通常需要您在命令列上執行 nosetests 命令。或者,您可以提交拉取請求。我們的持續整合系統將測試您的程式碼並報告測試結果。

  7. 找到與您將要更改的模組相關的測試檔案。在測試檔案中,新增一些測試,概述您期望更改的行為。如果我們繼續以更新錯誤時記錄的文字為例,我們可能會編寫測試用例,檢查在誘發錯誤時引發的異常是否包含適當的字串。編寫測試用例時,請確保測試以下內容。

    • 我能為這個問題編寫的最簡單的測試用例是什麼?

    • 如果您的程式碼獲得雜亂的輸入會發生什麼?

    • 如果您的程式碼沒有輸入會發生什麼?

    • 如果您的程式碼輸入太少會發生什麼?

    • 如果您的程式碼輸入太多會發生什麼?

    如果您在編寫測試用例時需要幫助,您可以在之前開啟的拉取請求上發表評論,核心團隊的成員將能夠幫助您。

  8. 回到您正在更新的檔案,開始為您的拉取請求新增程式碼。

  9. 再次執行測試套件,看看您的更改是否導致任何測試用例透過。如果任何測試用例失敗,請返回您的程式碼並進行必要的更新以使其透過。

  10. 一旦所有測試用例都透過,請提交測試用例和更新的模組,並將更新推送到您的分支儲存庫上的分支。

  11. 一旦您的拉取請求準備好進行稽核,請從問題前面刪除 [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]

核心開發者工作流#

為了幫助您瞭解您提交拉取請求後核心開發者的審查流程,這裡有一份指南,概述了通用流程(具體情況可能因儲存庫而異)。以下是 Jupyter notebook 4.x 的示例。

通常,拉取請求是針對 master 的,除非它們隻影響回溯分支。如果 PR 影響 master 並且應該回溯,則一般流程是:

  1. 將 PR 標記為下一個回溯版本 (4.3) 的里程碑

  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

提交錯誤#

在使用 Notebook 時,您可能會遇到表現為意外行為的錯誤。如果是這樣,我們鼓勵您在 GitHub 上提出問題。為了讓開發者和使用者更容易瀏覽問題,我們要求您在提交問題之前採取以下步驟。

  1. 在 StackOverflow 和現有的 GitHub 問題中搜索,以確保該問題尚未被其他使用者報告。如果是這樣,如果您認為有價值,請在現有問題上提供您的意見。

  2. 準備一個小的、獨立的、可重現您所遇到問題的程式碼片段。

  3. 準備有關您執行程式碼的環境資訊,以幫助除錯問題。在提交錯誤時,您需要提供有關 Python 版本、Jupyter 版本、作業系統和您正在使用的瀏覽器資訊。您還可以使用 pip listconda listgrep 來識別與您提交的問題相關的庫版本。

  4. 準備一個簡單的測試,概述程式碼的預期行為,或描述預期行為應該是什麼。

  5. 準備一個解釋,說明為什麼當前行為不理想以及它應該是什麼。

報告漏洞#

如果您認為在 Jupyter 專案中發現了安全漏洞,請將其報告給 security@ipython.org。如果您希望加密您的安全報告,可以使用此 PGP 公鑰