I have always been a happy virtualenvwrapper user, but I abandoned it last year to use pyenv and pyenv-virtualenv. I don’t really remember why, as virtualenvwrapper is awesome.

The problem is that lately I haven’t been creating and managing a lot of virtualenvs, so I often find myself having to search through pyenv docs to do basic stuff when needed. That’s why I wrote down the usual steps that I follow so that next time I can remember (or find) more easily.

Note: this is not a comprehensive guide or tutorial on virtualenvs and pyenv. It’s just a collection of notes that I had on my note taking app that I thought that could be useful to someone else.

Installing pyenv and pyenv-virtualenv

Here’s how I install it on my Mac + Zsh:

$ brew install pyenv pyenv-virtualenv
$ echo 'eval "$(pyenv init -)"' >> ~/.zshrc
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc

There are other ways to install it, as you can see here.

Updating the list of Python versions

Every now and then a new Python version comes out and you’ll want to be able to install it. To do that, you’ll have to update the list of Python versions that are available on your local machine.

If pyenv was installed via homebrew as I did above, you can just run:

$ brew upgrade pyenv

If you manually installed pyenv by cloning the project repository, then you can run this command to update your local copy of the repo:

$ cd `pyenv root` && git pull

Installing a new Python version

First, list the versions available for installation:

$ pyenv install  --list

If the version that you’re looking for is not listed, try the commands listed in the previous topic.

Once you found the target version on the list (let’s say it’s 3.8.3), you can install it via:

$ pyenv install 3.8.3

Creating a virtualenv with a specific version

Let’s say that you want to create a new virtualenv using the version you just installed (3.8.3). You can do so via:

$ pyenv virtualenv 3.8.3 my-venv-3.8.3

Listing virtualenvs

$ pyenv virtualenvs

Activating a virtualenv

$ pyenv activate my-venv-3.8.3

Deactivating a virtualenv

$ pyenv deactivate

Activating a virtualenv by default on a project

Let’s say that you have a project on a folder in your filesystem and you always want to activate a given virtualenv when entering that folder. To do that, all you have to do is to place a .python-version file in that folder with the name of your virtualenv:

$ echo "my-env-3.8.3" > .python-version

That’s it, now whenever you enter that folder, the virtualenv will be activated. This also works for Python versions that you have installed via pyenv, not just virualenvs.