|
25 | 25 | - Versions of each dependency e.g. numpy 2.3.9 |
26 | 26 | - Where/how to aquire the dependency |
27 | 27 |
|
| 28 | +## How to declare data dependencies |
| 29 | + |
| 30 | +:::{.columns} |
| 31 | +:::{.column width="30%"} |
| 32 | +- Links to publicly accessible data dependencies |
| 33 | + - Zenodo or some other long term solution |
| 34 | +- Reference specific versions of the data |
| 35 | +- Ideally automate the fetching of the data |
| 36 | +::: |
| 37 | +:::{.column width="70%"} |
| 38 | + |
| 39 | +::: |
| 40 | +::: |
| 41 | + |
28 | 42 | ## Dependency metadata |
29 | 43 |
|
30 | 44 | - There are automated ways of resolving dependencies |
|
36 | 50 | dependency you are using |
37 | 51 | - Important to track both - lock files record the exact environment you use |
38 | 52 |
|
39 | | -## System dependencies |
| 53 | +## System dependencies - Conda |
| 54 | + |
| 55 | +- Python centric package manager |
| 56 | +- Can be used for installing python packages |
| 57 | +- Also able to manage environments |
| 58 | + - useful for per-project dependencies |
| 59 | + - can install system dependencies |
| 60 | + - even different python versions! |
| 61 | +- Available on most HPC systems (usually as Miniconda) |
| 62 | +- Can export environments to text-based files |
| 63 | + |
| 64 | +## System dependencies - Containers |
| 65 | + |
| 66 | +:::{.columns} |
| 67 | +:::{.column width="60%"} |
| 68 | +- Containers package up code and all dependencies |
| 69 | +- Virtualised operating system |
| 70 | +- Faster than a virtual machine with many of the benefits |
| 71 | +- Examples: |
| 72 | + - Docker (Closed source but popular) |
| 73 | + - Podman (Open source alternative) |
| 74 | + - Apptainer (HPC focused/compatible) |
| 75 | +- Portable and cross-platform |
| 76 | +::: |
| 77 | +:::{.column width="40%"} |
| 78 | + |
| 79 | + |
| 80 | + |
| 81 | +::: |
| 82 | +::: |
| 83 | + |
| 84 | +## System dependencies - Nix/Guix |
| 85 | + |
| 86 | +:::{.columns} |
| 87 | +:::{.column width="60%"} |
| 88 | +What they have in common: |
| 89 | + |
| 90 | +- Declarative package managers |
| 91 | +- Use pure functional languages to create environments |
| 92 | + - same inputs = same outputs |
| 93 | +- Packages are hashed |
| 94 | + - can lookup if package already exists locally |
| 95 | +- Publicly hosted and *versioned* package repository |
| 96 | + - All packages have defined and unchanging dependencies |
| 97 | +- Handles all dependencies automatically |
| 98 | + - even linked libraries, so no hidden dependencies! |
| 99 | +::: |
| 100 | +:::{.column width="40%"} |
| 101 | +How they differ: |
40 | 102 |
|
41 | | -- Conda |
42 | | -- Docker |
43 | | -- Nix/Guix |
| 103 | +- Nix language vs Guile scheme |
| 104 | +- Guix package repository only hosts fully open source packages |
| 105 | + - Can be difficult when using vendor-locked software e.g. CUDA |
| 106 | +::: |
| 107 | +::: |
0 commit comments