Pants Has Got Your Python Monorepo Covered

The Python Podcast.__init__

Episode | Podcast

Date: Mon, 23 Nov 2020 18:00:00 -0500

<div class="wp-block-jetpack-markdown"><h3>Summary</h3> <p>In a software project writing code is just one step of the overall lifecycle. There are many repetitive steps such as linting, running tests, and packaging that need to be run for each project that you maintain. In order to reduce the overhead of these repeat tasks, and to simplify the process of integrating code across multiple systems the use of monorepos has been growing in popularity. The Pants build tool is purpose built for addressing all of the drudgery and for working with monorepos of all sizes. In this episode core maintainers Eric Arellano and Stu Hood explain how the Pants project works, the benefits of automatic dependency inference, and how you can start using it in your own projects today. They also share useful tips for how to organize your projects, and how the plugin oriented architecture adds flexibility for you to customize Pants to your specific needs.</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 the launch of their managed Kubernetes platform it&#8217;s easy to get started with the next generation of deployment and scaling, powered by the battle tested Linode platform, including simple pricing, node balancers, 40Gbit networking, dedicated CPU and GPU instances, and worldwide data centers. Go to <a href="https://www.pythonpodcast.com/linode?utm_source=rss&amp;utm_medium=rss">pythonpodcast.com/linode</a> and get a $100 credit to try out a Kubernetes cluster of your own. And don&#8217;t forget to thank them for their continued support of this show!</li> <li>Python has become the default language for working with data, whether as a data scientist, data engineer, data analyst, or machine learning engineer. Springboard has launched their School of Data to help you get a career in the field through a comprehensive set of programs that are 100% online and tailored to fit your busy schedule. With a network of expert mentors who are available to coach you during weekly 1:1 video calls, a tuition-back guarantee that means you don’t pay until you get a job, resume preparation, and interview assistance there’s no reason to wait. Springboard is offering up to 20 scholarships of $500 towards the tuition cost, exclusively to listeners of this show. Go to <a href="https://www.pythonpodcast.com/springboard?utm_source=rss&amp;utm_medium=rss">pythonpodcast.com/springboard</a> today to learn more and give your career a boost to the next level.</li> <li>Feature flagging is a simple concept that enables you to ship faster, test in production, and do easy rollbacks without redeploying code. Teams using feature flags release new software with less risk, and release more often. ConfigCat is a feature flag service that lets you easily add flags to your Python code, and 9 other platforms. By adopting ConfigCat you and your manager can track and toggle your feature flags from their visual dashboard without redeploying any code or configuration, including granular targeting rules. You can roll out new features to a subset or your users for beta testing or canary deployments. With their simple API, clear documentation, and pricing that is independent of your team size you can get your first feature flags added in minutes without breaking the bank. Go to <a href="https://www.pythonpodcast.com/configcat?utm_source=rss&amp;utm_medium=rss">pythonpodcast.com/configcat</a> today to get 35% off any paid plan with code <em>PYTHONPODCAST</em> or try out their free forever plan.</li> <li>Your host as usual is Tobias Macey and today I&#8217;m interviewing Eric Arellano and Stu Hood about Pants, a flexible build system that works well with monorepos.</li> </ul> <h3>Interview</h3> <ul> <li>Introductions</li> <li>How did you get introduced to Python?</li> <li>Can you start by describing what Pants is and how it got started? <ul> <li>What&#8217;s the story behind the name?</li> </ul> </li> <li>What is a monorepo and why might I want one? <ul> <li>What are the challenges caused by working with a monorepo?</li> <li>Why are monorepos so uncommon in Python projects?</li> </ul> </li> <li>What is the workflow for a developer or team who is managing a project with Pants?</li> <li>How does Pants integrate with the broader ecosystem of Python tools for dependency management and packaging (e.g. Poetry, Pip, pip-tools, Flit, Twine, Pex, Shiv, etc.)?</li> <li>What is involved in setting up Pants for working with a new Python project? <ul> <li>What complications might developers encounter when trying to implement Pants in an existing project?</li> </ul> </li> <li>How is Pants itself implemented? <ul> <li>How have the design, goals, or architecture evolved since Pants was first created?</li> <li>What are the major changes in the v2 release? <ul> <li>What was the motivation for the major overhaul of the project?</li> </ul> </li> </ul> </li> <li>How do you recommend developers lay out their projects to work well with Python?</li> <li>How can I handle code shared between different modules or packages, and reducing the third party dependencies that are built into the respective packages?</li> <li>What are some of the most interesting, unexpected, or innovative ways that you have seen Pants used?</li> <li>What have you found to be the most interesting, unexpected, or challenging aspects of working on Pants?</li> <li>What are the cases where Pants is the wrong choice?</li> <li>What do you have planned for the future of the pants project?</li> </ul> <h3>Keep In Touch</h3> <ul> <li>Eric <ul> <li><a href="https://www.linkedin.com/in/arellanoeric/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">LinkedIn</a></li> <li><a href="https://github.com/Eric-Arellano?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Eric-Arellano</a> on GitHub</li> <li><a href="https://twitter.com/EArellanoAZ?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">@EArellanoAZ</a> on Twitter</li> </ul> </li> <li>Stu <ul> <li><a href="https://github.com/stuhood?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">stuhood</a> on GitHub</li> <li><a href="https://twitter.com/stuhood?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">@stuhood</a> on Twitter</li> <li><a href="https://www.linkedin.com/in/stu-hood-6b65633/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">LinkedIn</a></li> </ul> </li> </ul> <h3>Picks</h3> <ul> <li>Tobias <ul> <li><a href="https://en.wikipedia.org/wiki/Cursed_(2020_TV_series)?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Cursed</a> TV show</li> </ul> </li> <li>Eric <ul> <li><a href="https://docs.python.org/3/library/turtle.html?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Turtle Graphics</a></li> </ul> </li> <li>Stu <ul> <li><a href="https://fasterthanli.me/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Faster Than Lime</a> blog</li> </ul> </li> </ul> <h3>Links</h3> <ul> <li><a href="https://www.pantsbuild.org/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Pants</a></li> <li><a href="https://foursquare.com/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Foursquare</a></li> <li><a href="https://foursquare.com/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Twitter</a></li> <li><a href="https://www.toolchain.com/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Toolchain</a></li> <li><a href="https://bazel.build/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Bazel</a> build tool</li> <li><a href="https://ant.apache.org/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Ant</a> build tool</li> <li><a href="https://en.wikipedia.org/wiki/Monorepo?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Monorepo</a></li> <li><a href="https://pycqa.github.io/isort/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">isort</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://python-poetry.org/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Poetry</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://github.com/pypa/setuptools?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">setuptools</a></li> <li><a href="http://mypy-lang.org/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">mypy</a></li> <li><a href="https://bandit.readthedocs.io/en/latest/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Bandit</a></li> <li><a href="https://flake8.pycqa.org/en/latest/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Flake8</a></li> <li><a href="https://github.com/pantsbuild/example-python?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Sample Python Pants Project</a></li> <li><a href="https://grpc.io/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">gRPC</a></li> <li><a href="https://developers.google.com/protocol-buffers?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Protocol Buffers</a></li> <li><a href="https://www.rust-lang.org/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Rust</a></li> <li><a href="https://wiki.python.org/moin/GlobalInterpreterLock?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">GIL == Global Interpreter Lock</a></li> <li><a href="https://www.python.org/dev/peps/pep-0420/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">PEP 420</a></li> <li><a href="https://blog.pantsbuild.org/python-3-migrations/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Blog post about using Pants to migrate from Python 2 to 3</a></li> <li><a href="https://github.com/pantsbuild/pex?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Pex</a></li> <li><a href="https://shiv.readthedocs.io/en/latest/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">Shiv</a></li> <li><a href="https://pyoxidizer.readthedocs.io/en/stable/?utm_source=rss&amp;utm_medium=rss" rel="noopener" target="_blank">PyOxidizer</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%2Fpants-monorepo-build-tool-episode-290%2F&amp;action_name=Pants+Has+Got+Your+Python+Monorepo+Covered+-+Episode+290&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" />