Scientific Python Mode in the NMR Center

There is no longer a centrally maintained Python distribution at the Martinos Center. Each group (or user) is directed to create their own Python installion using the Anaconda installer and conda tool to install the versions of modules that work for their group.

For generic python scripts, one can try the OS installed python. Be aware the default python in CentOS7 is python2 and in CentOS8 no binary named just "python" exists -- you must explictly run python3 or python2.

If you use Python at the Center, make sure to sign up for the martinos-python mailing list to receive updates regarding the Python installation and discuss Python related issues. This list is also where requests for module installation should be made.

Resources for Learning Python

* Python Scientific Lecture Notes

* NumPy for Matlab Users

* The Boston Python User Group regularly holds meetings and organizes introductory Python classes

Installing Python for Yourself with Anaconda

Follow the direction at Installing Ananaconda. You can skip the Prerequisites part as it is done on all our systems.

Make sure NOT to install to your home directory.

Also I strongly suggest NOT having your ~/.cshrc or ~/.bashrc initialize your Anaconda install immediately on login. Instead setup a shell alias to do that on demand in each shell/Terminal when you need it. Anaconda installs in PATHs can interfer with other Linux systems program. OpenOffice is one package having anaconda in your environment is known to break.

Neuroimaging Python Modules

The following neuroimaging related modules are ones many users will want to install in their Anaconda distribution:

* mne-python for M/EEG analysis

* nibabel provides access to a large number of neuro-imaging file formats

* nitime for time-series analysis

* pydicom enables you to read, modify and write DICOM files with python code

* PySurfer for visualization and interaction with cortical surface representations of neuroimaging data from FreeSurfer (Requires using environment pysurfer in anaconda2.7)

* TensorFlow for machine learning (Requires using either the tensorflow or tensorflow-gpu environment in anaconda2.7)

Always prefer installing a module using the conda installer with a prebuilt package. If you cannot find one that then you can resort to building it with pip.

Run pip list to see a full list of modules

Anaconda is also a good way to install and run R

Anaconda Based Scientific Python Installation in /usr/pubsw

As stated above, this distribution is no longer maintained but it will not be removed. The information below is for historical purposes.

Getting Started

On CentOS 5/6/7 (64-bit) do the following to enable the Anaconda Python installation

For Python 2.7:

export PATH=/usr/pubsw/packages/python/anaconda2.7/bin:${PATH}

There are 3 sub-environments in anaconda2.7: pysurfer, tensorflow, and tensorflow-gpu

To use a sub-environment add to your PATH

For Python 3.7:

export PATH=/usr/pubsw/packages/python/anaconda3.7/bin:${PATH}

Only the CentOS7 install is actively maintained.

Run 'conda list' to see all packages installed. Email the python mailing list if you need new packages installed. You can also use the --user option to 'pip install' to install your own modules under your ~/.local directory (beware of your home dir quota)

Notes for the python maintainer (person managing anaconda, not users) on saving old environments and creating new ones are here

Installing your own packages as normal user

The following uses syntax for the bash shell. Users of the tcsh shell will have to translate 'export' to 'setenv' and so forth

Say you are using /usr/pubsw/packages/python/anaconda3.7/bin/python and have that in your path.

export PATH=/usr/pubsw/packages/python/anaconda3.7/bin:$PATH

You can use the '--user' option to pip to install packages "just for yourself". If you don't, you will get errors saying you cannot write to /usr/pubsw/packages/python/anaconda3.7. However, when you do by default pip installs packages to ~/.local/lib/python3.7 and this can get quite large and take up all your homedir quota.

You can set the following environment variables to put your personal python packages installs anywhere you want:

export PYTHONUSERBASE=/cluster/mygroup/users/raines/local
export PYTHONPATH=$PYTHONUSERBASE/lib/python3.7/site-packages

pip install --user --upgrade scipy

The --upgrade is optional and forces pip to proceed to install if the packages already exists in /usr/pubsw/packages/python/anaconda3.7 and a newer one is available.

You can put these exports in your ~/.bashrc if you want this always on.

With the above example, you can see how your local install overrides the base scipy install in /usr/pubsw/packages/python/anaconda3.7

pinto[0]:~$ pip list | grep scipy
scipy                              1.3.0
pinto[0]:~$ \rm -rf $PYTHONUSERBASE/lib/python3.7/site-packages/scipy*
pinto[0]:~$ pip list | grep scipy
scipy                              1.2.1

EPD Based Scientific Python Installation (not-maintained)

Getting Started

On CentOS 5/6 (64-bit) do the following to enable the EPD based Python installation

export PATH=/usr/pubsw/packages/python/epd/bin:${PATH}

Legacy Scientific Python Installation (not-maintained)

Scientific Python mode is now available in the following platform/os combinations in the NMR center

The "system Python" ( the Python version which already exists in the system ) is not tampered with due to the following reasons:

  1. In CentOS systems, the Python version is very old ( 2.3.4 ) which prevents installation of many new modules essential for scientific computing in Python. However, a number of other system modules and programs are dependent on this version and it's best not to disturb this version.
  2. Leopard systems have a customized Python 2.5.x, which, again is a necessity for a number of modules. Again, best not to tamper with it.
  3. Isolation: The latest Python ( 2.6.3 ) and its associated modules are installed in /usr/pubsw/packages which are isolated from the system python and its modules. This configuration enables NMR center users to basically access both the versions of the Python and since both exist independently, they don't mess with each other.

Enabling the Scientific Python mode

By default, typing "python" to invoke the Python interpreter brings up the system Python interpreter which can be verified by looking at the version.

To enable the scientific python mode, users source the scientific python mode script in the following way :

source /usr/pubsw/packages/python/2.6/scientificpython/bin/bash_activate

Note: strongly recommended. this line can/should be put as an alias in one's ~/.cshrc in the following way:

alias pyactivate="source /usr/pubsw/packages/python/2.6/scientificpython/bin/bash_activate"

Once, this is done, the user can just type pyactivate to activate the scientific python mode and type deactivate to get back to the default ( normal system python mode )

In the scientific python mode, the prompt is preceded by the text (scientificpython), which lets the user know that he/she is in the scientific python mode. The user can invoke the python interpreter by typing python and notice that the interpreter is now the latest Python's interpreter. Once the user deactivates the mode, the prompt is changed back to the default prompt.

Note: The sourcing script works under tcsh shell. Bash is currently unsupported but will be if there are enough users using bash.

List of installed modules

Note : The list of modules indicated by (c) are compiled modules and the rest were installed using easy_install script.


  1. pylab doesn't start: This might be because there might be a stray .matplotlibrc file, which is already existing in your path preventing the standard backend to load. As an example, pylab can't be imported if the backend is WXAgg for Mac platforms or TkAgg for CentOS platforms. The fix is to comment out the line starting with backend in your .matplotlibrc ( usually in ~/matplotlib/matplotlibrc )

Behind the Scenes

( For advanced users )

A program called virtualenv is made use of to isolate the Pythons. virtualenv enables one to totally switch to a different Python with its own modules ( enabled by the switch --no-site-packages). So when the user sources the tcsh_activate script, what he/she is effectively doing is to prefix the system PATH, PYTHONPATH, module PATHs with the custom Python's paths and when the user deactivates he/she gets back all the default paths. virtualenv takes care of this complex paths manipulation behind the scenes. It also makes the modules installation a breeze for the administrator.