diff --git a/Android.bp b/Android.bp
index 2a56885..5d72eda 100644
--- a/Android.bp
+++ b/Android.bp
@@ -219,7 +219,10 @@
         "-DVPATH=\"\"",
         "-DPREFIX=\"\"",
         "-DEXEC_PREFIX=\"\"",
-        "-DPYTHONPATH=\"\"",
+        "-DPYTHONPATH=\"..:\"",
+        "-DANDROID_SKIP_ZIP_PATH",
+        "-DANDROID_SKIP_EXEC_PREFIX_PATH",
+        "-DANDROID_LIB_PYTHON_PATH=\"internal/stdlib\"",
         "-DDATE=\"Dec 31 1969\"",
         "-DTIME=\"23:59:59\"",
     ],
diff --git a/Launcher/launcher_main.cpp b/Launcher/launcher_main.cpp
index 09a9d39..c0b0c49 100644
--- a/Launcher/launcher_main.cpp
+++ b/Launcher/launcher_main.cpp
@@ -42,6 +42,9 @@
   // android::base::GetExecutablePath() also handles for Darwin/Windows.
   std::string executable_path = android::base::GetExecutablePath();
 
+  // Set the equivalent of PYTHONHOME internally.
+  Py_SetPythonHome(strdup(executable_path.c_str()));
+
   int new_argc = argc + 1;
   char **new_argv = reinterpret_cast<char**>(calloc(new_argc, sizeof(*argv)));
 
diff --git a/Modules/getpath.c b/Modules/getpath.c
index e9d969b..27f3381 100644
--- a/Modules/getpath.c
+++ b/Modules/getpath.c
@@ -104,19 +104,15 @@
 #define LANDMARK "os.py"
 #endif
 
-#ifndef INTERNALDIR
-#define INTERNALDIR "internal"
-#endif
-
-#ifndef STDLIBDIR
-#define STDLIBDIR "stdlib"
-#endif
-
 static char prefix[MAXPATHLEN+1];
 static char exec_prefix[MAXPATHLEN+1];
 static char progpath[MAXPATHLEN+1];
 static char *module_search_path = NULL;
+#ifdef ANDROID_LIB_PYTHON_PATH
+static char lib_python[] = ANDROID_LIB_PYTHON_PATH;
+#else
 static char lib_python[] = "lib/python" VERSION;
+#endif
 
 static void
 reduce(char *dir)
@@ -263,11 +259,8 @@
         return 1;
     }
 
-    // GOOGLE(nanzhang): Always set prefix with hermetic executable full path.
-    strcpy(prefix, argv0_path);
-    return 1;
-
     /* Check to see if argv[0] is in the build directory */
+    strcpy(prefix, argv0_path);
     joinpath(prefix, "Modules/Setup");
     if (isfile(prefix)) {
         /* Check VPATH to see if argv0_path is in the build directory. */
@@ -325,13 +318,10 @@
         return 1;
     }
 
-    // GOOGLE(nanzhang): Always set exec_prefix with hermetic executable full path.
-    strcpy(exec_prefix, argv0_path);
-    return 1;
-
     /* Check to see if argv[0] is in the build directory. "pybuilddir.txt"
        is written by setup.py and contains the relative path to the location
        of shared library modules. */
+    strcpy(exec_prefix, argv0_path);
     joinpath(exec_prefix, "pybuilddir.txt");
     if (isfile(exec_prefix)) {
       FILE *f = fopen(exec_prefix, "r");
@@ -377,62 +367,19 @@
 calculate_path(void)
 {
     extern char *Py_GetProgramName(void);
+
     static char delimiter[2] = {DELIM, '\0'};
     static char separator[2] = {SEP, '\0'};
     char *pythonpath = PYTHONPATH;
+    char *rtpypath = Py_GETENV("PYTHONPATH");
     char *home = Py_GetPythonHome();
-    // We have overrided argv[0] using the full path to the hermetic Python
-    // launcher itself. And then Py_SetProgramName(argv[0]) was invoked at
-    // launcher_main.cpp. The launcher_main.cpp has guaranteed that
-    // strlen(Py_GetProgramName()) must not exceed MAXPATHLEN.
+    char *path = getenv("PATH");
     char *prog = Py_GetProgramName();
     char argv0_path[MAXPATHLEN+1];
-    char *buf;
-    size_t bufsz;
-
-    strncpy(progpath, prog, MAXPATHLEN);
-    progpath[MAXPATHLEN] = '\0' /* In case of no NUL-termination. */;
-    strncpy(argv0_path, prog, MAXPATHLEN);
-    argv0_path[MAXPATHLEN] = '\0' /* In case of no NUL-termination. */;
-
-    // We don't reduce the path of prefix, and exec_prefix.
-    search_for_prefix(argv0_path, home);
-    search_for_exec_prefix(argv0_path, home);
-
-    // Calculate size of return buffer.
-    bufsz = strlen(prog) + 1 + sizeof(INTERNALDIR) /* 1 is for SEP */;
-    bufsz += strlen(prog) + 1 + sizeof(INTERNALDIR) + 1 + sizeof(STDLIBDIR) /* 1 is for SEP */;
-
-    /* This is the only malloc call in this file */
-    buf = (char *)PyMem_Malloc(bufsz);
-
-    if (buf == NULL) {
-        /* We can't exit, so print a warning and limp along */
-        fprintf(stderr, "Not enough memory for dynamic PYTHONPATH.\n");
-        fprintf(stderr, "Using default static PYTHONPATH.\n");
-        exit(1);
-    } else {
-        buf[0] = '\0';
-        strcat(buf, prefix);
-        strcat(buf, separator);
-        strcat(buf, INTERNALDIR);
-        strcat(buf, delimiter);
-
-        strcat(buf, prefix);
-        strcat(buf, separator);
-        strcat(buf, INTERNALDIR);
-        strcat(buf, separator);
-        strcat(buf, STDLIBDIR);
-
-        module_search_path = buf;
-    }
-    // GOOGLE(nanzhang): Don't need all the code below for embedded Python launcher.
-    return;
-
-    char *path = getenv("PATH");
-    char *rtpypath = Py_GETENV("PYTHONPATH");
     char zip_path[MAXPATHLEN+1];
     int pfound, efound; /* 1 if found; -1 if found build directory */
+    char *buf;
+    size_t bufsz;
     size_t prefixsz;
     char *defpath = pythonpath;
 #ifdef WITH_NEXT_FRAMEWORK
@@ -620,8 +567,12 @@
         defpath = delim + 1;
     }
 
+#ifndef ANDROID_SKIP_ZIP_PATH
     bufsz += strlen(zip_path) + 1;
+#endif
+#ifndef ANDROID_SKIP_EXEC_PREFIX_PATH
     bufsz += strlen(exec_prefix) + 1;
+#endif
 
     /* This is the only malloc call in this file */
     buf = (char *)PyMem_Malloc(bufsz);
@@ -642,8 +593,10 @@
             buf[0] = '\0';
 
         /* Next is the default zip path */
+#ifndef ANDROID_SKIP_ZIP_PATH
         strcat(buf, zip_path);
         strcat(buf, delimiter);
+#endif
 
         /* Next goes merge of compile-time $PYTHONPATH with
          * dynamically located prefix.
@@ -672,10 +625,12 @@
             }
             defpath = delim + 1;
         }
+#ifndef ANDROID_SKIP_EXEC_PREFIX_PATH
         strcat(buf, delimiter);
 
         /* Finally, on goes the directory for dynamic-load modules */
         strcat(buf, exec_prefix);
+#endif
 
         /* And publish the results */
         module_search_path = buf;
