Gregor Hoffleit writes:

But IMHO, this problem really reveals an annoyance in Python's
makesetup. makesetup puts the global include directories "$(INCLUDEPY)
$(EXECINCLUDEPY)" in front of the directories defined by the module in
Setup. Therefore global (potentially older) header files are preferred
over the ones set by the module, which makes it hard to compile new
versions of modules when the old versions are installed. AFAIK, the
other way around is common practice for most other software.

This patch to makesetup would be an potential fix for this problem,
though I don't know if it breaks anything else.
diff --git a/Modules/makesetup b/Modules/makesetup
index 8ce1e88..0fefcff 100755
--- a/Modules/makesetup
+++ b/Modules/makesetup
@@ -185,7 +185,7 @@
 			case $doconfig in
 			no)	cc="$cc \$(CCSHARED)";;
 			esac
-			rule="$obj: $src; $cc \$(CFLAGS) $cpps -c $src"
+			rule="$obj: $src; $cc $cpps \$(CFLAGS) -c $src"
 			echo "$rule" >>$rulesf
 		done
 		case $doconfig in