diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2e63e1af20b652e10e78498be7b8404ae36acb43..10d2d913125e1d194b7bab4ade5142090296a63f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,6 +15,12 @@
   Furthermore, flags for either shared library or position independent code
   needs to be used.
 
+- Support for distributing DUNE modules as python packages has been added.
+  Package meta data is parsed in `packagemetadata.py` from the dune.module file.
+  A script `/bin/dunepackaging.py` was added to generate package files
+  (`setup.py`, `pyproject.toml`) that can also be used to upload packages to
+  the Python Package Index.
+
 - Eigenvectors of symmetric 2x2 `FieldMatrix`es are now computed correctly
   even when they have zero eigenvalues.
 
diff --git a/bin/duneactivate b/bin/duneactivate
index 4c4e1506d42c12359e5711777e07453a5de1e100..0191c172dfcdd118d0a786f5ce74dac786283d2d 100644
--- a/bin/duneactivate
+++ b/bin/duneactivate
@@ -1,3 +1,25 @@
 envpath=`dirname "${BASH_SOURCE[0]}"`
 source $envpath/activate
-export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$VIRTUAL_ENV/lib
+
+_OLD_LD_LIBRARY_PATH="$LD_LIBRARY_PATH"
+LD_LIBRARY_PATH="$VIRTUAL_ENV/lib:$LD_LIBRARY_PATH"
+export LD_LIBRARY_PATH
+
+save_function() {
+    local ORIG_FUNC=$(declare -f $1)
+    local NEWNAME_FUNC="$2${ORIG_FUNC#$1}"
+    eval "$NEWNAME_FUNC"
+}
+
+save_function deactivate old_deactivate
+
+deactivate () {
+  if [ -n "${_OLD_LD_LIBRARY_PATH:-}" ] ; then
+      LD_LIBRARY_PATH="${_OLD_LD_LIBRARY_PATH:-}"
+      export LD_LIBRARY_PATH
+      unset _OLD_LD_LIBRARY_PATH
+  fi
+
+  old_deactivate
+  unset -f old_deactivate
+}
diff --git a/cmake/modules/DuneAddPybind11Module.cmake b/cmake/modules/DuneAddPybind11Module.cmake
index a5ef80fa7be2f986b89466dad1b0eb24935b5b75..916f3a80766255f0ce7be523cb6e680811bfb2d4 100644
--- a/cmake/modules/DuneAddPybind11Module.cmake
+++ b/cmake/modules/DuneAddPybind11Module.cmake
@@ -79,7 +79,7 @@ function(dune_add_pybind11_module)
   # https://pybind11.readthedocs.io/en/stable/compiling.html#building-manually
   if (APPLE)
     set_target_properties(${PYBIND11_MODULE_NAME} PROPERTIES SUFFIX ".so")
-    target_link_options(${PYBIND11_MODULE_NAME} PRIVATE "-undefined dynamic_lookup")
+    target_link_options(${PYBIND11_MODULE_NAME} PRIVATE -undefined dynamic_lookup)
   endif()
 
   target_compile_definitions(${PYBIND11_MODULE_NAME} PRIVATE ${PYBIND11_MODULE_COMPILE_DEFINITIONS})