diff --git a/Include/internal/pycore_pathconfig.h b/Include/internal/pycore_pathconfig.h
index 267e690..c073152 100644
--- a/Include/internal/pycore_pathconfig.h
+++ b/Include/internal/pycore_pathconfig.h
@@ -26,10 +26,9 @@
     /* Full path to the Python program */
     wchar_t *program_full_path;
     wchar_t *prefix;
+    wchar_t *exec_prefix;
 #ifdef MS_WINDOWS
     wchar_t *dll_path;
-#else
-    wchar_t *exec_prefix;
 #endif
     /* Set by Py_SetPath(), or computed by _PyPathConfig_Init() */
     wchar_t *module_search_path;
diff --git a/Include/pylifecycle.h b/Include/pylifecycle.h
index 7d383aa..93fb26b 100644
--- a/Include/pylifecycle.h
+++ b/Include/pylifecycle.h
@@ -7,12 +7,6 @@
 extern "C" {
 #endif
 
-PyAPI_FUNC(void) Py_SetProgramName(const wchar_t *);
-PyAPI_FUNC(wchar_t *) Py_GetProgramName(void);
-
-PyAPI_FUNC(void) Py_SetPythonHome(const wchar_t *);
-PyAPI_FUNC(wchar_t *) Py_GetPythonHome(void);
-
 #ifndef Py_LIMITED_API
 /* Only used by applications that embed the interpreter and need to
  * override the standard encoding determination mechanism
@@ -83,8 +77,18 @@
 /* Bootstrap __main__ (defined in Modules/main.c) */
 PyAPI_FUNC(int) Py_Main(int argc, wchar_t **argv);
 
-/* In getpath.c */
+/* In pathconfig.c */
+PyAPI_FUNC(void) Py_SetProgramName(const wchar_t *);
+PyAPI_FUNC(wchar_t *) Py_GetProgramName(void);
+
+PyAPI_FUNC(void) Py_SetPythonHome(const wchar_t *);
+PyAPI_FUNC(wchar_t *) Py_GetPythonHome(void);
+
+#ifndef Py_LIMITED_API
+PyAPI_FUNC(void) _Py_SetProgramFullPath(const wchar_t *);
+#endif
 PyAPI_FUNC(wchar_t *) Py_GetProgramFullPath(void);
+
 PyAPI_FUNC(wchar_t *) Py_GetPrefix(void);
 PyAPI_FUNC(wchar_t *) Py_GetExecPrefix(void);
 PyAPI_FUNC(wchar_t *) Py_GetPath(void);
diff --git a/Misc/NEWS.d/next/C API/2018-10-13-16-30-54.bpo-34725.j52rIS.rst b/Misc/NEWS.d/next/C API/2018-10-13-16-30-54.bpo-34725.j52rIS.rst
new file mode 100644
index 0000000..b5bc1bf
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2018-10-13-16-30-54.bpo-34725.j52rIS.rst
@@ -0,0 +1 @@
+Adds _Py_SetProgramFullPath so embedders may override sys.executable
diff --git a/PC/getpathp.c b/PC/getpathp.c
index ee9d3d2..25f371f 100644
--- a/PC/getpathp.c
+++ b/PC/getpathp.c
@@ -982,6 +982,10 @@
     if (config->prefix == NULL) {
         return _Py_INIT_NO_MEMORY();
     }
+    config->exec_prefix = _PyMem_RawWcsdup(prefix);
+    if (config->exec_prefix == NULL) {
+        return _Py_INIT_NO_MEMORY();
+    }
 
     return _Py_INIT_OK();
 }
diff --git a/Python/coreconfig.c b/Python/coreconfig.c
index a040a86..ad22300 100644
--- a/Python/coreconfig.c
+++ b/Python/coreconfig.c
@@ -662,6 +662,23 @@
     return _Py_INIT_OK();
 }
 
+static _PyInitError
+config_init_executable(_PyCoreConfig *config)
+{
+    assert(config->executable == NULL);
+
+    /* If Py_SetProgramFullPath() was called, use its value */
+    const wchar_t *program_full_path = _Py_path_config.program_full_path;
+    if (program_full_path != NULL) {
+        config->executable = _PyMem_RawWcsdup(program_full_path);
+        if (config->executable == NULL) {
+            return _Py_INIT_NO_MEMORY();
+        }
+        return _Py_INIT_OK();
+    }
+
+    return _Py_INIT_OK();
+}
 
 static const wchar_t*
 config_get_xoption(const _PyCoreConfig *config, wchar_t *name)
@@ -1370,6 +1387,13 @@
         }
     }
 
+    if (config->executable == NULL) {
+        err = config_init_executable(config);
+        if (_Py_INIT_FAILED(err)) {
+            return err;
+        }
+    }
+
     if (config->utf8_mode < 0 || config->coerce_c_locale < 0) {
         config_init_locale(config);
     }
diff --git a/Python/pathconfig.c b/Python/pathconfig.c
index 6a86880..342a944 100644
--- a/Python/pathconfig.c
+++ b/Python/pathconfig.c
@@ -49,10 +49,9 @@
 
     CLEAR(config->prefix);
     CLEAR(config->program_full_path);
+    CLEAR(config->exec_prefix);
 #ifdef MS_WINDOWS
     CLEAR(config->dll_path);
-#else
-    CLEAR(config->exec_prefix);
 #endif
     CLEAR(config->module_search_path);
     CLEAR(config->home);
@@ -74,8 +73,8 @@
     PyMemAllocatorEx old_alloc;
     _PyMem_SetDefaultAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
 
-    /* Calculate program_full_path, prefix, exec_prefix (Unix)
-       or dll_path (Windows), and module_search_path */
+    /* Calculate program_full_path, prefix, exec_prefix,
+       dll_path (Windows), and module_search_path */
     err = _PyPathConfig_Calculate_impl(&new_config, core_config);
     if (_Py_INIT_FAILED(err)) {
         goto err;
@@ -126,10 +125,9 @@
 
     COPY_ATTR(program_full_path);
     COPY_ATTR(prefix);
+    COPY_ATTR(exec_prefix);
 #ifdef MS_WINDOWS
     COPY_ATTR(dll_path);
-#else
-    COPY_ATTR(exec_prefix);
 #endif
     COPY_ATTR(module_search_path);
     COPY_ATTR(program_name);
@@ -208,12 +206,11 @@
     if (copy_wstr(&path_config.prefix, core_config->prefix) < 0) {
         goto no_memory;
     }
-#ifdef MS_WINDOWS
-    if (copy_wstr(&path_config.dll_path, core_config->dll_path) < 0) {
+    if (copy_wstr(&path_config.exec_prefix, core_config->exec_prefix) < 0) {
         goto no_memory;
     }
-#else
-    if (copy_wstr(&path_config.exec_prefix, core_config->exec_prefix) < 0) {
+#ifdef MS_WINDOWS
+    if (copy_wstr(&path_config.dll_path, core_config->dll_path) < 0) {
         goto no_memory;
     }
 #endif
@@ -317,12 +314,8 @@
     }
 
     if (config->exec_prefix == NULL) {
-#ifdef MS_WINDOWS
-        wchar_t *exec_prefix = path_config.prefix;
-#else
-        wchar_t *exec_prefix = path_config.exec_prefix;
-#endif
-        if (copy_wstr(&config->exec_prefix, exec_prefix) < 0) {
+        if (copy_wstr(&config->exec_prefix,
+                      path_config.exec_prefix) < 0) {
             goto no_memory;
         }
     }
@@ -379,7 +372,8 @@
     }
 
     if (config->base_exec_prefix == NULL) {
-        if (copy_wstr(&config->base_exec_prefix, config->exec_prefix) < 0) {
+        if (copy_wstr(&config->base_exec_prefix,
+                      config->exec_prefix) < 0) {
             return _Py_INIT_NO_MEMORY();
         }
     }
@@ -435,12 +429,11 @@
     int alloc_error = (new_config.program_full_path == NULL);
     new_config.prefix = _PyMem_RawWcsdup(L"");
     alloc_error |= (new_config.prefix == NULL);
+    new_config.exec_prefix = _PyMem_RawWcsdup(L"");
+    alloc_error |= (new_config.exec_prefix == NULL);
 #ifdef MS_WINDOWS
     new_config.dll_path = _PyMem_RawWcsdup(L"");
     alloc_error |= (new_config.dll_path == NULL);
-#else
-    new_config.exec_prefix = _PyMem_RawWcsdup(L"");
-    alloc_error |= (new_config.exec_prefix == NULL);
 #endif
     new_config.module_search_path = _PyMem_RawWcsdup(path);
     alloc_error |= (new_config.module_search_path == NULL);
@@ -503,6 +496,26 @@
     }
 }
 
+void
+_Py_SetProgramFullPath(const wchar_t *program_full_path)
+{
+    if (program_full_path == NULL || program_full_path[0] == L'\0') {
+        return;
+    }
+
+    PyMemAllocatorEx old_alloc;
+    _PyMem_SetDefaultAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
+
+    PyMem_RawFree(_Py_path_config.program_full_path);
+    _Py_path_config.program_full_path = _PyMem_RawWcsdup(program_full_path);
+
+    PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
+
+    if (_Py_path_config.program_full_path == NULL) {
+        Py_FatalError("_Py_SetProgramFullPath() failed: out of memory");
+    }
+}
+
 
 wchar_t *
 Py_GetPath(void)
@@ -523,12 +536,8 @@
 wchar_t *
 Py_GetExecPrefix(void)
 {
-#ifdef MS_WINDOWS
-    return Py_GetPrefix();
-#else
     pathconfig_global_init();
     return _Py_path_config.exec_prefix;
-#endif
 }
 
 
