Motivation

Installing a scientific computing environment

Basic Python packages for scientific computing include numpy, sympy, matplotlib, scipy, ipython, nose, and odespy. Some of these packages depend on a series of non-Python software packages that must be installed on the system. These and other relevant Debian packages are

gcc g++ gfortran
libatlas-base-dev libsuitesparse-dev
tcl8.5-dev tk8.5-dev
subversion mercurial cvs git gitk
libfreetype6-dev libpng-dev
mayavi2 tcl-vtk
libsqlite3-dev

With this software in place, we can go on with pip install of Python packages:

Terminal> packages="numpy sympy matplotlib scipy ipython nose"
Terminal> for p in packages; do pip install $p; done
Terminal> pip install -e \
git+https://github.com/hplgit/odespy.git#egg=odespy

Note that pip install is preferred over apt-get install of Debian packages because pip will usually install a newer version of the package. It also opens up the possibility for installing the development version directly from the package's repository on (e.g.) GitHub.

A pip freeze > requirements.txt results as usual in a list of the packages in the environment, but this file is not so useful.

Warning. This requirement file cannot be used to recreate the environment. The reason is that there is no way to impose a certain sequence of the packages for installation. This is demanded, because numpy must be installed before scipy, matplotlib, and most other packages for numerical computing. One must therefore provide a Bash script or Python program for installing the environment. Virtualenv is still useful for having multiple environments with different versions of, e.g., numpy and matplotlib, but pip install via a requirements.txt file is not possible.

A Bash script for installing the environment above may look like

#!/bin/sh
apt="yes | sudo apt-get install"
$apt gcc g++ gfortran
$apt libatlas-base-dev libsuitesparse-dev
$apt tcl8.5-dev tk8.5-dev
$apt subversion mercurial cvs git gitk
$apt libfreetype6-dev libpng-dev
$apt mayavi2 tcl-vtk
$apt libsqlite3-dev

packages="numpy sympy matplotlib scipy ipython nose"
for p in packages; do pip install $p; done
pip install -e git+https://github.com/hplgit/odespy.git#egg=odespy

Other packages can be added to the script as well:

pip install -e git+https://github.com/hplgit/scitools.git#egg=scitools
# Do manual install of Scientific Python
if [ ! -d srclib ]; then mkdir scrlib; fi
cd srclib
hg clone https://bitbucket.org/khinsen/scientificpython
cd scientificpython
sudo python setup.py install
cd ../..

(hpl 1: Should refer to the Vagrant document for how to make a list of packages and then autogenerate scripts.)

References.