My understanding of the value of using Python virtual environments is this-
- You can run Python using a different set of libraries or different version of the libraries, without needing to have these versions override the ones in your main installation.
- You want to test, try out, or develop a libraries or module and you want to try to make sure you know the minimal set of libraries (and perhaps their version) needed to run it.
The usual way to install these other libraries is using pip, though there are other ways. For pip-installable packages, you can find out which versions are available by adding "==" to the install command; e.g.,
python -m pip install leo==
ERROR: Could not find a version that satisfies the requirement leo== (from versions: 4.11-final, 5.0-final, 5.7.dev406, 5.7b2.dev27, 5.7, 5.7.2, 5.7.3, 5.8b2, 5.8, 5.8.1b1.dev182, 5.8.1b1.dev183, 5.9b1, 5.9b2, 5.9, 6.0b1, 6.0, 6.1.dev0, 6.1b1.dev0, 6.1b1, 6.1, 6.2.dev0, 6.2b1, 6.2, 6.2.1)
The "==" usually is used to specify the exact version you want. So if I wanted to compare Leo 6.2.1 (my standard installed version) against Leo 6.1, I could set up a new virtual environment, and install Leo in it using pip install leo==6.1. (Note that just because a version is listed here, there is no guarantee that the supporting libraries will be available. For example, I wouldn't be able to install 4.11-final because it requires the PyQt4 libraries, and they aren't available any more; that version is just too old).
Of course, this won't work if you want to try versions that are not available to pip. No one is likely to make a pip-installable install package for a version under active development, one that changes frequently.
None of this is within Leo's control, so it's hard for me to see what the Leo developers could do differently.