This seems like a bug:
julia> using Distributed; addprocs()
julia> classifier = :logistic_l1
julia> @everywhere classifier = $classifier
ERROR: On worker 2:
UndefVarError: logistic_l1 not defined
top-level scope at none:0
eval at ./boot.jl:331
#101 at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.4/Distributed/src/process_messages.jl:290
run_work_thunk at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.4/Distributed/src/process_messages.jl:79
run_work_thunk at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.4/Distributed/src/process_messages.jl:88
#94 at ./task.jl:358
...and 16 more exception(s).
Stacktrace:
[1] sync_end(::Array{Any,1}) at ./task.jl:316
[2] macro expansion at ./task.jl:335 [inlined]
[3] remotecall_eval(::Module, ::Array{Int64,1}, ::Expr) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.4/Distributed/src/macros.jl:217
[4] top-level scope at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.4/Distributed/src/macros.jl:201
[5] eval(::Module, ::Any) at ./boot.jl:331
[6] eval_user_input(::Any, ::REPL.REPLBackend) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.4/REPL/src/REPL.jl:86
[7] run_backend(::REPL.REPLBackend) at /home/davidlittle/.julia/packages/Revise/tV8FE/src/Revise.jl:1165
[8] top-level scope at none:0
My current workaround is to just convert to a symbol on the worker, like so.
julia> @everywhere classifier = Symbol($(string(classifier)))
Is this expected behavior?