Environments and Package Managers

Throughout this tutorial, we used pip, a Python package manager, to install our software and other Python software we needed. In Getting Started, we used venv to create a “virtual environment”, a sandbox separate from the general system Python where we could install and use software without interfering with any system Python tools or other projects.

There are many alternatives to venv. This post of Stack Overflow is a good survey of the field.

Conda

Conda, which is both a package manager (like pip) and an virtual environment manager (like venv) was developed specifically for the scientific Python community. Conda is not limited to Python packages: it has grown into a general-purpose user-space package manager. Many important scientific Python packages have important dependencies that aren’t Python packages and can’t be installed using pip. Before conda, the user had to sort out how to install these extra dependencies using the system package manager, and it was a common pain point. Conda can install all of the dependencies.

Conda is conceptually a heavier lift that pip and venv, which is why we still with the basics in Getting Started, but it is extremely popular among both beginners and experts, and we recommend becoming familiar with it.

Check whether conda is already installed:

conda

If that is not found, follow the steps in the conda installation guide, which has instructions for Windows, OSX, and Linux. It offers both miniconda (a minimal installation) and Anaconda. For our purposes, either is suitable. Miniconda is a faster installation.

Now, create an environment.

conda create -n my-env python=3.6

The term my-env can be anything. It names the new environment.

Every time you open up a new Terminal / Command Prompt to work on your project, activate that environment. This means that when you type python3 or, equivalently, python you will be getting a specific installation of Python and Python packages, separate from any default installation on your machine.

conda activate my-env

The use of virtual environments leads to multiple instances of python, pip, ipython, pytest, flake8 and other executables on your machine. If you encounter unexpected behavior, use which ____ to see which environment a given command is coming from. (Linux and OSX only.)