I usually manage my system-wide Python installation with the system's package manager, and avoid using Python's own package manager pip. Not so in a virtual environment. As described in a previous post, pip, together with the pip-tools, offers a very convenient way to get and to keep all tools in your virtual environment up to date.
Imagine my surprise when a couple of months ago 'pip-review --interactive' did not update my tools one by one, as it used to do, but only resulted in a 'fish: Unknown command 'pip-review'. As it turned out, the developer of pip-tools (which I dutifully kept up to date) had decided to dump pip-review in favor of two new commands, pip-compile and pip-sync.
I'm sure he had good reasons for that, and it's really no big deal for end-users like me. After a 'pip list' I knew what I needed, created a corresponding requirements.in as Vincent described in his post, and ran
pip-compile requirements.in && pip-sync requirements.txt
That's all. It's still as useful as ever.