How to prevent version upgrade when adding package?

In the particular scenario, Flux.jl depends on Zygote.jl,
so Pkg.add("Flux") also adds a version of Zygote behind the scene.

However, when it is necessary to access something in Zygote,
it is still necessary to explicitly Pkg.add(“Zygote”), even though a
version of Zygote is already loaded.

The question and issue: currently when doing this,
it triggers a package upgrade, Zygote v0.4.13 → v0.4.17

That is probably a good thing, however my program needs to be exactly reproducable, and so I want to be in control of when packages change versions.

How can I prevent Pkg.add() from changing the version of the added package.

There are several answers to this. One answer is to add Zygote directly, which will tell the package manager not to mess with it (unless you tell it to). A perhaps more practical one is to trust semantic versioning to know that v0.4.13 and v0.4.17 should be compatible since they just differ by point releases.

See Pkg.pin.

Thank you I think both of these would work