diff --git a/CHANGELOG.md b/CHANGELOG.md
index a913617e8ed84b4eb61fafd6f823f2425f2e88bd..9f8dad4d781657f63a7d919afc756df7d2b25491 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,7 @@ Differences Between DuMu<sup>x</sup> 3.3 and DuMu<sup>x</sup> 3.2
 ### Improvements and Enhancements
 
 - __Dune version__: DuMu<sup>x</sup> now requires Dune >=2.7
+- The DuMu<sup>x</sup> install script has been translated to Python to improve portability. The old shell script will be removed after release 3.3.
 
 ### Immediate interface changes not allowing/requiring a deprecation period:
 
diff --git a/bin/installdumux.py b/bin/installdumux.py
new file mode 100755
index 0000000000000000000000000000000000000000..deaff81b220fb42cf7d0e60a3f27b6f52469862b
--- /dev/null
+++ b/bin/installdumux.py
@@ -0,0 +1,133 @@
+#!/usr/bin/env python3
+
+"""
+One click install script for dumux
+"""
+import os
+import sys
+import subprocess
+from distutils.spawn import find_executable
+from pkg_resources import parse_version
+
+def show_message(message):
+    print("*" * 120)
+    print(message)
+    print("*" * 120)
+
+
+def check_cpp_version():
+    requiredversion = "7"
+    result = subprocess.check_output(["g++", "-dumpversion"]).decode().strip()
+    if parse_version(result) < parse_version(requiredversion):
+        print("-- An error occured while checking for prerequistes.")
+        raise Exception("g++ greater than or equal to {} is required for dumux releases >=3.2!".format(requiredversion))
+
+
+def run_command(command):
+    with open("../installdumux.log", "a") as log:
+        popen = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
+        for line in popen.stdout:
+            log.write(line)
+            print(line, end='')
+        for line in popen.stderr:
+            log.write(line)
+            print(line, end='')
+        popen.stdout.close()
+        popen.stderr.close()
+        return_code = popen.wait()
+        if return_code:
+            print("\n")
+            message = "\n    (Error) The command {} returned with non-zero exit code\n".format(command)
+            message += "\n    If you can't fix the problem yourself consider reporting your issue\n"
+            message += "    on the mailing list (dumux@listserv.uni-stuttgart.de) and attach the file 'installdumux.log'\n"
+            show_message(message)
+            sys.exit(1)
+
+
+def git_clone(url, branch=None):
+    clone = ["git", "clone"]
+    if branch:
+        clone += ["-b", branch]
+    result = run_command(command=[*clone, url])
+
+
+# clear the log file
+open('installdumux.log', 'w').close()
+
+#################################################################
+#################################################################
+## (1/3) Check some prerequistes
+#################################################################
+#################################################################
+programs = ['wget', 'git', 'gcc', 'g++', 'cmake', 'pkg-config']
+show_message("(1/3) Checking all prerequistes: " + " ".join(programs) + "...")
+
+# check some prerequistes
+for program in programs:
+    if find_executable(program) is None:
+        print("-- An error occured while checking for prerequistes.")
+        raise Exception("Program {} has not been found.".format(program))
+
+if find_executable('paraview') is None:
+    print("-- Warning: paraview seems to be missing. You may not be able to view simulation results!")
+
+check_cpp_version()
+
+show_message("(1/3) Step completed. All prerequistes found.")
+
+#################################################################
+#################################################################
+## (2/3) Clone modules
+#################################################################
+#################################################################
+# make a new folder containing everything
+os.makedirs("./DUMUX", exist_ok=True)
+os.chdir("DUMUX")
+
+show_message("(2/3) Cloning repositories. This may take a while. Make sure to be connected to the internet...")
+
+dune_version=2.7
+dumux_version=3.2
+# the core modules
+for module in ['common', 'geometry', 'grid', 'localfunctions', 'istl']:
+    if not os.path.exists("dune-{}".format(module)):
+        git_clone('https://gitlab.dune-project.org/core/dune-{}.git'.format(module), "releases/{}".format(dune_version))
+    else:
+        print("-- Skip cloning dune-{} because the folder already exists.".format(module))
+
+# dumux
+if not os.path.exists("dumux"):
+    git_clone('https://git.iws.uni-stuttgart.de/dumux-repositories/dumux.git', "releases/{}".format(dumux_version))
+else:
+    print("-- Skip cloning dumux because the folder already exists.")
+
+
+show_message("(2/3) Step completed. All repositories have been cloned into a containing folder.")
+
+#################################################################
+#################################################################
+## (3/3) Configure and build
+#################################################################
+#################################################################
+show_message("(3/3) Configure and build dune modules and dumux using dunecontrol. This may take several minutes...")
+
+# run dunecontrol
+if not os.path.isfile("cmake.opts"):
+    subprocess.run(["wget","https://git.iws.uni-stuttgart.de/dumux-repositories/dumux/-/raw/releases/3.2/cmake.opts"])
+else:
+    print("-- The file cmake.opts already exists. The existing file will be used to configure dumux.")
+
+run_command(command=["./dune-common/bin/dunecontrol", "--opts=cmake.opts", "all"])
+
+show_message("(3/3) Step completed. Succesfully configured and built dune and dumux.")
+
+#################################################################
+#################################################################
+## Show message how to check that everything works
+#################################################################
+#################################################################
+show_message("(Installation complete) To test if everything works, please run the following commands (can be copied to command line):\n\n"
+             "  cd DUMUX/dumux/build-cmake/test/porousmediumflow/1p/implicit/isothermal\n"
+             "  make test_1p_tpfa\n"
+             "  ./test_1p_tpfa\n"
+             "  paraview *pvd\n")