summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Grainger <tagrain@gmail.com>2022-07-17 01:07:53 (GMT)
committerGitHub <noreply@github.com>2022-07-17 01:07:53 (GMT)
commit6da988a46c8955755624ad9878288d5214fceb4e (patch)
treebc3d48d836bb49b52f76761f776ec8c0440793a2
parent2e9da8e3522764d09f1d6054a2be567e91a30812 (diff)
downloadcpython-6da988a46c8955755624ad9878288d5214fceb4e.zip
cpython-6da988a46c8955755624ad9878288d5214fceb4e.tar.gz
cpython-6da988a46c8955755624ad9878288d5214fceb4e.tar.bz2
gh-91181: drop support for bytes on sys.path (GH-31934)
Support for bytes broke sometime between Python 3.2 and 3.6 and has been broken ever since. Trying to bring back supports is surprisingly difficult in the face of -b and checking for keys in sys.path_importer_cache. Since the support was broken for so long, trying to overcome the difficulty of bringing back the support has been deemed not worth it. Co-authored-by: Eryk Sun <eryksun@gmail.com> Co-authored-by: Brett Cannon <brett@python.org>
-rw-r--r--Doc/library/sys.rst2
-rw-r--r--Doc/reference/import.rst6
-rw-r--r--Lib/importlib/_bootstrap_external.py2
-rw-r--r--Lib/test/test_zipimport.py3
-rw-r--r--Lib/zipimport.py3
-rw-r--r--Misc/NEWS.d/next/Library/2022-03-16-14-24-14.bpo-47025.qtT3CE.rst1
6 files changed, 8 insertions, 9 deletions
diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst
index 7e24684..d9799f8 100644
--- a/Doc/library/sys.rst
+++ b/Doc/library/sys.rst
@@ -1158,7 +1158,7 @@ always available.
line option or the :envvar:`PYTHONSAFEPATH` environment variable?
A program is free to modify this list for its own purposes. Only strings
- and bytes should be added to :data:`sys.path`; all other data types are
+ should be added to :data:`sys.path`; all other data types are
ignored during import.
diff --git a/Doc/reference/import.rst b/Doc/reference/import.rst
index 29d402e..1e6b08f 100644
--- a/Doc/reference/import.rst
+++ b/Doc/reference/import.rst
@@ -800,10 +800,8 @@ environment variable and various other installation- and
implementation-specific defaults. Entries in :data:`sys.path` can name
directories on the file system, zip files, and potentially other "locations"
(see the :mod:`site` module) that should be searched for modules, such as
-URLs, or database queries. Only strings and bytes should be present on
-:data:`sys.path`; all other data types are ignored. The encoding of bytes
-entries is determined by the individual :term:`path entry finders <path entry
-finder>`.
+URLs, or database queries. Only strings should be present on
+:data:`sys.path`; all other data types are ignored.
The :term:`path based finder` is a :term:`meta path finder`, so the import
machinery begins the :term:`import path` search by calling the path
diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py
index 007127b..b6c6716 100644
--- a/Lib/importlib/_bootstrap_external.py
+++ b/Lib/importlib/_bootstrap_external.py
@@ -1475,7 +1475,7 @@ class PathFinder:
# the list of paths that will become its __path__
namespace_path = []
for entry in path:
- if not isinstance(entry, (str, bytes)):
+ if not isinstance(entry, str):
continue
finder = cls._path_importer_cache(entry)
if finder is not None:
diff --git a/Lib/test/test_zipimport.py b/Lib/test/test_zipimport.py
index fd2739d..52d43bd 100644
--- a/Lib/test/test_zipimport.py
+++ b/Lib/test/test_zipimport.py
@@ -742,7 +742,8 @@ class UncompressedZipImportTestCase(ImportHooksBaseTestCase):
z.writestr(zinfo, test_src)
zipimport.zipimporter(filename)
- zipimport.zipimporter(os.fsencode(filename))
+ with self.assertRaises(TypeError):
+ zipimport.zipimporter(os.fsencode(filename))
with self.assertRaises(TypeError):
zipimport.zipimporter(bytearray(os.fsencode(filename)))
with self.assertRaises(TypeError):
diff --git a/Lib/zipimport.py b/Lib/zipimport.py
index d039410..016f1b8 100644
--- a/Lib/zipimport.py
+++ b/Lib/zipimport.py
@@ -63,8 +63,7 @@ class zipimporter(_bootstrap_external._LoaderBasics):
# if found, or else read it from the archive.
def __init__(self, path):
if not isinstance(path, str):
- import os
- path = os.fsdecode(path)
+ raise TypeError(f"expected str, not {type(path)!r}")
if not path:
raise ZipImportError('archive path is empty', path=path)
if alt_path_sep:
diff --git a/Misc/NEWS.d/next/Library/2022-03-16-14-24-14.bpo-47025.qtT3CE.rst b/Misc/NEWS.d/next/Library/2022-03-16-14-24-14.bpo-47025.qtT3CE.rst
new file mode 100644
index 0000000..1c7c7ac
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2022-03-16-14-24-14.bpo-47025.qtT3CE.rst
@@ -0,0 +1 @@
+Drop support for :class:`bytes` on :attr:`sys.path`.