The usual assumption is that all of your nodes are using a shared network filesystem, so that the packages installed on the head node are available to all nodes. If you are on a network filesystem but it still seems like the workers don’t have the right packages, first check they have the correct environment activated by doing something like
@everywhere (using Pkg; Pkg.status()).
If your workers don’t share a filesystem, you will need to install your relevant packages manually into each nodes’ local filesystem. The best way to do this would be to distribute a Manifest.toml to all the worker nodes, and then have them instantiate it. I believe there was talk of doing this automatically in an old thread on Github, but it doesn’t exist yet. Something along these lines should work (note, I haven’t actually tested this so it probably needs tweaks, but gives the general idea)
addprocs(...) # in whatever way you normally do
master_manifest = read("Manifest.toml", String)
@everywhere workers() begin