入门¶
很高兴您对参与 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 的参数替换...
。然后给 PDB c
(“继续”)命令,以运行进程。
--debug
标志禁用 Pip 的异常处理程序,该处理程序通常会捕获所有未处理的异常。使用此标志,Pip 会让这些异常传播到其主子例程之外,让它们被调试器捕获。这样,您就可以通过 PDB 来调试事后异常。
构建文档¶
Pip 的文档使用Sphinx 构建。文档是用 reStructuredText 编写的。
要在本地构建它,请运行
$ nox -s docs
构建的文档可以在docs/build
文件夹中找到。
对于每个拉取请求,文档都会部署到以下链接
https://pip--<PR-NUMBER>.org.readthedocs.build/en/<PR-NUMBER>
下一步做什么?¶
以下页面可能对新贡献者有帮助,说明他们接下来应该去哪里寻找开始贡献的信息。