The Python version should match on your registration / execution environments but does not need to match on the Server. For example, you register your flow locally on 3.9, it's stored in the Server which is hosting an API using 3.8, you create a flow run and it's submitted to a local agent running 3.9 and it creates a subprocess to execute the flow. Your tasks are submitted to dask workers, which should also be running 3.9.