Reproducible development environments with Nix

May 27, 2017, 10:30 a.m. - 11:00 a.m.

Providing build and development environments for Python based projects is typically not without challenges. This talk presents how Nix - The Purely Functional Package Manager can be used to provide reproducible environments for development and deployment of Python based Web projects.

Today’s typical Web projects come with a bunch of challenges which make it a non-trivial task to provide reproducible development and build environments. Python based Web projects are no exception to this.

Some of the common challenges:

  • Web projects are rarely Python-only. Typically artifacts from different ecosystems are needed, often with their own tool-chain, e.g. npm, bower, grunt or webpack from the JavaScript world. These tools are needed inside of the build environment and often also inside of a developer’s work environment.
  • System dependencies are often managed in a system specific way, usually specific to the package management tool of the operating system.
  • Development environments diverge over time if parts are managed manually. This leads to hard to diagnose issues due to subtle differences between different developer’s environments.
  • Development and production environments are hard to keep in sync which makes it hard to reproduce issues from a production environment.
The talk introduces the high level concepts of Nix and how it can be applied for the case of Python based Web applications to mitigate the aforementioned challenges. It concludes with lessons learned from following this approach in various Python based web projects during the last years.

Johannes Bornhold

Development of Web applications for a living since 2007, mainly based on Python, often using frameworks like Django, Pyramid and Pylons. Since that time he has been curios about the problem of dependency management and reliably providing a working environment for web projects in a team context.

Since 2014 he has been using tools out of the NixOS ecosystem to manage project dependencies, provide reproducible development environments, and automate as much as possible. He is working on Linux and OSX systems and using the Nix based tool-chain on both systems on a day to day basis.

During the last years he has been working for various companies in Berlin’s startup scene in deeply technical roles as well as leadership focused roles. Today he runs his own software development company headquartered close to Oldenburg / Bremen in north Germany.

Sign up and never miss a PyMunich event