diff --git a/docker/manylinux2014/build/install_boost.sh b/docker/manylinux2014/build/install_boost.sh
index b31946270c602bb94f1dfa45c6ad75e381f33613..107681bf38ac0505475520b367a9d30f6604d7f3 100755
--- a/docker/manylinux2014/build/install_boost.sh
+++ b/docker/manylinux2014/build/install_boost.sh
@@ -6,5 +6,5 @@ tar --bzip2 -xf boost_1_74_0.tar.bz2
 cd boost_1_74_0
 ./bootstrap.sh --prefix=/usr/local
 cp ../project-config.jam .
-./b2 install link=shared python=2.7,3.5,3.6,3.7,3.8 -j"$(nproc)"
+./b2 install link=shared python=2.7,3.5,3.6,3.7,3.8,3.9 -j"$(nproc)"
 rm -rf /build
diff --git a/docker/manylinux2014/build/project-config.jam b/docker/manylinux2014/build/project-config.jam
index 29e71cb1cf0585a68099d47b79ae5e40ead5bb66..ff9e0bbb5063e6175ab01854193d4535f34ffa65 100644
--- a/docker/manylinux2014/build/project-config.jam
+++ b/docker/manylinux2014/build/project-config.jam
@@ -23,6 +23,7 @@ if ! [ python.configured ]
     using python : 3.6 : /opt/python/cp36-cp36m/bin/python : /opt/python/cp36-cp36m/include/python3.6m : /opt/python/cp36-cp36m/lib ;
     using python : 3.7 : /opt/python/cp37-cp37m/bin/python : /opt/python/cp37-cp37m/include/python3.7m : /opt/python/cp37-cp37m/lib ;
     using python : 3.8 : /opt/python/cp38-cp38/bin/python : /opt/python/cp38-cp38/include/python3.8 : /opt/python/cp38-cp38/lib ;
+    using python : 3.9 : /opt/python/cp39-cp39/bin/python : /opt/python/cp39-cp39/include/python3.9 : /opt/python/cp39-cp39/lib ;
 }
 
 # List of --with-<library> and --without-<library>
@@ -39,4 +40,4 @@ option.set libdir : /usr/local/lib ;
 option.set includedir : /usr/local/include ;
 
 # Stop on first error
-option.set keep-going : false ;
\ No newline at end of file
+option.set keep-going : false ;
diff --git a/docker/manylinux2014/build/setup_python.sh b/docker/manylinux2014/build/setup_python.sh
index e53e187a3c7f9027813bd50b0e14f8d607272915..f0e48959715867986fb166d8f11b362e329d241f 100755
--- a/docker/manylinux2014/build/setup_python.sh
+++ b/docker/manylinux2014/build/setup_python.sh
@@ -1,14 +1,11 @@
 #!/bin/bash -eux
 
-# Don't build wheels for python 3.9
-rm -rf /opt/python/cp39-cp39
-
 # Install cmake, ninja and wheel
-PY38_BIN=/opt/python/cp38-cp38/bin
-$PY38_BIN/pip install cmake ninja wheel
-ln -s $PY38_BIN/cmake /usr/bin/
-ln -s $PY38_BIN/ninja /usr/bin/
-ln -s $PY38_BIN/wheel /usr/bin/
+PY39_BIN=/opt/python/cp39-cp39/bin
+$PY39_BIN/pip install cmake ninja wheel
+ln -s $PY39_BIN/cmake /usr/bin/
+ln -s $PY39_BIN/ninja /usr/bin/
+ln -s $PY39_BIN/wheel /usr/bin/
 
 # Setup python 2.7
 yum -y install python-pip
diff --git a/docker/manylinux2014/test.Dockerfile b/docker/manylinux2014/test.Dockerfile
index 28a4fd62c502434038c4ed116f40b2658b34f5a9..6e68bd0ea461ebd7b849423026db90602e947141 100644
--- a/docker/manylinux2014/test.Dockerfile
+++ b/docker/manylinux2014/test.Dockerfile
@@ -1,5 +1,5 @@
 ARG PYVER=3.7
-FROM python:3.7
+FROM python:$PYVER
 
 RUN apt-get update -qqy && apt-get install -qqy libgl1 && rm -rf /var/lib/apt/lists/*