#install or update brew
$ brew install pyenv
#install
$ pyenv install 3.7.3
#make default
$ pyenv global 3.7.3
# and verify
$ pyenv version
3.7.3 (set by /Users/mbbroberg/.pyenv/version)
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init -)"
fi' >> ~/.bash_profile
#reset the current shell
$ exec $0
$ which python
#/Users/mbbroberg/.pyenv/shims/python
$ python -V
$ pip -V
#pip 19.0.3 from /Users/mbbroberg/.pyenv/versions/3.7.3/lib/python3.7/site-packages/pip (python 3.7)
ln -sf /usr/local/bin/python3 /usr/local/bin/python
ln -s -f /usr/local/bin/python3.7 /usr/local/bin/python
# it is said not to do but I used it anyway, because of the conveniency
$ echo "alias python=/usr/local/bin/python3.7" >> ~/.zshrc
unlink /usr/local/bin/python
ln -s /usr/local/bin/python3.3 /usr/local/bin/python
ln -s -f /usr/local/bin/python3.7 /usr/local/bin/python
[ -e ~/.profile ] && . ~/.profile