Question: So currently, I have ubuntu 19. And it comes by default with python 3.7.5. I need to downgrade to 3.6.5.  EDIT: I am using virtualenv

Answer: The following talks about upgrade from 3.6.7 to 3.7.0 but you can use the same process for downgrade. You should not change the system python unless you really know what you're doing First Install Pyenv Installlation Instructions are here  Look at Pyenv Options $ pyenv pyenv 1.2.14 Usage: pyenv <command> [<args>] Some useful pyenv commands are: commands List all available pyenv commands activate Activate virtual environment commands List all available pyenv commands deactivate Deactivate virtual environment doctor Verify pyenv installation and deevlopment tools to build pythons. exec Run an executable with the selected Python version global Set or show the global Python version help Display help for a command hooks List hook scripts for a given pyenv command init Configure the shell environment for pyenv install Install a Python version using python-build local Set or show the local application-specific Python version prefix Display prefix for a Python version rehash Rehash pyenv shims (run this after installing executables) root Display the root directory where versions and shims are kept shell Set or show the shell-specific Python version shims List existing pyenv shims uninstall Uninstall a specific Python version --version Display the version of pyenv version Show the current Python version and its origin version-file Detect the file that sets the current pyenv version version-name Show the current Python version version-origin Explain how the current Python version is set versions List all Python versions available to pyenv virtualenv Create a Python virtualenv using the pyenv-virtualenv plugin virtualenv-delete Uninstall a specific Python virtualenv virtualenv-init Configure the shell environment for pyenv-virtualenv virtualenv-prefix Display real_prefix for a Python virtualenv version virtualenvs List all Python virtualenvs found in `$PYENV_ROOT/versions/*'. whence List all Python versions that contain the given executable which Display the full path to an executable See `pyenv help <command>' for information on a specific command. For full documentation, see: https://github.com/pyenv/pyenv#readme  Look at Python Versions $ pyenv versions system * 3.6.7 (set by /home/taarimalta/.pyenv/version)  Install a new Python $ pyenv install 3.7.0 Installing Python-3.7.0... WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib? WARNING: The Python readline extension was not compiled. Missing the GNU readline lib? WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib? Installed Python-3.7.0 to /home/taarimalta/.pyenv/versions/3.7.0  If you run into an issue with _ctypes install libffi-dev library Now look at the versions  $ pyenv versions system * 3.6.7 (set by /home/taarimalta/.pyenv/version) 3.7.0  Select 3.7.0 for local environment $ pyenv local 3.7.0  See that the version changed $ pyenv versions system 3.6.7 * 3.7.0 (set by /home/taarimalta/.python-version)  $ python Python 3.7.0 (default, Jan 1 2020, 10:52:57) [GCC 9.2.1 20191008] on linux Type "help", "copyright", "credits" or "license" for more information. >>>  Switch to a different folder cd ../project2 pyenv versions system * 3.6.7 (set by /home/taarimalta/.pyenv/version) 3.7.0  The python version may be different here depending on which python version you have set locally Set pyenv version globally This globally sets a python version for a user pyenv global 3.7.0  Note that pyenv sets local version by adding a .python-version file $ pyenv local 3.7.0 $ cat .python-version 3.7.0  Note that pyenv knows the global version by looking at the ~/.pyenv/version file cat ~/.pyenv/version 3.8.2