I use straight.el[0] for a reproducible package list. It basically clones the packages and stores a map of package->commit, so you can freeze your packages and reproduce them on another machine.
You could also use the Guix package manager[1] or the Nix package manager[2] to achieve a similar effect.
Reproducible software is much more stable!
[0]https://github.com/raxod502/straight.el