This modified version of a patch by Thomas Heller allows __import__
hooks to take over the Python import machinery at a very early stage
in the Python startup phase.

If there are still places in the Python interpreter which need to
bypass the __import__ hook, these places must now use
PyImport_ImportModuleEx() instead. So far no other places than in
the import mechanism itself have been identified.
diff --git a/Python/import.c b/Python/import.c
index 391658e..71af3bd 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -1458,13 +1458,13 @@
 PyObject *
 PyImport_ImportModule(char *name)
 {
-	static PyObject *fromlist = NULL;
-	if (fromlist == NULL && strchr(name, '.') != NULL) {
-		fromlist = Py_BuildValue("(s)", "*");
-		if (fromlist == NULL)
-			return NULL;
-	}
-	return PyImport_ImportModuleEx(name, NULL, NULL, fromlist);
+	PyObject *pname;
+	PyObject *result;
+
+	pname = PyString_FromString(name);
+	result = PyImport_Import(pname);
+	Py_DECREF(pname);
+	return result;
 }
 
 /* Forward declarations for helper routines */
@@ -1906,7 +1906,8 @@
 
 		if (standard_builtins == NULL) {
 			standard_builtins =
-				PyImport_ImportModule("__builtin__");
+				PyImport_ImportModuleEx("__builtin__",
+							NULL, NULL, NULL);
 			if (standard_builtins == NULL)
 				return NULL;
 		}