diff --git a/diskimage_builder/lib/common-functions b/diskimage_builder/lib/common-functions
index 71c9471c5..bafbf7442 100644
--- a/diskimage_builder/lib/common-functions
+++ b/diskimage_builder/lib/common-functions
@@ -241,6 +241,14 @@ function cleanup_image_dir () {
     rm -rf --one-file-system $TMP_IMAGE_DIR
 }
 
+function cleanup_temp_python_exec () {
+    if [ ! -z "$DIB_ORIGINAL_PATH" ]; then
+        export PATH=$DIB_ORIGINAL_PATH
+    fi
+    rm "$DIB_PYTHON_EXEC_TMP/python" || true
+    rmdir "$DIB_PYTHON_EXEC_TMP" || true
+}
+
 # Run a directory of hooks outside the target (that is, no chrooting).
 function run_d() {
     check_element
diff --git a/diskimage_builder/lib/disk-image-create b/diskimage_builder/lib/disk-image-create
index a13336820..e08497e02 100644
--- a/diskimage_builder/lib/disk-image-create
+++ b/diskimage_builder/lib/disk-image-create
@@ -175,6 +175,14 @@ export DIB_DEBUG_TRACE
 export DIB_IMAGE_CACHE=${DIB_IMAGE_CACHE:-~/.cache/image-create}
 mkdir -p $DIB_IMAGE_CACHE
 
+# Setup a symbolic link to the correct python exec so that element
+# scripts running outside the chroot using "#!/usr/bin/env python" get
+# the right python version.
+export DIB_ORIGINAL_PATH=$PATH
+export DIB_PYTHON_EXEC_TMP=$(mktemp -d -t --tmpdir=$HOME .DIB_PYTHON_TMP.XXXXXXXX)
+ln -s "$DIB_PYTHON_EXEC" "$DIB_PYTHON_EXEC_TMP/python"
+export PATH=$DIB_PYTHON_EXEC_TMP:$DIB_ORIGINAL_PATH
+
 # We have a couple of critical sections (touching parts of the host
 # system or download images to common cache) that we use flock around.
 # Use this directory for lockfiles.
@@ -609,6 +617,7 @@ fi
 
 # Remove the leftovers, i.e. the temporary image directory.
 cleanup_image_dir
+cleanup_temp_python_exec
 
 # Restore fd 1&2 from the outfilter.py redirect back to the original
 # saved fd.  Note small hack that we can't really wait properly for
diff --git a/diskimage_builder/lib/img-functions b/diskimage_builder/lib/img-functions
index fa75d7c92..5ab0212d0 100644
--- a/diskimage_builder/lib/img-functions
+++ b/diskimage_builder/lib/img-functions
@@ -43,6 +43,7 @@ function cleanup () {
     dib-block-device umount
     cleanup_build_dir
     cleanup_image_dir
+    cleanup_temp_python_exec
 }
 
 # Helper function to run a command inside the chroot