Skip to content

Setup python 3 (including mpi4py) without admin rights

giadarol edited this page Nov 28, 2019 · 33 revisions

The following guide shows how to get a complete python installation without administrator rights:

Step 1: We move to the folder where we want to place our installation:

/afs/cern.ch/work/g/giadarol/sim_workspace_mpi_py3

Step 2: We download, compile and install the latest version of python 3 from the python website:

mkdir python_src
cd python_src
wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tar.xz
tar xvf Python-3.8.0.tar.xz
cd Python-3.8.0
./configure --prefix=/afs/cern.ch/work/g/giadarol/sim_workspace_mpi_py3/python3
make
make install

Possible issues with ssl: In order to be able to use pip at a later stage, python needs to be compiled with ssl support. Please check that this is the case:

/afs/cern.ch/work/g/giadarol/sim_workspace_mpi_py3/python3/bin/python3
import ssl

In case this gives an exception, please install ssl library and recompile python (in Ubuntu this can be done by sudo apt install libssl-dev).

Possible issues with sqlite3: In order to be able to use jupyter notebooks at a later stage, python needs to be compiled with sqlite3 support. Please check that this is the case:

/afs/cern.ch/work/g/giadarol/sim_workspace_mpi_py3/python3/bin/python3
import sqlite3

In case this gives an exception, please install sqlite library and recompile python (in Ubuntu this can be done by sudo apt install libsqlite3-dev).

Possible issues with tk: In order to be able to use ipython --pylab at a later stage, python needs to be compiled with tk support. Please check that this is the case:

/afs/cern.ch/work/g/giadarol/sim_workspace_mpi_p3/python3/bin/python3
import _tkinter

In case this gives an exception, please install tk library and recompile python (in Ubuntu this can be done by sudo apt install tklib; sudo apt install tk-dev ).

Step 4: We create our virtual environment

cd /afs/cern.ch/work/g/giadarol/sim_workspace_mpi_py3
mkdir venvs
cd venvs
/afs/cern.ch/work/g/giadarol/sim_workspace_mpi_py3/python3/bin/python3 -m venv py3

Step 5: We activate our brand new virtual environment

source /afs/cern.ch/work/g/giadarol/sim_workspace_mpi_py3/venvs/py3/bin/activate

If we type:

which python

we get:

/afs/cern.ch/work/g/giadarol/sim_workspace_mpi_py3/venvs/py3/bin/python

Step 6: We use pip to install the python modules that we need

 pip install numpy scipy cython h5py ipython matplotlib

Step 7 (optional): Installing mpi4py

We do not have an MPI installation we need to get one (for CERN users: skip this for CNAF cluster):

 cd /afs/cern.ch/work/g/giadarol/sim_workspace_mpi/python_src
 wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.2.tar.bz2
 tar jxf openmpi-1.10.2.tar.bz2
 cd openmpi-1.10.2
./configure --prefix=/afs/cern.ch/work/g/giadarol/sim_workspace_mpi/openmpi
 make all install

We set the environment variable for the MPI compiler:

export MPICC=/afs/cern.ch/work/g/giadarol/sim_workspace_mpi/openmpi/bin/mpicc

At this point be careful not to have other MPI paths in your environment (for example set in your .bashrc)

pip will use the compiler pointed by your MPICC variable to compile mpi4py:

pip install mpi4py

Important: Python jobs using mpi4py must be run with the mpiexec corresponding to the MPI compiler that has been used. In our case:

/afs/cern.ch/work/g/giadarol/sim_workspace_mpi/openmpi/bin/mpiexec

Of course we can add the folder to our PATH or create a shortcut.

Step 8: Install h5py: If you don't need parallel hdf5 I/O you can just:

pip install h5py

Instead in case you need parallel hdf5 I/O and you want to compile your own hdf5 library:

wget https://support.hdfgroup.org/ftp/HDF5/current/src/hdf5-1.10.5.tar.bz2
tar jxf hdf5-1.10.5.tar.bz2
cd hdf5-1.10.5/
./configure --prefix=/afs/cern.ch/work/g/giadarol/sim_workspace_mpi/hdf5lib --enable-parallel --enable-shared
make
make install
CC=/usr/bin/mpicc HDF5_MPI="ON" HDF5_DIR=/afs/cern.ch/work/g/giadarol/sim_workspace_mpi/hdf5lib pip install --no-binary=h5py h5py

Step 9: At this point we are able to download and install the PyECLOUD-PyHEADTAIL environment:

git clone https://github.com/PyCOMPLETE/PyECLOUD  
git clone https://github.com/PyCOMPLETE/PyKLU  
git clone https://github.com/PyCOMPLETE/PyHEADTAIL  
git clone https://github.com/PyCOMPLETE/PyPIC  
git clone https://github.com/PyCOMPLETE/NAFFlib
git clone https://github.com/PyCOMPLETE/PyPARIS  

cd PyPIC
make

cd ../PyHEADTAIL
make
cd ..
mv PyHEADTAIL PyHEADTAIL_inst
mv PyHEADTAIL_inst/PyHEADTAIL .

cd PyECLOUD
./setup_pyecloud

cd ../PyKLU
./install

cd ../NAFFlib/NAFFlib
make py2
cd ../..
mv NAFFlib NAFFlib_inst
mv NAFFlib_inst/NAFFlib .

A couple of references that helped with this task:

[1] https://www.open-mpi.org/faq/?category=building#easy-build

[2] http://stackoverflow.com/questions/5506110/is-it-possible-to-install-another-version-of-python-to-virtualenv