diff -Naur Python-2.7.9-orig/Lib/ntpath.py Python-2.7.9/Lib/ntpath.py
--- Python-2.7.9-orig/Lib/ntpath.py	2014-12-10 18:59:39.000000000 +0300
+++ Python-2.7.9/Lib/ntpath.py	2014-12-11 13:50:46.238600000 +0300
@@ -24,9 +24,22 @@
 curdir = '.'
 pardir = '..'
 extsep = '.'
-sep = '\\'
+# Generally we prefer forwards slashes for MinGW-w64 Python,
+# but should probably defer to the C code and a set of #defines
+# with the following precedence and logic:
+# DIRSEP_MSYSTEM    = If MSYSTEM env. var is set then / otherwise \.
+# DIRSEP_ARGV0      = Whichever of / and \ is more prevalent in argv0
+#                     (if equal DIRSEP_FORWARDS or DIRSEP_BACKWARDS)
+# DIRSEP_FORWARDS   = Always /
+# DIRSEP_BACKWARDS  = Always \
+# .. note, UNC paths are always converted to backslashes.
+if sys.platform == "win32" and "MSYSTEM" in os.environ:
+    sep = '/'
+    altsep = '\\'
+else:
+    sep = '\\'
+    altsep = '/'
 pathsep = ';'
-altsep = '/'
 defpath = '.;C:\\bin'
 if 'ce' in sys.builtin_module_names:
     defpath = '\\Windows'
@@ -60,7 +73,7 @@
 
 # Join two (or more) paths.
 def join(path, *paths):
-    """Join two or more pathname components, inserting "\\" as needed."""
+    """Join two or more pathname components, inserting sep as needed."""
     result_drive, result_path = splitdrive(path)
     for p in paths:
         p_drive, p_path = splitdrive(p)
@@ -80,7 +93,7 @@
             result_drive = p_drive
         # Second path is relative to the first
         if result_path and result_path[-1] not in '\\/':
-            result_path = result_path + '\\'
+            result_path = result_path + sep
         result_path = result_path + p_path
     ## add separator between UNC and non-absolute path
     if (result_path and result_path[0] not in '\\/' and
@@ -415,13 +428,19 @@
     """Normalize path, eliminating double slashes, etc."""
     # Preserve unicode (if path is unicode)
     backslash, dot = (u'\\', u'.') if isinstance(path, _unicode) else ('\\', '.')
+    isUNC = path.startswith('\\\\')
+    this_sep = sep
+    other_sep = altsep
+    if isUNC:
+        this_sep = backslash
+        other_sep = '/'
     if path.startswith(('\\\\.\\', '\\\\?\\')):
         # in the case of paths with these prefixes:
         # \\.\ -> device names
         # \\?\ -> literal paths
         # do not do any normalization, but return the path unchanged
         return path
-    path = path.replace("/", "\\")
+    path = path.replace(other_sep, this_sep)
     prefix, path = splitdrive(path)
     # We need to be careful here. If the prefix is empty, and the path starts
     # with a backslash, it could either be an absolute path on the current
@@ -434,15 +453,15 @@
     # is any better behaviour for such edge cases.
     if prefix == '':
         # No drive letter - preserve initial backslashes
-        while path[:1] == "\\":
-            prefix = prefix + backslash
+        while path[:1] == this_sep:
+            prefix = prefix + this_sep
             path = path[1:]
     else:
         # We have a drive letter - collapse initial backslashes
-        if path.startswith("\\"):
-            prefix = prefix + backslash
-            path = path.lstrip("\\")
-    comps = path.split("\\")
+        if path.startswith(sep):
+            prefix = prefix + this_sep
+            path = path.lstrip(this_sep)
+    comps = path.split(this_sep)
     i = 0
     while i < len(comps):
         if comps[i] in ('.', ''):
@@ -451,7 +470,7 @@
             if i > 0 and comps[i-1] != '..':
                 del comps[i-1:i+1]
                 i -= 1
-            elif i == 0 and prefix.endswith("\\"):
+            elif i == 0 and prefix.endswith(this_sep):
                 del comps[i]
             else:
                 i += 1
@@ -460,7 +479,7 @@
     # If the path is now empty, substitute '.'
     if not prefix and not comps:
         comps.append(dot)
-    return prefix + backslash.join(comps)
+    return prefix + this_sep.join(comps)
 
 
 # Return an absolute path.
--- Python-2.7.10/Include/pythonrun.h.orig	2015-05-23 17:09:00.000000000 +0100
+++ Python-2.7.10/Include/pythonrun.h	2015-12-31 03:30:18.917684800 +0000
@@ -104,6 +104,7 @@
 PyAPI_FUNC(char *) Py_GetPrefix(void);
 PyAPI_FUNC(char *) Py_GetExecPrefix(void);
 PyAPI_FUNC(char *) Py_GetPath(void);
+PyAPI_FUNC(void) Py_NormalizeSepsA(char *name);
 
 /* In their own files */
 PyAPI_FUNC(const char *) Py_GetVersion(void);
--- Python-2.7.10/Python/pythonrun.c.orig	2015-12-31 04:09:05.267647200 +0000
+++ Python-2.7.10/Python/pythonrun.c	2015-12-31 04:06:39.381327400 +0000
@@ -667,13 +667,67 @@
     PyInterpreterState_Delete(interp);
 }
 
