summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2018-01-07 15:54:31 (GMT)
committerGitHub <noreply@github.com>2018-01-07 15:54:31 (GMT)
commit3460198f6ba40a839f105c381f07179aba1e8c61 (patch)
tree1b43b27d96931ebfd4c7f23758da932d42c0940e
parente46a8af450210ee5c7f0459ad6beddbc626ae60f (diff)
downloadcpython-3460198f6ba40a839f105c381f07179aba1e8c61.zip
cpython-3460198f6ba40a839f105c381f07179aba1e8c61.tar.gz
cpython-3460198f6ba40a839f105c381f07179aba1e8c61.tar.bz2
bpo-31802: Fix importing native path module before importing os. (#4017)
-rw-r--r--Lib/macpath.py23
-rw-r--r--Lib/ntpath.py23
-rw-r--r--Lib/posixpath.py22
-rw-r--r--Lib/test/test_genericpath.py4
-rw-r--r--Misc/NEWS.d/next/Library/2017-10-17-14-52-14.bpo-31802.sYj2Zv.rst2
5 files changed, 42 insertions, 32 deletions
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 @@ __all__ = ["normcase","isabs","join","splitdrive","split","splitext",
"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 @@ Instead of importing this module directly, import os and refer to this
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 @@ __all__ = ["normcase","isabs","join","splitdrive","split","splitext",
"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 @@ Some of this can actually be useful on non-Posix systems too, e.g.
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 @@ __all__ = ["normcase","isabs","join","splitdrive","split","splitext",
"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 sys
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 @@ class CommonTest(GenericTest):
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):
diff --git a/Misc/NEWS.d/next/Library/2017-10-17-14-52-14.bpo-31802.sYj2Zv.rst b/Misc/NEWS.d/next/Library/2017-10-17-14-52-14.bpo-31802.sYj2Zv.rst
new file mode 100644
index 0000000..77df6bb
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2017-10-17-14-52-14.bpo-31802.sYj2Zv.rst
@@ -0,0 +1,2 @@
+Importing native path module (``posixpath``, ``ntpath``) now works even if
+the ``os`` module still is not imported.