This week we welcome Vinay Sajip as our PyDev of the Week! Vinay is a core developer of the Python language. Vinay is also a core contributor for python-gnupg, a Python API for the GNU Privacy Guard as well as other great packages.
Let’s spend a few moments getting to know Vinay better!
Can you tell us a little about yourself (hobbies, education, etc):
I studied Chemical Engineering at university and got a job as a process systems engineer in a company that built chemical plants. After a couple of years when there was a glut in capacity in the industry and not much new plant was being built, I got bored and joined a small company making CAD software that worked on Apple II with a custom joystick. This software was written in 6502 assembler and I learned a lot about close-to-the-metal programming. Programming was something I did as a hobby and I’m largely self-taught – so having a job that was based on a hobby was ideal for me! I’ve not looked back, and soon got into consulting – doing software development, project management, and advising on the quality of other people’s software.
My other hobbies are reading, film, and the theatre, and I occasionally play videogames. For exercise, I walk and hike.
Why did you start using Python?
I came across Mark Lutz’s “Programming Python” when browsing in my local library in around 1999. Having been something of a programming language nerd, I was fascinated by the language and saw how it could considerably improve my productivity at work while being fun to use. Although at the time Python was little known and most of my clients used Java or C/C++, I was able to develop tools that made me very productive and (as I generally work on fixed-price projects) using Python contributed to my consulting bottom line.
What other programming languages do you know and which is your favorite?
What projects are you working on now?
I’m currently working on a parser generator that generates lexers and recursive descent parsers in Python which have no external dependencies. It’s still a work in progress and not ready to release. Beyond that, I have a number of projects which are in maintenance mode, but I consider myself still working on them, as I get occasional bug reports and feature requests for them:
The parts of Python I maintain – logging, venv, and the Python launcher for Windows.
python-gnupg – A Python API for the GNU Privacy Guard (GnuPG)
pagesign – A Python wrapper for age and minisign, which are more modern equivalents to GnuPG
distlib – A library that implements some Python packaging standards (PEPs), which is used by pip
simple_launcher – an executable launcher for Windows which can be used to deploy applications written in Python and other languages. It’s used by pip via distlib
sarge – A wrapper for subprocess which provides command pipeline functionality
Which Python libraries are your favorite (core or 3rd party)?
I like Django and also the Bottle web framework (very underrated), Trio for async, BeautifulSoup for parsing HTML, Whoosh for full-text search and requests for HTTP client work. I also use Supervisor for process management, though that’s more application than library.
How did you get started with python-gnupg?
I needed encryption/decryption and signing/verification functionality for a client project which involved reconciling credit card transactions and interfacing with banking systems. I realised that GnuPG fit the bill, but had no usable programmable interface. So I built one (though in C#, not in Python – the client is a Microsoft shop). It worked well, so I looked around for a similar library in Python and adapted one that I found – to work with the stdlib subprocess, and with expanded functionality. I released that as python-gnupg.
What are some lessons that you learned as an open source creator or maintainer?
People who like your open source software will sometimes send messages of appreciation – when I did a lot of work porting Django to Python 3 (so that it worked on 2.x and 3.x with a single codebase), I even got sent small gifts as tokens of appreciation. But there are very few instances where people go out of their way to publicly show appreciation (though people sometimes do, for example, about the requests library, or Flask). On the other hand, people who don’t like your software (for whatever reason) will publicly slate it and talk about how they “hate it”, but without giving any thought-through reasoning. You’ll find such sentiments quite often relating to Python’s logging. Negative feedback tends to get magnified, and I’ve learned to discount anything that’s emotive and not backed by specific examples and rationale as to why there’s a problem.
I’ve also found that people often jump straight to creating PRs without discussing an issue/feature first. Sometimes they miss the mark, leading to wasted time for them and the maintainers. I generally find it more useful to raise a potential issue for discussion before producing a PR.
Is there anything else you’d like to say?
I wish Python packaging was in a better place. It’s an area where everybody has an opinion and it’s very hard to get a consensus on important things, so it can be a thankless area to work in. But I love the wider Python community and the Python core development community because they’re so welcoming and helpful.
Thanks for doing the interview, Vinay!