Define a package management scheme for handling the poretitioner's dependencies and build outputs.
Details
To make the NanoporeTER application distributable, one thing we should iron out quickly is our dependency management scheme. I would advise against using pip, as that can lead to non-deterministic builds.
Chris suggested Nix, and based on my research it seems like a really strong contender. I've spent the last two weeks diving in and experimenting with it.
Nix Pros:
Deterministic builds (guaranteed to work across machines)
Easy to rollback
Purely functional, so installing packages can't interfere with other packages
Pairs with Docker
Active development community
All current dependencies already exist in the package cache
Nix Cons:
Verbose, esoteric syntax (thus harder to maintain)
Documentation is not always easy to read (took me ~2 weeks to be useful). This is improving.
Goal
By the end of this task, I anticipate having an extremely simple main script that will import the core NanoporTER dependencies, as proof that the packaging works. The next step will be wrapping it in a docker image, and trying it from another machine.
Description
Define a package management scheme for handling the poretitioner's dependencies and build outputs.
Details
To make the NanoporeTER application distributable, one thing we should iron out quickly is our dependency management scheme. I would advise against using pip, as that can lead to non-deterministic builds.
Chris suggested Nix, and based on my research it seems like a really strong contender. I've spent the last two weeks diving in and experimenting with it.
Nix Pros:
Nix Cons:
Goal
By the end of this task, I anticipate having an extremely simple main script that will import the core NanoporTER dependencies, as proof that the packaging works. The next step will be wrapping it in a docker image, and trying it from another machine.
References
Nix Manual
PyCon Nix and Python slides
Python on Nix
Nix for Python
Nix and Jupyter
My first Nix derivation