This week we welcome Jason Coombs (@jaraco) as our PyDev of the Week! Jason is the maintainer of twine, SetupTools, CherryPy and 140+ other Python packages. You can see what he’s currently working on by checking out Github.
Let’s take a few moments to get to know Jason better!
Can you tell us a little about yourself (hobbies, education, etc):
I love computing for the transcendent power it’s conferred to humanity. I learned to socialize on bulletin-board systems and derive joy from the continuous improvement that software development affords. My programming skills were forged in Borland C++, K&R C, and my first formal programming course in Scheme. I found recreation in Ultimate (disc), which I’ve played from Socorro to DC to Pittsburgh.
Why did you start using Python?
In 1997, in my undergraduate studies, with a team of 3, I built a compiler for Python. Building on Lex and Yacc and C++, we learned the Python programming language and struggled against the difficulties of the whitespace-sensitive syntax, but came out with a strong appreciation for the value of leveraging the conventions of good formatting for formal context. This introduction to Python came at the perfect time, when I was still relying on languages like Maple or Mathematica for high-level constructs that allowed modeling a problem space without the persistent distractions of memory management and electronic idiosyncrasies. I was hooked.
What other programming languages do you know and which is your favorite?
What projects are you working on now?
I maintain 140+ packages in PyPI, with a score of those or so seeing substantial adoption: Setuptools, keyring, CherryPy, IRC, path, twine. I’m actively working on improving the story of “packaging” on Python. In particular, I am aiding in disentangling some of complex features of Setuptools into separate packages, such as with importlib.metadata and importlib.resources (Python stdlib) and unifying distutils with Setuptools. My stronger passion lies with providing increasingly-sophisticated abstractions for common computing problems, such as with itertools (more_itertools/jaraco.itertools) and functools (jaraco.functools), but in practice, I’m eager to remove whatever impediments are holding the community back the most – to empower every programmer to solve their issue most readily and sustainably.
Which Python libraries are your favorite (core or 3rd party)?
When I first was exposed to Ruby on Rails, I was impressed by how it readily adapted the programming domain to the HTTP protocol. I sought out a comparable endeavor in the Python ecosystem, which led me to Turbogears and by proxy CherryPy. CherryPy, in contrast to other frameworks like Flask and Django, takes an approach of reflecting the programming domain through the HTTP domain, reflecting objects and their attributes as entities over HTTP. Instead of mapping slash-separated strings to functions, CherryPy takes the more Zope-like approach of exposing hierarchically-organized entities into a tree traversable through HTTP paths. The simple elegance of using aspects of the language itself to model a problem space directly is a real joy, and although I really appreciate the value that libraries like Django and Flask and now FastAPI provide, I’m eager to share the benefits and joys of the CherryPy approach.
I’m also a huge fan of libraries like itertools, more-itertools, functools, or any library that empowers the developer to avoid simple branches (if/else) and instead use abstractions akin to functional programming.
What did you get started with the twine project?
I got involved with packaging early on as a user of setuptools when 0.6c7 (or thereabouts) file discovery wasn’t working well with the latest release of Subversion. I later got involved with the Distribute project when I needed Python 3 support for my projects (which relied on Setuptools). I later adopted Setuptools when I set out to merge the Distribute fork back into Setuptools, and I continue to support packaging projects and to help them satisfy the use-cases of Setuptools’ legacy users in a way that’s less monolithic and more composable.
As maintainer of Setuptools and thus the setup.py upload function, I’ve provided input to the twine project on supporting upload functionality. Additionally, as maintainer of the keyring library, I’m interested in enabling tools like twine to utilize keyring to allow users to store their passwords and tokens securely instead of in plaintext.
My support on twine has been mostly in streamlining the maintenance process, a topic on which I’ve presented at the Pittsburgh Python group.
Why use twine versus another publishing utility?
Twine is the PyPA-endorsed official tool for uploading not just to warehouse (the official PyPI index), but also the test index and third-party indexes. It’s designed around refined and supported standards and like a healthy open-source project welcomes any contributions that come with good intentions and work with the maintainers to avoid unintended consequences.
Is there anything else you’d like to say?
I’d be really interested in seeing PyPy become the reference implementation of Python. It helps solve what I see as one of the three largest challenges of Python, that of the performance of function calls (the other two being robust multi-core support and easy packaging). One of the biggest critiques of Python has been that it doesn’t perform as well as other languages such as C++ or Go. And in practice, that’s often okay. I’m only weakly educated on the matter, so it may be my Dunning-Kruger speaking, but I imagine a world where PyPy with its JIT compiler could bring Python into a world competitive with Java for overall performance.
Thanks for doing the interview, Jason!