入门

很高兴您对参与 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.9pypy3

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>

下一步做什么?

以下页面可能对新贡献者有帮助,说明他们接下来应该去哪里寻找开始贡献的信息。