I think it's more common to have required dependencies in the zip file, then you can have the main python file outside the zip and call it like so
spark-submit --deploy-mode cluster --master yarn --py-files s3://my-dev/scripts/job-launchers/dev/pipeline.zip s3://my-dev/scripts/job-launchers/dev/job.py