D'après le fichier /usr/lib/python3.7/ensurepip/init.py (du module "ensurepip" dont l'utilité est de servir de bootstrap pour les environnements virtuels) aux lignes 61-67:
On remarque que la version de pip est déterminée par le package wheel situé dans /usr/share/python-wheels.
$ cd ~/
$ pip3 download pip
Collecting pip
Using cached https://files.pythonhosted.org/packages/5c/e0/be401c003291b56efc55aeba6a80ab790d3d4cece2778288d65323009420/pip-19.1.1-py2.py3-none-any.whl
Saved ./pip-19.1.1-py2.py3-none-any.whl
Successfully downloaded pip
$ sudo mv pip-19.1.1-py2.py3-none-any.whl /usr/share/python-wheels
$ sudo mkdir /usr/share/python-wheels/old
$ sudo mv /usr/share/python-wheels/pip-9.0.1-py2.py3-none-any.whl /usr/share/python-wheels/old/
$ cd ~/Projects/MyProject
$ python3 -m venv venv
$ source venv/bin/activate
$ pip --version
pip 19.1.1
TADAAAA !!!
Un guide pour mettre en place un repository PIP personnel ou au niveau d'une entreprise. Cela pourrait être pratique si vous décidez de contrôler plus finement vos dépendances et que vous souhaitez éviter qu'une nouvelle installation (p. ex: nouveau serveur applicatif) utilise des dépendances différentes que celles auxquelles vous vous attendiez.
De manière alternative, préciser une version en particulier dans le fichier créé par la commande "pip freeze" peut également vous aider.
Autres ressources: