--- setuptools-51.1.2/launcher.c.orig	2021-01-12 11:59:21.949463100 +0530
+++ setuptools-51.1.2/launcher.c	2021-01-12 11:58:39.492034700 +0530
@@ -105,9 +105,18 @@
 }
 
 
-char *find_exe(char *exename, char *script) {
+int file_exists(char* path)
+{
+    DWORD attrib = GetFileAttributes(path);
+
+    if ((attrib == INVALID_FILE_ATTRIBUTES) || (attrib & FILE_ATTRIBUTE_DIRECTORY)) return 0;
+    return 1;
+}
+char *find_exe(char *exename, char *script, int search_in_path) {
     char drive[_MAX_DRIVE], dir[_MAX_DIR], fname[_MAX_FNAME], ext[_MAX_EXT];
     char path[_MAX_PATH], c, *result;
+    char *path_env, *path_env_start;
+    int maximum, needs_exe = 0;
 
     /* convert slashes to backslashes for uniform search below */
     result = exename;
@@ -117,6 +126,33 @@
     if (drive[0] || dir[0]=='\\') {
         return loadable_exe(exename);   /* absolute path, use directly */
     }
+
+    if (search_in_path) {
+        if (strstr(exename, ".exe") == NULL) needs_exe = 1;
+        char *path_env = getenv("PATH");
+        while (path_env != NULL) {
+            path_env_start = path_env;
+            path_env = strchr(path_env, ';');
+            maximum = _MAX_PATH - 2 - strlen(exename) - (needs_exe * strlen(".exe"));
+            if (path_env == NULL) {
+                strncpy(path, path_env_start, maximum);
+            }
+            else {
+                maximum = path_env - path_env_start < maximum ? path_env - path_env_start : maximum;
+                memcpy(path, path_env_start, maximum);
+                ++path_env;
+            }
+            path[maximum] = '\0';
+            strcat(path, "\\");
+            strcat(path, exename);
+            if (needs_exe) strcat(path, ".exe");
+            /* printf("Checking %s\n", path); */
+            if (file_exists(path)) {
+                /* printf("Found\n"); */
+                return loadable_exe(path);
+            }
+        }
+    }
     /* Use the script's parent directory, which should be the Python home
        (This should only be used for bdist_wininst-installed scripts, because
         easy_install-ed scripts use the absolute path to python[w].exe
@@ -207,7 +243,7 @@
     // set-up control handler callback funciotn
     SetConsoleCtrlHandler((PHANDLER_ROUTINE) control_handler, TRUE);
     if (!CreateProcessA(NULL, commandline, NULL, NULL, TRUE, 0, NULL, NULL, &s_info, &p_info)) {
-        fprintf(stderr, "failed to create process.\n");
+        fprintf(stderr, "failed to create process (%s).\n", commandline);
         return 0;
     }   
     child_pid = p_info.dwProcessId;
@@ -257,6 +293,9 @@
     char *ptr, *end;    /* working pointers for string manipulation */
     char *cmdline;
     int i, parsedargc;              /* loop counter */
+    char *env, *first_space;
+    int skip = 2;
+    int search_in_path = 0;
 
     /* compute script name from our .exe name*/
     GetModuleFileNameA(NULL, script, sizeof(script));
@@ -285,12 +324,24 @@
         strcpy(python, "#!python.exe");
     }
 
-    parsedargs = parse_argv(python+2, &parsedargc);
+    /* Check if "env" appears before the first space and skip
+       ahead to the next space. */
+    env = strstr(python+skip, "env");
+    first_space = strchr(python+skip, ' ');
+    if (env != NULL && (first_space == NULL || env < first_space)) {
+        search_in_path = 1;
+        env += 3;
+        while (*env && *env != ' ')
+          ++env;
+        skip = env - python;
+    }
+
+    parsedargs = parse_argv(python+skip, &parsedargc);
 
     /* Using spawnv() can fail strangely if you e.g. find the Cygwin
        Python, so we'll make sure Windows can find and load it */
 
-    ptr = find_exe(parsedargs[0], script);
+    ptr = find_exe(parsedargs[0], script, search_in_path);
     if (!ptr) {
         return fail("Cannot find Python executable %s\n", parsedargs[0]);
     }
