I should definitively write my own set of guidelines and practices for Python development. For the moment you can already find some in this article. I agree with most of the practices outlined expect maybe using TOML for configuration files (I prefer relying on environment variables and .env
files). I would also recommend to opt for typer instead of argparse
for more complex CLIs. Finally I would suggest using tools like uv or pdm to manage your project (packaging, dependencies, virtual environment).
Other articles
10 Python programming optimisation techniques.
In this article, the author provide some interesting techniques for optimising Python code, in particular, memory consumption for cases where memory is critical or resources are limited. I would personally not apply all those techniques by default and reserve them for specific use cases, preferring readability in a first place. Still, those techniques are interesting to have in mind.
read morePython packaging is great now, uv is all you need
To facilitate managing my Python projects managing and packaging I'm using PDM. This tool is really great and has lot of very nice features that will really simplify your life for building either applications or libraries. Lastly the guys from Astral (creators of ruff) made lot of improvement to their own similar tool,
read moreuv
. In this article, Juan Luis Cano Rodríguez quickly explain whyuv
is a serious contender in the Python project managing/packaging game.Integrating Problem Details RFC with FastAPI
During my past development projects, I built a lot of HTTP APIs using various langages (TypeScript, JavaScript, Python) and frameworks (fastify, FastAPI, flask, express). One thing I've noticed is that each of those frameworks have their own way of shaping HTTP error responses. This is actually not a big deal considering that most clients (i.e: HTTP clients) do not really rely on strict structure for such errors.
read moreTesting Python code integration with an Azure Eventhub
On one of my project I needed to create a simple API allowing clients to publish some messages into an Azure EventHub. Because authentication is ensured by a JWT we could not rely on our clients to directly publish messages to the Eventhub (and by the way I prefer abstracting this away through a HTTP API).
read moreDebugger doesn't stop at breakpoints with pytest if pytest-cov is used
Recently, while trying to debug some of my
read morepytest
tests using VSCode, I discovered that my breakpoints were completely ignored and the tests never stopped. After nearly breaking my keyboard in frustration, I stumbled upon this GitHub issue.One way to fix Python circular imports
I've already encountered issues regarding circular imports, most of the time it was related to typings only (two modules referencing types from each others) and is easily resolved using a
read moreif TYPE_CHECKING:
block. For other cases I try my best to shape my modules in a way that it does not require circular imports. In the following article I discovered another way to overcome circular imports that I could not have think about simply by defering imported names lookup.Don't use Python's property (for bad reasons)
I recently stumbled upon a code from one of my coworker who is rather new to Python. He is coming from a Java/Scala background and used python's
read moreproperty
decorator to mimic Java Getters/Setters. Let's see why you should not do this.