bpo-31802: Fix importing native path module before importing os. (#4017)

diff --git a/Lib/macpath.py b/Lib/macpath.py
index f85a914..aacf723 100644
--- a/Lib/macpath.py
+++ b/Lib/macpath.py
@@ -1,5 +1,17 @@
 """Pathname and path-related operations for the Macintosh."""
 
+# strings representing various path-related bits and pieces
+# These are primarily for export; internally, they are hardcoded.
+# Should be set before imports for resolving cyclic dependency.
+curdir = ':'
+pardir = '::'
+extsep = '.'
+sep = ':'
+pathsep = '\n'
+defpath = ':'
+altsep = None
+devnull = 'Dev:Null'
+
 import os
 from stat import *
 import genericpath
@@ -16,17 +28,6 @@
            "curdir","pardir","sep","pathsep","defpath","altsep","extsep",
            "devnull","realpath","supports_unicode_filenames"]
 
-# strings representing various path-related bits and pieces
-# These are primarily for export; internally, they are hardcoded.
-curdir = ':'
-pardir = '::'
-extsep = '.'
-sep = ':'
-pathsep = '\n'
-defpath = ':'
-altsep = None
-devnull = 'Dev:Null'
-
 def _get_colon(path):
     if isinstance(path, bytes):
         return b':'
diff --git a/Lib/ntpath.py b/Lib/ntpath.py
index 10d3f2d..2182ec7 100644
--- a/Lib/ntpath.py
+++ b/Lib/ntpath.py
@@ -5,6 +5,18 @@
 module as os.path.
 """
 
+# strings representing various path-related bits and pieces
+# These are primarily for export; internally, they are hardcoded.
+# Should be set before imports for resolving cyclic dependency.
+curdir = '.'
+pardir = '..'
+extsep = '.'
+sep = '\\'
+pathsep = ';'
+altsep = '/'
+defpath = '.;C:\\bin'
+devnull = 'nul'
+
 import os
 import sys
 import stat
@@ -19,17 +31,6 @@
            "extsep","devnull","realpath","supports_unicode_filenames","relpath",
            "samefile", "sameopenfile", "samestat", "commonpath"]
 
-# strings representing various path-related bits and pieces
-# These are primarily for export; internally, they are hardcoded.
-curdir = '.'
-pardir = '..'
-extsep = '.'
-sep = '\\'
-pathsep = ';'
-altsep = '/'
-defpath = '.;C:\\bin'
-devnull = 'nul'
-
 def _get_bothseps(path):
     if isinstance(path, bytes):
         return b'\\/'
diff --git a/Lib/posixpath.py b/Lib/posixpath.py
index 6dbdab2..e92186c 100644
--- a/Lib/posixpath.py
+++ b/Lib/posixpath.py
@@ -10,6 +10,18 @@
 for manipulation of the pathname component of URLs.
 """
 
+# Strings representing various path-related bits and pieces.
+# These are primarily for export; internally, they are hardcoded.
+# Should be set before imports for resolving cyclic dependency.
+curdir = '.'
+pardir = '..'
+extsep = '.'
+sep = '/'
+pathsep = ':'
+defpath = ':/bin:/usr/bin'
+altsep = None
+devnull = '/dev/null'
+
 import os
 import sys
 import stat
@@ -25,16 +37,6 @@
            "devnull","realpath","supports_unicode_filenames","relpath",
            "commonpath"]
 
-# Strings representing various path-related bits and pieces.
-# These are primarily for export; internally, they are hardcoded.
-curdir = '.'
-pardir = '..'
-extsep = '.'
-sep = '/'
-pathsep = ':'
-defpath = ':/bin:/usr/bin'
-altsep = None
-devnull = '/dev/null'
 
 def _get_sep(path):
     if isinstance(path, bytes):
diff --git a/Lib/test/test_genericpath.py b/Lib/test/test_genericpath.py
index 01e11da..ad5a59c 100644
--- a/Lib/test/test_genericpath.py
+++ b/Lib/test/test_genericpath.py
@@ -8,6 +8,7 @@
 import unittest
 import warnings
 from test import support
+from test.support.script_helper import assert_python_ok
 
 
 def create_file(filename, data=b'foo'):
@@ -486,6 +487,9 @@
             with self.assertRaisesRegex(TypeError, 'bytearray'):
                 self.pathmodule.relpath(bytearray(b'foo'), bytearray(b'bar'))
 
+    def test_import(self):
+        assert_python_ok('-S', '-c', 'import ' + self.pathmodule.__name__)
+
 
 class PathLikeTests(unittest.TestCase):