Dependency Management Improvements In Pip's Resolver

The Python Podcast.__init__

Episode | Podcast

Date: Mon, 25 May 2020 19:00:00 -0400

<div class="wp-block-jetpack-markdown"><h3>Summary</h3> <p>Dependency management in Python has taken a long and winding path, which has led to the current dominance of Pip. One of the remaining shortcomings is the lack of a robust mechanism for resolving the package and version constraints that are necessary to produce a working system. Thankfully, the Python Software Foundation has funded an effort to upgrade the dependency resolution algorithm and user experience of Pip. In this episode the engineers working on these improvements, Pradyun Gedam, Tzu-Ping Chung, and Paul Moore, discuss the history of Pip, the challenges of dependency management in Python, and the benefits that surrounding projects will gain from a more robust resolution algorithm. This is an exciting development for the Python ecosystem, so listen now and then provide feedback on how the new resolver is working for you.</p> <h3>Announcements</h3> <ul> <li>Hello and welcome to Podcast.__init__, the podcast about Python and the people who make it great.</li> <li>When you&#8217;re ready to launch your next app or want to try a project you hear about on the show, you&#8217;ll need somewhere to deploy it, so take a look at our friends over at Linode. With 200 Gbit/s private networking, node balancers, a 40 Gbit/s public network, fast object storage, and a brand new managed Kubernetes platform, all controlled by a convenient API you&#8217;ve got everything you need to scale up. And for your tasks that need fast computation, such as training machine learning models, they&#8217;ve got dedicated CPU and GPU instances. Go to <a href="https://www.pythonpodcast.com/linode?utm_source=rss&amp;utm_medium=rss">pythonpodcast.com/linode</a> to get a $20 credit and launch a new server in under a minute. And don&#8217;t forget to thank them for their continued support of this show!</li> <li>You listen to this show because you love Python and want to keep your skills up to date, and machine learning is finding its way into every aspect of software engineering. Springboard has partnered with us to help you take the next step in your career by offering a scholarship to their Machine Learning Engineering career track program. In this online, project-based course every student is paired with a Machine Learning expert who provides unlimited 1:1 mentorship support throughout the program via video conferences. You&#8217;ll build up your portfolio of machine learning projects and gain hands-on experience in writing machine learning algorithms, deploying models into production, and managing the lifecycle of a deep learning prototype. Springboard offers a job guarantee, meaning that you don&#8217;t have to pay for the program until you get a job in the space. Podcast.__init__ is exclusively offering listeners 20 scholarships of $500 to eligible applicants. It only takes 10 minutes and there&#8217;s no obligation. Go to <a href="https://www.pythonpodcast.com/springboard?utm_source=rss&amp;utm_medium=rss">pythonpodcast.com/springboard</a> and apply today! Make sure to use the code AISPRINGBOARD when you enroll.</li> <li>Your host as usual is Tobias Macey and today I&#8217;m interviewing Tzu-ping Chung, Pradyun Gedam, and Paul Moore about their work to improve the dependency resolution capabilities of Pip and its user experience</li> </ul> <h3>Interview</h3> <ul> <li>Introductions</li> <li>How did you get introduced to Python?</li> <li>Can you start by describing the focus of the work that you are doing? <ul> <li>What is the scope of the work, and what is the established criteria for when it is considered complete?</li> </ul> </li> <li>What is your history with working on the Pip source code and what interests you most about this project?</li> <li>What are the main sources or manifestations of technical debt that exist in Pip as of today? <ul> <li>How does it currently handle dependency resolution?</li> </ul> </li> <li>What are some of the workarounds that developers have had to resort to in the absence of a robust dependency resolver in Pip?</li> <li>How is the new dependency resolver implemented? <ul> <li>How has your initial design evolved or shifted as you have gotten further along in its implementation?</li> </ul> </li> <li>What are the pieces of information that the resolver will rely on for determining which packages and versions to install? (e.g. will it install setuptools &gt; 45.x in a Python 2 virtualenv?)</li> <li>What are the new capabilities in Pip that will be enabled by this upgrade to the dependency resolver?</li> <li>What projects or features in the encompassing ecosystem will be unblocked with the introduction of this upgrade?</li> <li>What are some of the changes that users will need to make to adopt the updated Pip?</li> <li>How do you anticipate the changes in Pip impacting the viability or adoption of Python and its ecosystem within different communities or industries?</li> <li>What are some of the additional changes or improvements that you would like to see in Pip or other core elements of the Python landscape?</li> <li>What are some of the most interesting, unexpected, or challenging lessons that you have learned while working on these updates to Pip?</li> </ul> <h3>Keep In Touch</h3> <ul> <li>Pradyun <ul> <li><a href="https://pradyunsg.me/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Website</a></li> <li><a href="https://github.com/pradyunsg?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">pradyunsg</a> on GitHub</li> <li><a href="https://twitter.com/pradyunsg?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">@pradyunsg</a> on Twitter</li> </ul> </li> <li>Paul <ul> <li><a href="https://github.com/pfmoore?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">pfmoore</a> on GitHub</li> </ul> </li> <li>Tzu-Ping <ul> <li><a href="https://github.com/uranusjr?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">uranusjr</a> on GitHub</li> <li><a href="https://uranusjr.com/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Website</a></li> <li><a href="https://twitter.com/uranusjr?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">@uranusjr</a> on Twitter</li> </ul> </li> </ul> <h3>Picks</h3> <ul> <li>Tzu-ping <ul> <li><a href="https://github.com/brettcannon/python-launcher?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Python Launcher</a></li> <li><a href="https://joeabercrombie.com/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Joe Abercrombie</a> author</li> <li><a href="https://www.penguinrandomhouse.com/series/3SS/shattered-sea?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">The Shattered Sea Trilogy</a></li> <li><a href="https://en.wikipedia.org/wiki/Anime?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Anime</a></li> <li><a href="https://github.com/uranusjr/pipx-standalone?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">PipX Standalone</a></li> </ul> </li> <li>Paul <ul> <li><a href="https://github.com/pipxproject/pipx?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">pipx</a></li> <li><a href="https://black.readthedocs.io/en/stable/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Black</a></li> <li><a href="https://nox.thea.codes/en/stable/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">nox</a></li> <li><a href="https://tox.readthedocs.io/en/latest/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">tox</a></li> <li><a href="https://scoop.sh/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">scoop</a></li> <li><a href="https://www.neilgaiman.com/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Neil Gaiman</a></li> <li>Good Omens <ul> <li><a href="https://www.neilgaiman.com/works/Books/Good+Omens/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Book</a></li> <li><a href="https://www.amazon.com/Good-Omens-Season-1/dp/B07FMHTRFD?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">TV Series</a></li> </ul> </li> </ul> </li> <li>Pradyun <ul> <li>because my picks can be anything &#8212; things that have kept me sane in this lockdown world <ul> <li>Music: <a href="https://www.daughtryofficial.com/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Chris Daughtry</a></li> <li>Video Game: <a href="https://themeparkitect.com/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Parkitect</a></li> </ul> </li> </ul> </li> <li>Tobias <ul> <li><a href="https://microsoft.github.io/language-server-protocol/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Language Server Protocol</a></li> <li><a href="https://emacs-lsp.github.io/lsp-mode/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Emacs lsp-mode</a></li> </ul> </li> </ul> <h3>Closing Announcements</h3> <ul> <li>Thank you for listening! Don&#8217;t forget to check out our other show, the <a href="https://feeds.fireside.fm/pythonpodcast/rss">Data Engineering Podcast</a> for the latest on modern data management.</li> <li>Visit the <a href="https://www.pythonpodcast.com?utm_source=rss&amp;utm_medium=rss">site</a> to subscribe to the show, sign up for the mailing list, and read the show notes.</li> <li>If you&#8217;ve learned something or tried out a project from the show then tell us about it! Email <a href="mailto:hosts@podcastinit.com">hosts@podcastinit.com</a>) with your story.</li> <li>To help other people find the show please leave a review on <a href="https://itunes.apple.com/us/podcast/podcast.-init/id981834425?mt=2&amp;uo=6&amp;at=&amp;ct=&amp;utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">iTunes</a> and tell your friends and co-workers</li> <li>Join the community in the new Zulip chat workspace at <a href="https://www.pythonpodcast.com/chat?utm_source=rss&amp;utm_medium=rss">pythonpodcast.com/chat</a></li> </ul> <h3>Links</h3> <ul> <li><a href="https://pip.pypa.io/en/stable/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Pip</a> <ul> <li><a href="https://www.pythonpodcast.com/episode-54-pip-and-the-python-package-authority-with-donald-stufft/?utm_source=rss&amp;utm_medium=rss">Podcast interview with Donald Stufft</a></li> </ul> </li> <li><a href="https://macdown.uranusjr.com/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Macdown</a></li> <li><a href="https://en.wikipedia.org/wiki/Taiwan?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Taiwan</a></li> <li><a href="https://pipenv.pypa.io/en/latest/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Pipenv</a></li> <li><a href="https://pypi.org/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">PyPI</a> <ul> <li><a href="https://www.pythonpodcast.com/pypi-improvements-episode-225/?utm_source=rss&amp;utm_medium=rss">Podcast Episode</a></li> </ul> </li> <li><a href="https://github.com/toml-lang/toml?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">TOML</a></li> <li><a href="https://packaging.python.org/specifications/core-metadata/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Python Package Metadata Standards</a></li> <li><a href="https://en.wikipedia.org/wiki/IBook#iBook_G4_(%22Snow%22)?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">iBook G4</a></li> <li><a href="https://en.wikipedia.org/wiki/Acorn_Computers?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Acorn Computer</a></li> <li><a href="https://docs.python.org/3/library/distutils.html?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">distutils</a></li> <li><a href="https://setuptools.readthedocs.io/en/latest/easy_install.html?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">easy_install</a></li> <li><a href="http://peak.telecommunity.com/DevCenter/PythonEggs?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Python Eggs</a></li> <li><a href="https://setuptools.readthedocs.io/en/latest/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">setuptools</a></li> <li><a href="https://www.python.org/dev/peps/pep-0427/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Python Wheels</a></li> <li><a href="https://www.cpan.org/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">CPAN</a></li> <li><a href="https://docs.conda.io/en/latest/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Conda</a></li> <li><a href="https://dustingram.com/talks/2018/10/23/inside-the-cheeseshop/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Inside The Cheeseshop</a></li> <li><a href="https://summerofcode.withgoogle.com/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Google Summer of Code</a></li> <li><a href="https://github.com/pradyunsg/zazo?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Zazo</a></li> <li><a href="https://www.python.org/dev/peps/pep-0517/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">PEP517</a></li> <li><a href="https://github.com/jazzband/pip-tools?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">pip-tools</a></li> <li><a href="https://python-poetry.org/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Poetry</a></li> <li><a href="https://github.com/sarugaku/resolvelib?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">resolvelib</a></li> <li><a href="https://en.wikipedia.org/wiki/Boolean_satisfiability_problem?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">SAT Solver</a></li> <li><a href="https://pypi.org/classifiers/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Trove Classifiers</a></li> <li><a href="https://www.pypa.io/en/latest/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">PyPA</a></li> <li><a href="https://www.python.org/dev/peps/pep-0518/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">pyproject.toml</a></li> </ul> <p>The intro and outro music is from Requiem for a Fish <a href="http://freemusicarchive.org/music/The_Freak_Fandango_Orchestra/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">The Freak Fandango Orchestra</a> / <a href="http://creativecommons.org/licenses/by-sa/3.0/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">CC BY-SA</a></p> </div> <img alt="" height="0" src="https://analytics.boundlessnotions.com/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fwww.pythonpodcast.com%2Fpip-resolver-dependency-management-episode-264%2F&amp;action_name=Dependency+Management+Improvements+In+Pip%27s+Resolver+-+Episode+264&amp;urlref=https%3A%2F%2Fwww.pythonpodcast.com%2Ffeed%2F&amp;utm_source=rss&amp;utm_medium=rss" style="border: 0; width: 0; height: 0;" width="0" />