WrappersCompilation: Difference between revisions

From Openrtk
Jump to navigation Jump to search
(Initial draft of the tutorial)
 
(Better sectioning)
Line 30: Line 30:
* Adapt the paths to ITK and RTK according to your own set up (lines marked with <code># &lt;---</code>).
* Adapt the paths to ITK and RTK according to your own set up (lines marked with <code># &lt;---</code>).


''Note that this script requires additional adaptations in order to function properly on Macs.'' The compilation should take about 1 hour or so. Upon completion, let's add the newly compiled wrappers to Python's path. Open up the <code>site-packages</code> directory of your Python installation. For instance,
''Note that this script requires additional adaptations in order to function properly on Macs.'' The compilation should take about 1 hour or so. Upon completion, let's set the compiled code for Python.
 
= Set up the compiled wrappers =
 
After compilation, one must add the new wrappers to Python's path. Open up the <code>site-packages</code> directory of your Python installation. For instance,


<source lang="bash">cd ~/miniconda3/lib/python3.7/site-packages/</source>
<source lang="bash">cd ~/miniconda3/lib/python3.7/site-packages/</source>

Revision as of 11:54, 4 December 2018

Compiling RTK Python wrappers

This little guide will show you how to compile and set up ITK and RTK wrappers on your system. First thing first, copy, paste and adapt the following Bash script to your ITK directory:

set -e
set -x

SRCBUILDDIR=lin64
CUDA=ON
NTHREADS=12 # Number of cores on your computer

SCRIPT_PATH=$(realpath $(dirname $0))
BUILD_DIR=$SCRIPT_PATH/${SRCBUILDDIR}-PythonWrapping
INSTALL_PATH=${BUILD_DIR}-install

# ITK
mkdir -p $BUILD_DIR 
cd $BUILD_DIR 
cmake $SCRIPT_PATH/src -DITK_LEGACY_SILENT=ON -DBUILD_EXAMPLES=OFF -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTING=OFF -DITK_WRAP_PYTHON=ON -DCMAKE_INSTALL_PREFIX=$INSTALL_PATH # <---
make -j${NTHREADS} install

# RTK
mkdir -p $SCRIPT_PATH/../../RTK/${SRCBUILDDIR}-PythonWrapping # <---
cd $SCRIPT_PATH/../../RTK/${SRCBUILDDIR}-PythonWrapping # <---
cmake ../RTK -DITK_DIR=$BUILD_DIR -DBUILD_SHARED_LIBS=OFF -DRTK_BUILD_APPLICATIONS=OFF -DBUILD_TESTING=OFF -DCMAKE_INSTALL_PREFIX=$INSTALL_PATH -DRTK_USE_CUDA=${CUDA} ${CMAKE_OPTIONS} # <---
make -j${NTHREADS} install

Stuff to take care of:

  • Set an appropriate number of threads in order to speed things up (set it up equal to the number of CPU cores your machine has);
  • Add optirun if you need it;
  • Adapt the paths to ITK and RTK according to your own set up (lines marked with # <---).

Note that this script requires additional adaptations in order to function properly on Macs. The compilation should take about 1 hour or so. Upon completion, let's set the compiled code for Python.

Set up the compiled wrappers

After compilation, one must add the new wrappers to Python's path. Open up the site-packages directory of your Python installation. For instance,

cd ~/miniconda3/lib/python3.7/site-packages/

First, uninstall any ITK or RTK wrappers you might already have installed, if you have any. You can either use pip-autoremove (pip install pip-autoremove) or juste delete everything ITK or RTK related.

Now, create a file named WrapITK.pth and write in it the full path to the site-package's folder of your compiled Python wrappers. Do not use relative paths (for example using ~), use system's absolute path. For instance,

/export/home/acoussat/Software/RTK/ITK/lin64-PythonWrapping-install/lib/python3.7/site-packages

That should do the trick. Now, let's check that everything works. Open up a Python interactive console, for instance using IPython:

ipython

and run the two following commands:

import itk
from itk import RTK

They should complete without errors. You can now use ITK and RTK through Python.

If you do have errors...

...well, happy debugging! ITK can sometimes appear as not found if you're using some special kind of Python console (for instance, Spyder's console). The first thing to check is whether Python's path contains the correct path to your ITK and RTK compiled wrappers. In order to check it, you can simply print Python's path:

import sys
sys.path

If the required path is contained in the list, well, you're out of luck. Check that ITK and RTK compilation correctly finishes, and I wish you the best of luck. If it is not, try adding it manually:

sys.path.append("path/to/your/compilation/site-packages") # for instance, /export/home/acoussat/Software/RTK/ITK/lin64-PythonWrapping-install/lib/python3.7/site-packages

Now, try again importing ITK and RTK:

import itk
from itk import RTK

If it now works, your Python's path is not correctly configured: check that your .pth has been correctly created. However, if it does not work, it might be because you're not running the Python version in which you set up your wrappers. It can occur if, for instance, you have both a system-wide and a miniconda Python installed. Therefore, check up that the Python which is called when you run python in a terminal actually runs the Python for which you set up the wrappers (in which you created the file WrapITK.pth).