Python notes

Documenting code

Python libraries

  • Monary - need to install these Ubuntu packages, then install mongo-c-driver, then create /etc/ and write /usr/local/lib in that file. Then run sudo ldconfig. Then run make test. Then do pip install pkgconfig monary.
  • Theano - “Theano is a Python library that allows you to define, optimize, and evaluate mathematical expressions involving multi-dimensional arrays efficiently.”
  • Pandas - “an open source, BSD-licensed library providing high-performance, easy-to-use data structures and data analysis tools for the Python programming language… Time series-functionality: date range generation and frequency conversion, moving window statistics, moving window linear regressions, date shifting and lagging. Even create domain-specific time offsets and join time series without losing data;”
  • GPUStats - "gpustats is a PyCUDA-based library implementing functionality similar to that present in scipy.stats. It implements a simple framework for specifying new CUDA kernels and extending existing ones. Here is a (partial) list of target functionality: Probability density functions (pdfs). These are intended to speed up likelihood calculations in particular in Bayesian inference applications, such as in PyMC, Random variable generation using CURAND"
  • PyOpenCL
  • PyMC - “PyMC is a python module that implements Bayesian statistical models and fitting algorithms, including Markov chain Monte Carlo. Its flexibility and extensibility make it applicable to a large suite of problems. Along with core sampling functionality, PyMC includes methods for summarizing output, plotting, goodness-of-fit and convergence diagnostics.”
  • SciKits - “Welcome to SciKits! Here you’ll find a searchable index of add-on toolkits that complement SciPy, a library of scientific computing routines. The SciKits cover a broad spectrum of application domains, including financial computation, audio processing, geosciences, computer vision, engineering, machine learning, medical computing and bioinformatics.”

  • NetworkX - “NetworkX is a Python language software package for the creation, manipulation, and study of the structure, dynamics, and functions of complex networks.”

Python 2 versus 3


  • From some very superficial searching, it looks like wxPython is the prefered Python GUI for use with matplotlib (I could be wrong though). One big disadvantage is that wxPython isn’t packaged as standard with Python, whilst tkInter is.
  • wxPython screenshots
  • list of Python GUI toolkits


Tutorials & videos

Optimised compilers

Development tools

Statistics and graphical models

  • pebl - Python Environment for Bayesian Learning

Installing an up-to-date scientific Python stack on Ubuntu when you do have root permissions

sudo apt-get install python-dev python-pip python-sphinx libzmq-dev python-matplotlib python-scipy
sudo pip install cython pandas pyzmq jinja2  ipython sphinx

libzmq-dev, pyzmq and jinja2 are all required for iPython notebook.

For scipy:

sudo apt-get install libatlas-base-dev gfortran python-pip
sudo pip install scipy

If you get the following error when trying to import scipy cannot open shared object file: No such file or directory then run

sudo update-alternatives --config

and select /usr/lib/atlas-base/atlas/ (this tip taken from Daniel Nouri's blog post on libblas)

Installing Python when you don’t have root permissions

  • ./configure --prefix=/data/usr
  • Then edit Makefile and add -fPIC to the end of the line that starts CC= (as per this SO answer) (-fPIC is required so xmllib2 compiles correctly)
  • make -j8
  • make install

Install stuff for GTK+ development (when you don’t have root permissions)

  • Compile Python as above
  • Install libxml2:
    • download libxml2-2.X.Y.tar.gz from
    • ./configure --prefix=/data/usr
    • make -j8
    • make install
    • cd python
    • setenv LD_LIBRARY_PATH "/data/usr/lib"
    • python build
    • python install
  • ​Make sure LD_LIBRARY_PATH is set as above
  • Follow “Installing from Source” instructions from here (install jhbuild, then install pygobject using jhbuild). Some notes on that process:
    • I added the following two lines to ~/.config/jhbuildrc:
      • prefix = "/homes/dk3810/.local/opt"
      • modulesets_dir = "/homes/dk3810/.local/modulesets"
    • I copied the *.modules files from releng to /homes/dk3810/.local/modulesets


  • add the following to ~/.bash_aliases: alias profile='python -m cProfile -s time' (from SO)


Integrating git workflow with the Python package publishing process

Notes for creating a package

Aims & Overview:

  • Upload just description of project to pypi using python register.
  • Don't upload code to pypi. Instead use download_url in to point to github. e.g.: download_url = ""
  • Use git tags to track version numbers.
  • Automatically suck these version numbers into Python's packaging system and also into the project's __version__ attribute.


Add new comment