Can existing virtualenv be upgraded gracefully?

Solution 1:

You can use the Python 2.6 virtualenv to "revirtual" the existing directory. You will have to reinstall all the modules you installed though. I often have a virtual directory for developing a module, and virtualenv the same directory with many versions of Python, and it works just fine. :)

Solution 2:

In Python 3.3+ venv supports --upgrade flag

  --upgrade             Upgrade the environment directory to use this version
                        of Python, assuming Python has been upgraded in-place.

Usage:

python -m venv --upgrade YOUR_VENV_DIRECTORY

I just upgraded my venv from Python 3.7.x to 3.8 on several projects without any issue.