Fix issue 3221 by emitting a RuntimeWarning instead of raising SystemError when the parent module can't be found during an absolute import (likely due to non-PEP 361 aware code which sets a module level __package__ attribute)
diff --git a/Python/import.c b/Python/import.c
index b65ed0e..f0ee40a 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -2160,6 +2160,7 @@
 	static PyObject *pathstr = NULL;
 	static PyObject *pkgstr = NULL;
 	PyObject *pkgname, *modname, *modpath, *modules, *parent;
+	int orig_level = level;
 
 	if (globals == NULL || !PyDict_Check(globals) || !level)
 		return Py_None;
@@ -2285,9 +2286,27 @@
 
 	modules = PyImport_GetModuleDict();
 	parent = PyDict_GetItemString(modules, buf);
-	if (parent == NULL)
-		PyErr_Format(PyExc_SystemError,
-				"Parent module '%.200s' not loaded", buf);
+	if (parent == NULL) {
+		if (orig_level < 1) {
+			PyObject *err_msg = PyString_FromFormat(
+				"Parent module '%.200s' not found "
+				"while handling absolute import", buf);
+			if (err_msg == NULL) {
+				return NULL;
+			}
+			if (!PyErr_WarnEx(PyExc_RuntimeWarning,
+					PyString_AsString(err_msg), 1)) {
+				*buf = '\0';
+				*p_buflen = 0;
+				parent = Py_None;
+			}
+			Py_DECREF(err_msg);
+		} else {
+			PyErr_Format(PyExc_SystemError,
+				"Parent module '%.200s' not loaded, "
+				"cannot perform relative import", buf);
+		}
+	}
 	return parent;
 	/* We expect, but can't guarantee, if parent != None, that:
 	   - parent.__name__ == buf