diff --git a/lang/python/python-package-install.sh b/lang/python/python-package-install.sh
index ae6f2ef77..30373751c 100644
--- a/lang/python/python-package-install.sh
+++ b/lang/python/python-package-install.sh
@@ -40,6 +40,17 @@ process_filespec() {
 	)
 }
 
+delete_empty_dirs() {
+	local dst_dir="$1"
+	if [ -d "$dst_dir/usr" ] ; then
+		for _ in $(seq 1 10) ; do
+			find "$dst_dir/usr" -empty -type d -exec rmdir {} \; || continue
+			break
+		done
+		rmdir "$dst_dir/usr" || true
+	fi
+}
+
 ver="$1"
 src_dir="$2"
 dst_dir="$3"
@@ -47,7 +58,7 @@ python="$4"
 mode="$5"
 filespec="$6"
 
-find "$src_dir" -name "*\.exe" | xargs rm -f
+find "$src_dir" -name "*\.exe" -exec rm -f {} \;
 
 process_filespec "$src_dir" "$dst_dir" "$filespec" || {
 	echo "process filespec error-ed"
@@ -56,13 +67,9 @@ process_filespec "$src_dir" "$dst_dir" "$filespec" || {
 
 if [ "$mode" == "sources" ] ; then
 	# Copy only python source files
-	find $dst_dir -not -type d -not -name "*\.py" | xargs rm -f
+	find "$dst_dir" -not -type d -not -name "*\.py" -exec rm -f {} \;
 
-	# Delete empty folders (if the case)
-	if [ -d "$dst_dir/usr" ] ; then
-		find $dst_dir/usr -type d | xargs rmdir --ignore-fail-on-non-empty
-		rmdir --ignore-fail-on-non-empty $dst_dir/usr
-	fi
+	delete_empty_dirs "$dst_dir"
 	exit 0
 fi
 
@@ -75,19 +82,15 @@ legacy=
 #       So, we just stuck to un-optimized byte-codes,
 #       which is still way better/faster than running
 #       Python sources all the time.
-$python -m compileall $legacy -d '/' $dst_dir || {
+$python -m compileall $legacy -d '/' "$dst_dir" || {
 	echo "python -m compileall err-ed"
 	exit 1
 }
 
 # Delete source files and pyc [ un-optimized bytecode files ]
 # We may want to make this optimization thing configurable later, but not sure atm
-find $dst_dir -type f -name "*\.py" | xargs rm -f
+find "$dst_dir" -type f -name "*\.py" -exec rm -f {} \;
 
-# Delete empty folders (if the case)
-if [ -d "$dst_dir/usr" ] ; then
-	find $dst_dir/usr -type d | xargs rmdir --ignore-fail-on-non-empty
-	rmdir --ignore-fail-on-non-empty $dst_dir/usr
-fi
+delete_empty_dirs "$dst_dir"
 
 exit 0
diff --git a/lang/python/python3/files/python3-package-pip.mk b/lang/python/python3/files/python3-package-pip.mk
index 1aaeaf2ee..8e209e139 100644
--- a/lang/python/python3/files/python3-package-pip.mk
+++ b/lang/python/python3/files/python3-package-pip.mk
@@ -21,7 +21,10 @@ define Package/python3-pip/install
 		$(PKG_BUILD_DIR)/install-pip/lib/python$(PYTHON3_VERSION)/site-packages/pip \
 		$(PKG_BUILD_DIR)/install-pip/lib/python$(PYTHON3_VERSION)/site-packages/pip-$(PYTHON3_PIP_VERSION).dist-info \
 		$(1)/usr/lib/python$(PYTHON3_VERSION)/site-packages/
-	find $(1)/usr/lib/python$(PYTHON3_VERSION)/site-packages/ -name __pycache__ | xargs rm -rf
+	for _ in \$(seq 1 10) ; do \
+		find $(1)/usr/lib/python$(PYTHON3_VERSION)/site-packages/ -name __pycache__ -exec rm -rf {} \; || continue ; \
+		break ; \
+	done
 endef
 
 $(eval $(call Py3BasePackage,python3-pip, \
diff --git a/lang/python/python3/files/python3-package-setuptools.mk b/lang/python/python3/files/python3-package-setuptools.mk
index c8415cbd9..472f5a620 100644
--- a/lang/python/python3/files/python3-package-setuptools.mk
+++ b/lang/python/python3/files/python3-package-setuptools.mk
@@ -24,7 +24,10 @@ define Py3Package/python3-setuptools/install
 		$(PKG_BUILD_DIR)/install-setuptools/lib/python$(PYTHON3_VERSION)/site-packages/setuptools-$(PYTHON3_SETUPTOOLS_VERSION).dist-info \
 		$(PKG_BUILD_DIR)/install-setuptools/lib/python$(PYTHON3_VERSION)/site-packages/easy_install.py \
 		$(1)/usr/lib/python$(PYTHON3_VERSION)/site-packages
-	find $(1)/usr/lib/python$(PYTHON3_VERSION)/site-packages/ -name __pycache__ | xargs rm -rf
+	for _ in \$(seq 1 10) ; do \
+		find $(1)/usr/lib/python$(PYTHON3_VERSION)/site-packages/ -name __pycache__ -exec rm -rf {} \; || continue ; \
+		break ; \
+	done
 endef
 
 $(eval $(call Py3BasePackage,python3-setuptools, \