-static char *progname = "python";
+ static char progname[PATH_MAX+1] = "python";
+ 
+char
+Py_GetSepA(char *name)
+{
+    char* msystem = (char*)2; /* So that non Windows use / as sep */
+    static char sep = '\0';
+#ifdef _WIN32
+    /* https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247%28v=vs.85%29.aspx
+     * The "\\?\" prefix .. indicate that the path should be passed to the system with minimal
+     * modification, which means that you cannot use forward slashes to represent path separators
+     */
+    if (name != NULL && memcmp(name, "\\\\?\\", sizeof("\\\\?\\") - sizeof(char)) == 0)
+    {
+        return '\\';
+    }
+#endif
+    if (sep != '\0')
+        return sep;
+#if defined(__MINGW32__)
+    msystem = Py_GETENV("MSYSTEM");
+#endif
+    if (msystem != NULL)
+        sep = '/';
+    else
+        sep = '\\';
+    return sep;
+}
+
+static wchar_t
+Py_GetAltSepA(char *name)
+{
+    char sep = Py_GetSepA(name);
+    if (sep == '/')
+        return '\\';
+    return '/';
+}
 
 void
-Py_SetProgramName(char *pn)
+Py_NormalizeSepsA(char *name)
 {
-    if (pn && *pn)
-        progname = pn;
+    char sep = Py_GetSepA(name);
+    char altsep = Py_GetAltSepA(name);
+    char* seps;
+    if (strlen(name) > 1 && name[1] == ':') {
+        name[0] = toupper(name[0]);
+    }
+    seps = strchr(name, altsep);
+    while(seps) {
+        *seps = sep;
+        seps = strchr(seps, altsep);
+    }
+}
+
+ void
+ Py_SetProgramName(char *pn)
+ {
+     if (pn && *pn)
+         strncpy(progname, pn, PATH_MAX);
+     pn = &progname[0];
+    Py_NormalizeSepsA(pn);
 }
 
 char *
--- Python-2.7.10/Modules/posixmodule.c.orig	2015-12-31 04:14:46.133487100 +0000
+++ Python-2.7.10/Modules/posixmodule.c	2015-12-31 04:31:31.496990600 +0000
@@ -2220,6 +2220,8 @@
     if (res == NULL)
         return posix_error();
 
+    Py_NormalizeSepsA(tmpbuf);
+
     dynamic_return = PyString_FromString(tmpbuf);
     free(tmpbuf);
 
--- Python-2.7.11/Lib/ntpath.py.orig	2016-01-09 20:49:07.348817600 +0000
+++ Python-2.7.11/Lib/ntpath.py	2016-02-22 09:38:39.978263400 +0000
@@ -56,8 +56,8 @@
 def normcase(s):
     """Normalize case of pathname.
 
-    Makes all characters lowercase and all slashes into backslashes."""
-    return s.replace("/", "\\").lower()
+    Makes all characters lowercase and all os.altsep into os.sep."""
+    return s.replace(os.altsep, os.sep).lower()
 
 
 # Return whether a path is absolute.
