diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
index 2ce4bdcc6c8c43802ee4875cb7c2524bb5fc1e0f..9b263d20c36db1442a6fdef6cfa748a2a4663a28 100644
--- a/python/CMakeLists.txt
+++ b/python/CMakeLists.txt
@@ -3,10 +3,11 @@ set(CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
 set(CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
 
 configure_file(setup.py.in setup.py)
+configure_file(pyproject.toml pyproject.toml COPYONLY)
 
 add_custom_target(python ALL
     COMMAND python3 setup.py build
-    DEPENDS opendht opendht_cpp.pxd opendht.pyx)
+    DEPENDS opendht opendht_cpp.pxd opendht.pyx pyproject.toml)
 
 install(CODE "execute_process(COMMAND python3 setup.py install --root=\$ENV{DESTDIR}/ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})")
 if (OPENDHT_TOOLS)
diff --git a/python/Makefile.am b/python/Makefile.am
index 7f2566202bedcf715eaab5ea024719669a3e1fe4..98aeed4160a9d3e6a0205df5dd839eb2113f95f6 100644
--- a/python/Makefile.am
+++ b/python/Makefile.am
@@ -2,7 +2,8 @@ if USE_CYTHON
 
 noinst_HEADERS = \
 	opendht.pyx \
-	opendht_cpp.pxd
+	opendht_cpp.pxd \
+	pyproject.toml
 
 PYTHON_INSTALL_RECORD = $(builddir)/install_record.txt
 
diff --git a/python/pyproject.toml b/python/pyproject.toml
new file mode 100644
index 0000000000000000000000000000000000000000..2bf5ec8096be861930092d5f2f0188c6663e2913
--- /dev/null
+++ b/python/pyproject.toml
@@ -0,0 +1,3 @@
+[build-system]
+requires = ["setuptools", "wheel", "Cython"]
+build-backend = "setuptools.build_meta"