For something simple, running on a single box, I just use Fabric to script out anything I need. That could be as simple as doing a git pull and restarting a service via SSH. I also use it for Docker-based deployments too. For example:
For things that need multiple instances, auto-scaling, and a load balancer, I use AWS exclusively. It's really easy to interact with all of their services using the official Python SDK (boto3). Again, I script all of that with Fabric, even if all I do is call AWS services, and never open an SSH connection.
This may not be the sexiest way to do things, but I've deployed several apps (Django and other Python frameworks) with this approach and it continues to get the job done for me, even with AWS.
Brian Hines
Web engineer