Source: sichard.ca/ghstats/pip
A maintainer shared this chart of open issues in the pip repo. (It’s been dropping since June.)
Most of the open issues are more than a year old. My guess is that pip has limited maintainer bandwidth, so recent issues and problems users hit directly have to rank higher than re-checking old ones. That’s probably why old issues stayed open long after they were already fixed.
I started contributing to pip recently. The motivation is simple. I wanted to contribute to a project with a long history and a complex structure. pip carries a lot of backward-compat code for legacy behavior, and plenty of code can’t be changed lightly because users already rely on bugs as features. (Even plain text output may be parsed by someone.)1
These days AI agents write a lot of code in a day. Spending a long time discussing a one- or two-line change can feel slow, but I think it’s also what made the work interesting to me as a developer.
Work (July 12 - August 13)
Code
- pip
- Fixed a bug where the self version check under a zipapp read the version of the pip installed in the environment instead of the running zipapp. #13084, #14217
- Fixed a traceback when
entry_points.txtcontains a malformed entry. #8573, #14220 - The
(latest)marker inpip index versionswas never printed. Changing the output could break tools that depend on its format, so I left the output alone and went with removing only the dead code. #14177, #14178 - Corrected the macOS configuration docs to describe
XDG_DATA_DIRSandXDG_DATA_HOME, which actually work, instead ofXDG_CONFIG_*. #14200, #14207 - Added a regression test that Requires-Python skip reasons appear without debug logging. #14170
- The Git partial clone opt-out environment variable from last month got merged. #14163
Triage
- pip
- Confirmed that already-fixed issues no longer reproduce, then closed them. #10620, #11572, #12061, #8949, #9512, #8582, #10476, #14196
- Closed issues that were external problems, not pip’s. #14214, #14224
- Triaged duplicate issues. #14216, #14244
- Checked whether these issues still happen today. #9034, #13147, #14183
Reviews
- pip
- A bug where
pip <subcommand> --versionjust ran without an error. (By design onlypip --versionis supported.) #14231 - Reproduced the issue where
pip list --outdatedignored--uploaded-prior-to. #14189, #14190 - A refactoring PR splitting
exceptions.pyinto separate modules. (Seems like a good improvement.) #14176 - A PR removing
shell=Truefrompip config edit. The behavior it was changing looked intentional, so I dug through the history before reviewing. #14180
- A bug where
- django-auditlog
Next goals
pip
- Improve
pip downloadandpip install --target, which leave incomplete files behind when the disk fills up. The same pattern appears elsewhere in pip, so I’m aiming for a reusable fix. #9964 - A bug where the “no matching distributions” hint appeared for packages that were only excluded by version conflicts. The fix is waiting for review. #14193, #14194
- A PR that warns about
~...dist-infodirectories left by incomplete removals. Still working on it. #14047 - Imports break when a submodule is split into a namespace package and the new version is installed over an existing install. A maintainer suggested this one. The history is fairly involved, so I’ll set aside time for it later. #12211
django-auditlog
- Working on change detection comparing raw values and serialized values separately. #835
- A workflow that checks in CI whether a PR updated the CHANGELOG. (It seems to get missed often…) #836, #837