The easiest way of using PyMesh is through docker, where one can simply pull a prebuild image of PyMesh from dockerhub:

$ docker run -it pymesh/pymesh
Python 3.6.4 (default, Dec 21 2017, 01:35:12)
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymesh

Download the Source

The source code can be checked out from GitHub:

git clone
cd PyMesh
git submodule update --init
export PYMESH_PATH=`pwd`

The rest of the document assumes PyMesh is located at $PYMESH_PATH.


PyMesh is based on the design philosophy that one should not reinvent the wheel. It depends a number of state-of-the-art open source libraries:

System dependencies

  • Python: v2.7 or higher
  • NumPy: v1.8 or higher
  • SciPy: v0.13 or higher
  • Eigen: v3.2 or higher
  • TBB: 2018 Update 1 or later
  • GMP: v6.1 or higher
  • MPFR: v4.0 or higher
  • Boost: 1.6 or higher (thread, system)

On Linux, the system dependencies can be installed with apt-get:

apt-get install \
    libeigen3-dev \
    libgmp-dev \
    libgmpxx4ldbl \
    libmpfr-dev \
    libboost-dev \
    libboost-thread-dev \
    libtbb-dev \

On MacOS, the system dependencies can be installed with MacPorts:

port install
    python36 \
    eigen3 \
    gmp \
    mpfr \
    tbb \

Python dependencies such as NumPy and SciPy can be installed using pip:

pip install -r $PYMESH_PATH/python/requirements.txt

Third party dependencies

The following third-party libraries are not required, but highly recommended in order to use the full power of Pymesh. PyMesh provides a thin wrapper to these libraries, and without them certain functionalities would be disabled. Most of these packages can be easily installed using package management software for your OS. A copy of these libraries are also included in the third_party directory.

  • SparseHash: is used to speed up hash grid.
  • CGAL: is needed for self-intersection, convex hull, outer hull and boolean computations.
  • tetgen: is needed by tetrahedronization and wire inflation.
  • libigl: is needed by outer hull, boolean computations and wire inflation.
  • cork: is used by boolean computation.
  • triangle: is used by triangulation and 2D wire inflation.
  • qhull: is used for computing convex hull.
  • Clipper: is used for 2D boolean operations.
  • Carve: is used for 3D boolean operations. Minor modification is added by me for linux/mac compilation.
  • GeoGram: is used as a 2D triangle and 3D tetrahedron generation engine.
  • Quartet: is used as a 3D tetrahedralization engine.
  • MMG3D: is used as a 3D tetrahedralizaiton optimization engine.

All third party libraries are attached to the repo as submodules. They are built as part of PyMesh automatically. See Building PyMesh section for more instructions.

Environment Variables

If any dependent libraries are not installed in the default locations, e.g. /usr/local and opt/local, one needs to set certain environment variables that help PyMesh locate the libraries. PyMesh check the following environment variables:

  • EIGEN_INC: directory containing the Eigen library.
  • GOOGLEHASH_INCLUDES: directory containing sparse hash.
  • CGAL_PATH: path to CGAL library.
  • BOOST_INC: directory containing boost.
  • LIBIGL_PATH: path to libigl.
  • CORK_PATH: path to cork.
  • TETGEN_PATH: path to tetgen.
  • TRIANGLE_PATH: path to triangle.
  • QHULL_PATH: path to qhull.
  • CLIPPER_PATH: path to clipper.
  • CARVE_PATH: path to carve.
  • GEOGRAM_PATH: path to GeoGram.
  • QUARTET_PATH: path to Quartet.

Building PyMesh

Build with Setuptools

Setuptools builds both the main PyMesh module as well as all third party dependencies. To build PyMesh:

./ build

Build with CMake

If you are familiar with C++ and CMake, there is an alternative way of building PyMesh. First compile and install all of the third party dependencies:

cd $PYMESH_PATH/third_party
mkdir build
cd build
cmake ..
make install

Third party dependencies will be installed in $PYMESH_PATH/python/pymesh/third_party directory.

It is recommended to build out of source, use the following commands setup building environment:

mkdir build
cd build
cmake ..

PyMesh consists of several modules. To build all modules and their corresponding unit tests:

make tests

PyMesh libraries are all located in $PYMESH_PATH/python/pymesh/lib directory.

Install PyMesh

To install PyMesh in your system:

./ install  # May require root privilege

Alternatively, one can install PyMesh locally:

./ install --user

Post-installation check

To check PyMesh is installed correctly, one can run the unit tests:

python -c "import pymesh; pymesh.test()"

Please make sure all unit tests are passed, and report any unit test failures.