## Introduction

As a followup to my article about pyenv, I decided it was worth also taking a look at Anaconda/Miniconda an alternate install for Python 2/3. It is available for Windows, OSX, and Linux. I will walk you through obtaining and installing using miniconda3 (a minimal install). I will also introduce you to the conda tool for creating and using environments and installing packages.

From the Continuum website it is described as, "Completely free enterprise-ready Python distribution for large-scale data processing, predictive analytics, and scientific computing"

While it's roots are designing a tool for science, math, engineering, and data analysis, thanks to the miniconda installer you can customize your install starting with a minimal root environment.

The key selling point, for myself anyways, is that you can install Python in your home directory (or users directory on OSX and Windows) and not touch your system installed Python which may be needed by your OS for various things. You can also install on older production systems that may be using Enterprise Linux and a very ancient version of Python.

Before you continue, please take a look at https://store.continuum.io/cshop/anaconda/ for a more formal look at Anaconda. We're going to get down to the nuts and bolts next!

## Which one to use ?

We have two ways to install.

Miniconda: http://conda.pydata.org/miniconda.html

This is mostly a matter of choice, if you like having a complete Python environment, and don't mind a larger download, things you might not use, or new to Python, pick the Anaconda installer. It includes 181+ common packages preinstalled.

If you want a bootstrap or minimal install, choose miniconda. Miniconda basically just installs the standard library and interpreter.

Next you will need to determine if you want to use Python 2 or 3 by default. I personally choose Python 3 because I'm trying to discipline myself to use Python 3 whenever possible. This article will demonstrate an install with Python 3. Don't worry though you can have both 2 and 3 installed at the same time as we will show later on with creating environments. For now, pick your starting point, download ONE of the installers (Anaconda based on 2 or 3, or Miniconda based on 2 or 3)

## Installing

The installation instructions are here: http://docs.continuum.io/anaconda/install.html

Windows and OSX Installs are easy using the GUI based installers, so I will focus on the Linux install in my example.

bash ~/Downloads/Miniconda3-3.0.5-Linux-x86_64.sh


Welcome to Miniconda3 3.0.5 (by Continuum Analytics, Inc.)

Do you approve the license terms? [yes|no]
[no] >>> yes

Miniconda3 will now be installed into this location:
/home/dbehnke/miniconda3

- Press ENTER to confirm the location
- Press CTRL-C to abort the installation
- Or specify an different location below

[/home/dbehnke/miniconda3] >>>

Python 3.3.4 :: Continuum Analytics, Inc.
creating default environment...
installation finished.
Do you wish the installer to prepend the Miniconda3 install location
to PATH in your /home/dbehnke/.bashrc ? [yes|no]
[no] >>> yes


## Updating conda

Now that you have installed miniconda, you should open up a terminal (OSX, Linux) or Command prompt (Windows). The remainder of this article will show a bash prompt, but the commands are the same in Windows.

conda is a tool for managing environments and packages. If you are familiar with virtualenv, environments are similar. With Anaconda we usually don't use virtualenv or pip (they can be installed if you really want to) for installing packages and creating enviornments. Instead conda takes care of most of the work. We will start by updating conda since it's the center of importance for using Anaconda.

The following command will determine if conda is installed and available in your PATH:

$conda -V conda 3.0.5  Now lets update conda $ conda update conda

Package plan for installation in environment /home/dbehnke/miniconda3:

package                    |            build
---------------------------|-----------------
conda-3.0.6                |           py33_0         106 KB

The following packages will be UN-linked:

package                    |            build
---------------------------|-----------------
conda-3.0.5                |           py33_0

The following packages will be linked:

package                    |            build
---------------------------|-----------------

Proceed ([y]/n)? y


## Environments

By default you install in the root environment. Environments allow you to sandbox or seperate your installed packages. You can even have different python versions in each environment. They live in the envs directory in your installation directory. Conda will also try to create hard-links whenever possible to save disk space.

