PyDev of the Week: Paul Moore

This week we welcome Paul Moore as our PyDev of the Week! Paul is a core developer of pip, the defacto method of installing packages in Python as well as a core developer of Python itself. You can get a glimpse of some of the projects that Paul is involved with on his Github profile. Let’s spend some time getting to know Paul better!

Can you tell us a little about yourself (hobbies, education, etc):

I was born in Liverpool, England, and (apart from a few years in Cambridge studying maths at university) I’ve lived in the north west of England all my life. When I was at school, my passion was for maths, which led to an interest in programming and computers. My first computer was a Sinclair ZX-81 and I learned Z80 assembler from a disassembly of the complete OS of that machine – not something I’d ever try these days! I quickly moved onto the BBC micro and then the Acorn Archimedes, until I finally joined the mainstream in about 1995 when I got my first PC. Although I’ve always been interested in Unix, I never really used it at home, so I’ve pretty much always been a Windows user (which has its frustrations, but is also much more fun as you get the chance to port stuff that the Unix people take for granted :-)).

In the past I’ve contributed to a lot of open source projects – vim (I wrote the original OLE and Python interfaces), the Boost C++ libraries, some long-gone Windows utility libraries – and ported a lot of Unix programs to Windows (I had my own ports of many of the GNU utilities). These have mostly died down now, and I focus mainly on Python.

In my working life, I work for a software consultancy doing Oracle support. While there’s not much official use of Python involved, I’ve always used it as much as possible for background scripts and personal utilities. And these days it’s nice to see it appearing more and more as a “mainstream” language – it’s popping up in all sorts of unexpected places these days.

Outside of computing I like to spend time with my family (I’m married and I have a son and daughter, both at university/college), as well as playing music (guitar and piano), playing boardgames and reading/watching videos. I used to practice Ju Jitsu, but haven’t had time in a few years now (advancing age may also have been a factor!)

Why did you start using Python?

I became interested in “open source” (it wasn’t called that at the time!) in the early 1990’s, when I loved reading about all the amazing programs available for Unix. None of them were available for the Acorn machines, so naturally I got hold of the sources and ported them myself! I was particularly interested in the scripting languages available, and I produced a port of Perl 3 for the Acorn. While working on that, I heard about this other scripting language called Python. although I didn’t do much about it initially.

When I got a PC, I looked again at Python. I’d got tired of Perl, and liked how clean Python code looked. So I picked up a copy (this was probably around when Python 1.4 was current) and dived in, and I’ve never looked back. I started contributing on the python-dev list, and became involved in the actual development around 2002, when I co-authored PEP 302 (import hooks) with Just van Rossum. I’ve been a relatively active python-dev contributor ever since.

What other programming languages do you know and which is your favorite?

Without a shadow of a doubt, my favourite language is Python. Apart from that, I use Oracle SQL and PL/SQL in my day job, as well as a bit of Java. Otherwise, I’m a bit of a language junkie – I’ve played with pretty much every language I could get my hands on over the years – C/C++, Perl, shell scripting, awk, Lisp, Javascript, Visual Basic, C#, Haskell, J, Forth, Prolog, … I like C for its performance and direct access to the machine – there’s nothing better when you need that low level. SQL pays the wages, and I like its declarative approach to querying data – having to do groups and joins procedurally feels really clumsy once you learn SQL.

Someday I must get into the newer crop of languages like Rust and Go – but whenever I go looking at them, I always end up thinking “but this would be *so* much easier in Python”…

What projects are you working on now?

I became a pip core developer in 2013, and a lot of my time is spent on Python packaging. A lot of that time is contributing to the various discussions and proposals for the future of packaging – I have surprisingly little time for actual coding these days, unfortunately.

Last year, I was invited to become a core Python developer, which was a huge honour. My first commit was the new zipapp module in Python 3.6, which makes it a little easier to bundle standalone Python applications (and brings things nicely full circle, as my first contribution with PEP 302 enabled zipimport in the first place). This is an area I’ve always been interested in, and a lot of my development work is around better and lighter weight ways to package up Python applications, mainly for Windows. There are a *lot* of ways to do this, and tools like py2exe and cx_Freeze are really good solutions, but there are still a lot of people out there struggling with how to deploy their little utility to their friends or co-workers. I’d like it if ultimately it was as easy to share a Python script as it is to share a batch file or VBScript utility.

Which Python libraries are your favorite (core or 3rd party)?

Everyone always says requests here, and I’d have to agree. The design of the API is something we can all learn from. I also love the PyData stack, and particularly the Jupyter/Pandas combination. I do lots of data analysis in my day job, and Excel and similar tools are the standard solutions. Being able to show someone a Jupyter notebook that uses Pandas to analyze data in a flexible and simple to understand way is a fantastic introduction to Python.

And of course the standard library – there are just so many useful tools in there that make writing scripts a breeze. Every time I use another language, I end up struggling with frustration over how many things I have to do by hand.

Where do you see Python going as a programming language?

I think that the core of Python is in a very good place at the moment – we have a stable language, gaining small but useful “quality of life” features. Python 3 is becoming the obvious starting point for people coming to the language, and while 2.7 will be with us for some years yet, it feels to me that the focus is very much going forward now. The biggest area I’d like to see improvements in is deployment – when writing a Python script, it should be trivially easy to add a dependency on something from PyPI and then bundle everything together so that it can be run by *anyone* who has the right version of Python installed (and with the embedded distribution on Windows, even without Python installed at all). The zipapp module is a step in that direction, but we still have a way to go here.

I’d like to see more developments in PyPy and compiler technology in general for Python. While performance isn’t the overriding concern that it once was, when you need it, it’s *really* nice not to have to give up on all the other benefits of Python to get it. I recently had a project that was unusably slow in CPython, but which was competitive with C when run with PyPy. I don’t think people realise they can get that sort of benefit so easily – I certainly didn’t! Although I’d love to see PyPy 3.x get to a production-level release on Windows – having to go back to Python 2.7 is pretty hard for me these days 🙂

Is there anything else you’d like to say?

I’d just like to say that the Python community is awesome. I don’t know of another language with such a helpful and welcoming community. It’s been a big part of my life for many years, and without a doubt I’ve gained far more from the community than just technical information – how we deal with each other, how we encourage participation, etc.

And thanks for inviting me to take part in this series!

Thanks for joining us!