Let’s take a few moments to get to know Jeremiah better!
Can you tell us a little about yourself (hobbies, education, etc):
I went to university to study hardware and got a computer engineering degree. Along the way, I had to learn a few programming languages, most of which wouldn’t even be called a third-generation language. However, my first job was on a software development team for a company that made hardware, just in a different department. I have used Python to some degree at every job I’ve held; I have not used my hardware domain knowledge directly once in my professional career.
When I am not working with computers I am either hanging out with my family, rock climbing, ideally in the Cascades, or working with my other passion by roasting, brewing, and, most importantly, drinking coffee in all its forms.
Why did you start using Python?
I first used Python when I got my first Raspberry Pi. I flashed Raspbian (my first Debian-based distro) onto a new SD card. It came with IDLE and modules that could control the GPIO pins pre-installed. I had heard how easy it was to use Python and I needed to do a lot of quick prototyping to write some device drivers for the Pi, so I learned Python over winter break and when I got back I wrote my first Python program, complete with C integrations. I still think it was faster than doing the entire project in C.
What other programming languages do you know and which is your favorite?
I am a pretty big Pythonista. For me right now nothing comes close to Python. However, I do like to use C, Ruby, and Rust whenever I feel the situation warrants it. I also write a lot of shell scripts, mainly bash. Part of that is working on CI and infrastructure config, but then again a lot of it is my chasing that perfect rc setup.
What projects are you working on now?
I am also working on a low-level python module installer for ActiveState that I think will be ready to be open-sourced soon!
Which Python libraries are your favorite (core or 3rd party)?
From the core I really enjoy using pathlib, contextlib, and itertools.
I think that perhaps the most overlooked function in the core is inspect.cleandoc. I have too frequently seen modules that break otherwise well-indented code because it needed a multiline string and just didn’t clean it.
Some of my favorite packages to install are isort, tqdm, yaspin, rich, and pytest. I spend a lot of time staring at a command prompt and I like it to look good.
What do you think are the hardest things about packaging in Python right now?
I think sharing python code with users, especially anyone who is not at least an intermediate python developer, is still the biggest, and unsolved, problem with Python packaging.
The user first has to have a python interpreter of the right version. If they don’t, there isn’t one clear path forward for all platforms and for users at all permission levels to get a new python executable. And then, once a correct python is present the user probably doesn’t know how to best isolate this new package, especially an executable script. They shouldn’t have to be familiar with python dev tools like venv, and remember to always turn it on to use some python package, but if they don’t they will likely evenutally run into a different set of problems by only using the global environment. And picking the ‘right’ isolation tool if python isn’t one of your primary languages is going to be a difficult and confusing experience.
How can we make packaging better in Python?
In my day job at ActiveState I work every day to make distributing python easier for everyone. It’s not yet in a place to help package maintainers upload new distributions, but it does simplify deploying python environments across multiple platforms; we even make sure the version of Python you require is in place, including its many external C library requirements!
Thanks for doing the interview, Jeremiah!