List installed environments (e.g. here I have 2 environments created already from a previous install. The * indicates my current environment is root)

$conda info -e # conda environments: # oracle /home/dbehnke/miniconda3/envs/oracle root * /home/dbehnke/miniconda3  ### Creating Here is the breakdown of creating a new environment. For the full documentation, access the help. conda create -h  We will look at a subset of the available options (taken from the -h command) Description Create a new conda environment from a list of specified packages. To use the created environment, use 'source activate envname' look in that directory first. This command requires either the -n NAME or -p PREFIX option. conda create -n NAME [package_spec [package_spec] ] positional arguments:: package_spec package versions to install into conda environment optional arguments: -n NAME, --name NAME name of environment -p PATH, --prefix PATH full path to environment prefix  I personally like to only use the -n so that it lives with my installation in my home directory. However, if you installed as root or somewhere your user account doesn't have access to you may want to use -p$HOME/somedirectory instead of -n. This article will only use -n for examples.

e.g. Create an environment with Default python (in this case Python 3). Here I create an environment named "oracle" in the env directory of my installation with just the minimal python.

$conda create -n oracle python Package plan for installation in environment /home/dbehnke/miniconda3/envs/oracle: The following packages will be linked: package | build ---------------------------|----------------- openssl-1.0.1c | 0 hard-link python-3.3.4 | 0 hard-link readline-6.2 | 2 hard-link sqlite-3.7.13 | 0 hard-link system-5.8 | 1 hard-link tk-8.5.13 | 0 hard-link zlib-1.2.7 | 0 hard-link Proceed ([y]/n)? y Linking packages ... [ COMPLETE ] |######################################################################| 100% # # To activate this environment, use: #$ source activate oracle
#
# To deactivate this environment, use:
# $source deactivate #  ### Activating $ source activate oracle
prepending /home/dbehnke/miniconda3/envs/oracle/bin to PATH


Verifying environment is active

Notice the (oracle) in front of the bash prompt. This is an indicator that the "oracle" environment is activated.

(oracle) $conda info -e # conda environments: # oracle * /home/dbehnke/miniconda3/envs/oracle root /home/dbehnke/miniconda3 (oracle)$ which python

/home/dbehnke/miniconda3/envs/oracle/bin/python

(oracle) $python Python 3.3.4 |Continuum Analytics, Inc.| (default, Feb 10 2014, 17:53:28) [GCC 4.1.2 20080704 (Red Hat 4.1.2-54)] on linux Type "help", "copyright", "credits" or "license" for more information. >>>  ### Deactivating (oracle)$ source deactivate



You'll notice the (oracle) will be removed as well from the prompt.

### Deleting

You can use the conda remove -n nameofenvironment --all or delete the directory the environment is in.

conda remove -n oracle --all


or, simply

rm -r -f /home/dbehnke/miniconda3/envs/oracle


### Using a Different Version of Python

To list available versions of Python to install you can use "conda search". Here is an example.

conda search "^python$" python 2.6.8 1 defaults 2.6.8 2 defaults 2.6.9 1 defaults 2.7.3 7 defaults 2.7.4 1 defaults 2.7.5 3 defaults 2.7.6 0 defaults . 2.7.6 1 defaults 3.3.0 4 defaults 3.3.1 0 defaults 3.3.2 0 defaults . 3.3.3 1 defaults * 3.3.4 0 defaults  The installed root version deterimines the default version of python (indicated by the * in the conda search example above) used when creating environments. To specify a different version of python, use the environment variable PYTHON=x. (where x is version found in conda search) e.g. installing Python 2 in an environment called oracle. Here I simply use 2 instead of specifying the complete version number which will take the latest version of python 2. $ conda create -n oracle python=2

Package plan for installation in environment /home/dbehnke/miniconda3/envs/oracle:

package                    |            build
---------------------------|-----------------
python-2.7.6               |                1        11.2 MB

The following packages will be linked:

package                    |            build
---------------------------|-----------------

Proceed ([y]/n)?


