Announcement: pip 20.3 release!

On behalf of the PyPA, I am pleased to announce that we have just released pip 20.3, a new version of pip. You can install it by running python -m pip install --upgrade pip.

This is an important and disruptive release – we explained why in a blog post last year. We even made a video about it.


  • DISRUPTION: Switch to the new dependency resolver by default. (#9019) Watch out for changes in handling editable installs, constraints files, and more:

  • DEPRECATION: Deprecate support for Python 3.5 (to be removed in pip 21.0) (#8181)

  • DEPRECATION: pip freeze will stop filtering the pip, setuptools, distribute and wheel packages from pip freeze output in a future version. To keep the previous behavior, users should use the new --exclude option. (#4256)

  • Substantial improvements in new resolver for performance, output and error messages, avoiding infinite loops, and support for constraints files.

  • Support for PEP 600: Future ‘manylinux’ Platform Tags for Portable Linux Built Distributions. (#9077)

  • Documentation improvements: Resolver migration guide, quickstart guide, and new documentation theme.

  • Add support for MacOS Big Sur compatibility tags. (#9138)

The new resolver is now on by default. It is significantly stricter and more consistent when it receives incompatible instructions, and reduces support for certain kinds of constraints files, so some workarounds and workflows may break. Please see our guide on how to test and migrate, and how to report issues. You can use the deprecated (old) resolver, using the flag --use-deprecated=legacy-resolver, until we remove it in the pip 21.0 release in January 2021.

You can find more details (including deprecations and removals) in the changelog.

User experience

Command-line output for this version of pip, and documentation to help with errors, is significantly better, because you worked with our experts to test and improve it. Contribute to our user experience work: sign up to become a member of the UX Studies group (after you join, we’ll notify you about future UX surveys and interviews).

What to expect in 21.0

We aim to release pip 21.0 in January 2021, per our usual release cadence. You can expect:

  • Removal of Python 2.7 and 3.5 support
  • Further improvements in the new resolver
  • Removal of legacy resolver support


As with all pip releases, a significant amount of the work was contributed by pip’s user community. Huge thanks to all who have contributed, whether through code, documentation, issue reports and/or discussion. Your help keeps pip improving, and is hugely appreciated.

Specific thanks go to Mozilla (through its Mozilla Open Source Support Awards) and to the Chan Zuckerberg Initiative DAF, an advised fund of Silicon Valley Community Foundation, for their funding that enabled substantial work on the new resolver.

That funding went to Simply Secure (specifically Georgia Bullen, Bernard Tyers, Nicole Harris, Ngọc Triệu, and Karissa McKelvey), Changeset Consulting (Sumana Harihareswara), Atos (Paul F. Moore), Tzu-ping Chung, Pradyun Gedam, and Ilan Schnell. Thanks also to Ernest W. Durbin III at the Python Software Foundation for liaising with the project.


Congratulations to the pip team! I’m now feeling a bit sad that I couldn’t keep up with the development in the last few weeks—features (other than the new resolver) like PEP 600 support certainly excite me. BTW I noticed a typo: the next release to expect should be 21.0, not 20.1 :wink:


Thanks @McSinyx - that typo is fixed. And thank you for your contributions!

Folks who didn’t watch as we improved the new resolver’s performance: @McSinyx worked to profile pip’s performance, and made a poster with data visualizations!


Thanks all.

Is there an estimate of how many hours of work have been spent designing, implementing, testing, optimizing, and continuing to test the new pip resolver?

The funding covered (from the announcement here) 21 months’ worth of work. But part of that was the UX work, and I don’t have the breakdowns. They should be available somewhere, though. I don’t think there’s any information on the additional volunteer time that was contributed.


Incidentally, I should have mentioned here earlier:

pip 20.3 turned the new resolver on by default for Python 3 users. When users use pip 20.3 in a Python 2 environment, the old dependency resolver is still the default.