開始使用¶
歡迎您加入 pip 團隊。
本文件旨在協助您設定 pip 的工作環境,並作為開發設定的指南和參考。如果您在此過程中遇到任何問題,請於 問題追蹤器 回報問題。
取得原始碼¶
要在 pip 上工作,您需要先取得 pip 原始碼。 GitHub 上取得原始碼。
$ git clone https://github.com/pypa/pip
$ cd pip
開發環境¶
pip 是以 Python 編寫的命令列應用程式。為了開發 pip,您應該在您的電腦上 安裝 Python。
為了開發 pip,您需要安裝 nox。完整的開發設定如下:
python -m venv .venv
source .venv/bin/activate
python -m pip install nox
py -m venv .venv
.venv\Scripts\activate
py -m pip install nox
從原始碼樹執行 pip¶
要在開發時從原始碼樹執行 pip 可執行檔,可以使用可編輯式安裝在本地安裝 pip(在虛擬環境中)。然後,您可以正常呼叫您的本機源碼樹 pip(確認已啟用虛擬環境)。
python -m pip install -e .
python -m pip --version
py -m pip install -e .
py -m pip --version
執行測試¶
pip 的測試使用 pytest 測試架構和 unittest.mock
。 nox 用來自動化 pip 測試的設定與執行。
建議在開發時平行執行測試,以獲得更好的體驗,因為循序執行這些測試時,可能會花費很長的時間才能完成。
執行測試
$ nox -s test-3.10 -- -n auto
要執行沒有並行的測試,請執行
$ nox -s test-3.10
以上的範例針對 Python 3.10 執行測試。您也可以使用其他版本,例如 3.9
和 pypy3
。
nox
已設定為將傳遞的任何其他引數轉發給 pytest
。這樣就能使用 pytest 的 豐富 CLI。舉例來說,您可以使用 pytest 提供的各種方式來選擇測試
$ # Using file name
$ nox -s test-3.10 -- tests/functional/test_install.py
$ # Using markers
$ nox -s test-3.10 -- -m unit
$ # Using keywords
$ nox -s test-3.10 -- -k "install and not wheel"
註
使用作業系統發行版 Python 版本執行 pip 測試時,請注意,由於發行版可能會引入修補程式,某些功能測試可能會失敗。為了讓所有測試順利通過,請考慮
從 python.org 安裝 Python 或是從原始碼編譯
或者使用 pyenv 來協助執行來源編譯
執行 pip 的所有測試套件,需要安裝支援的版本控制工具(subversion、bazaar、git 和 mercurial)。如果您缺少任何一個這些 VCS,系統會自動跳過這些測試。您也可以明確告訴 pytest 跳過這些測試
$ nox -s test-3.10 -- -k "not svn"
$ nox -s test-3.10 -- -k "not (svn or git)"
執行檢查器¶
pip 使用 pre-commit 來管理程式碼庫的檢查。 pre-commit
會執行 pip 所有檔案的各種檢查,並使用工具協助在程式碼庫中遵循一致的程式碼格式。
如要使用本地的檢查器,請執行
$ nox -s lint
註
避免使用 # noqa
註解來抑制檢查器警告 - 若有可能,應該修正警告,而非抑制。 # noqa
註解保留給少見的情況使用,例如建議的格式會導致嚴重的可讀性問題時。
在偵錯器下執行 pip¶
如要偵錯 pip 的行為,您可以像這樣在偵錯器下執行它
$ python -m pdb -m pip --debug ...
使用您要執行 pip 的引數取代 ...
。將 c
(「繼續」)指令提供給 PDB,然後才能執行程序。
--debug
旗標會停用 pip 的例外處理常式,此常式通常會擷取所有未處理的例外。如果使用了此旗標,pip 將讓這些例外傳播到它的主次常式以外,讓偵錯器擷取這些例外。這樣您就能透過 PDB 死後偵錯例外。
建立文件¶
pip 文件使用 Sphinx 建立。文件以 reStructuredText 編寫。
如要在本機建立文件,請執行
$ nox -s docs
已建立的文件可見於 docs/build
資料夾。
對於每次拉取請求,文件會遵循此連結進行配置
https://pip--<PR-NUMBER>.org.readthedocs.build/en/<PR-NUMBER>
接下來是什麼?¶
以下網頁可能對新的貢獻者在開始貢獻之前,於何處繼續尋找有所幫助。