### Cloning an Environment

If you want to make a snapshot of an already existing environment, you can use the --clone keyword

conda create -n nameofnew --clone nameofsource


## Installing Packages

conda install -n nameofenvironment [package] [package[=x.x.x]] [package]


The -n is names your environment, if you omit the -n then the install will be installed in the root environment. It can't be stressed enough, it is very important to use the -n flag when installing packages in a environment other than the root. Get yourself in the habit of using the -n parameter even if you are using root. From experience, failing to do so you may install the module in root when you meant to install it in another environment.

[package] is either simply the package name, for example flask, or sqlalchemy. This will install the latest version of the package and any dependencies it may need.

[package=x]

This will the version matching x. You can also use x.y, x.y.x, etc. To match the version of the package. For example, as we saw above when we installed Python 2, if we wanted to install the latest version of python 2, we would use python=2. For python 2.6.9, we would use python=2.6.9. The same goes for other packages, flask 0.10, you would use flask=0.10

It's important to note, omitting the python=x will default to the miniconda version, i.e. miniconda3 installs python 3 and miniconda2 installs python 2 by default.

Example #1. Installing an Anaconda environment similar to the full installer

$conda install -n oracle anaconda Package plan for installation in environment /home/dbehnke/miniconda3/envs/oracle: The following packages will be downloaded: package | build ---------------------------|----------------- anaconda-1.9.1 | np18py33_0 3 KB argcomplete-0.6.7 | py33_0 26 KB astropy-0.3.0 | np18py33_0 5.9 MB beautiful-soup-4.3.1 | py33_0 114 KB bitarray-0.8.1 | py33_0 89 KB ...  Example #2. Installing a couple of packages e.g. installing flask and sqlalchemy $ conda install -n oracle flask sqlalchemy

Package plan for installation in environment /home/dbehnke/miniconda3/envs/oracle:

package                    |            build
---------------------------|-----------------
itsdangerous-0.23          |           py27_0          16 KB
jinja2-2.7.2               |           py27_0         308 KB
markupsafe-0.18            |           py27_0          26 KB
sqlalchemy-0.9.3           |           py27_0         1.1 MB
werkzeug-0.9.4             |           py27_0         385 KB
------------------------------------------------------------
Total:         2.0 MB

The following packages will be linked:

package                    |            build
---------------------------|-----------------

Proceed ([y]/n)?


## Removing Packages

This is accomplished by using the "conda remove" command and is similar to the "conda install" command. You can also save time if you have many packages to remove, by simply deleting the environment and recreating it.

What if a package doesn't exist through conda install ?

If the package you want is not available for conda, another option is to search http://binstar.org (make sure the package you find is built for the platform you are on), and then add that person's binstar channel with conda config --add channels binstar_username.

You should try to use "conda install" whenever possible. However, as a last resort, you can solve this problem by installing pip into your environment and pull in packages you need. You could also create your own conda packages, but that's beyond the scope of this article.

e.g. installing pip

\$ conda install -n oracle pip

Package plan for installation in environment /home/dbehnke/miniconda3/envs/oracle:

package                    |            build
---------------------------|-----------------
pip-1.5.4                  |           py27_0         1.5 MB
setuptools-2.2             |           py27_0         458 KB
------------------------------------------------------------
Total:         2.0 MB

The following packages will be linked:

package                    |            build
---------------------------|-----------------

Proceed ([y]/n)?


Then just install as normal using pip install xxxx.

## Uninstalling

To remove Anaconda/Miniconda, just remove all the prepended path variables in your .bashrc or your System Environment, and then remove the installation directory.

Windows Users, I believe you just use the uninstaller in Add/Remove programs.

## Conclusions

Anaconda gives you a nice alternative to the default Python installer on Windows.

Default packages installed in anaconda package include most of the common packages most python developers use.

Consistent installs across Windows, Linux, OSX - you can use the same conda commands.

It should work on older Linux distributions as well since it appears to be compiled on a Red Hat 5 system.