Python deployment is a shitshow. Unfortunately mission critical stuff (looking at you letsencrypt) is also written in it which means that your systems are built on very shaky foundations.
apt install python3 virtualenv
virtualenv env
. env/bin/activate
pip install -r requirements.txt
Done. And then with fabric you can automate deployments in a few lines of codes !The happy case works, it always does. The problem is in the edge cases and the exceptions. This probably goes for the bulk of all software.
I strongly agree that any python program must install its dependencies in a virtualenv. One could even argue that this principle could be extended to any software !