From 92cf580210b095c60b84a125ec5ca8607f2731d3 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Fri, 27 Feb 2026 18:05:20 +0000 Subject: [PATCH 1/2] Deprecate `tarfile.version` --- Doc/deprecations/pending-removal-in-3.20.rst | 1 + Doc/whatsnew/3.15.rst | 1 + Lib/tarfile.py | 9 ++++++++- Lib/test/test_tarfile.py | 10 ++++++++++ .../2026-02-27-18-04-51.gh-issue-76007.17idfK.rst | 2 ++ 5 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Library/2026-02-27-18-04-51.gh-issue-76007.17idfK.rst diff --git a/Doc/deprecations/pending-removal-in-3.20.rst b/Doc/deprecations/pending-removal-in-3.20.rst index 4e4b2e1d5f8fff..8372432a34daa5 100644 --- a/Doc/deprecations/pending-removal-in-3.20.rst +++ b/Doc/deprecations/pending-removal-in-3.20.rst @@ -21,6 +21,7 @@ Pending removal in Python 3.20 - :mod:`re` - :mod:`socketserver` - :mod:`tabnanny` + - :mod:`tarfile` - :mod:`tkinter.font` - :mod:`tkinter.ttk` - :mod:`wsgiref.simple_server` diff --git a/Doc/whatsnew/3.15.rst b/Doc/whatsnew/3.15.rst index 37ebdfee7915fe..163d50d7e20e20 100644 --- a/Doc/whatsnew/3.15.rst +++ b/Doc/whatsnew/3.15.rst @@ -1549,6 +1549,7 @@ New deprecations - :mod:`re` - :mod:`socketserver` - :mod:`tabnanny` + - :mod:`tarfile` - :mod:`tkinter.font` - :mod:`tkinter.ttk` - :mod:`wsgiref.simple_server` diff --git a/Lib/tarfile.py b/Lib/tarfile.py index 7db3a40c9b33cf..c46b4197193d24 100644 --- a/Lib/tarfile.py +++ b/Lib/tarfile.py @@ -28,7 +28,6 @@ """Read from and write to tar format archives. """ -version = "0.9.0" __author__ = "Lars Gust\u00e4bel (lars@gustaebel.de)" __credits__ = "Gustavo Niemeyer, Niels Gust\u00e4bel, Richard Townsend." @@ -3137,5 +3136,13 @@ def main(): if args.verbose: print('{!r} file created.'.format(tar_name)) +def __getattr__(name): + if name == "version": + from warnings import _deprecated + + _deprecated("version", remove=(3, 20)) + return "0.9.0" # Do not change + raise AttributeError(f"module {__name__!r} has no attribute {name!r}") + if __name__ == '__main__': main() diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py index 9892005787c8a6..9c21f44da3738f 100644 --- a/Lib/test/test_tarfile.py +++ b/Lib/test/test_tarfile.py @@ -4836,6 +4836,16 @@ def test_ignore_invalid_offset_headers(self): self.assertEqual(members[0].offset, expected_offset) +class TestModule(unittest.TestCase): + def test_deprecated_version(self): + with self.assertWarnsRegex( + DeprecationWarning, + r"'version' is deprecated and slated for removal in Python 3.20", + ) as cm: + getattr(tarfile, 'version') + self.assertEqual(cm.filename, __file__) + + def setUpModule(): os_helper.unlink(TEMPDIR) os.makedirs(TEMPDIR) diff --git a/Misc/NEWS.d/next/Library/2026-02-27-18-04-51.gh-issue-76007.17idfK.rst b/Misc/NEWS.d/next/Library/2026-02-27-18-04-51.gh-issue-76007.17idfK.rst new file mode 100644 index 00000000000000..4bb230dcb8473f --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-02-27-18-04-51.gh-issue-76007.17idfK.rst @@ -0,0 +1,2 @@ +The ``version`` attribute of the :mod:`tarfile` module is deprecated and +slated for removal in Python 3.20. From b1d7adb907fed11e626cab4148f0e96097d11558 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com> Date: Fri, 27 Feb 2026 18:14:50 +0000 Subject: [PATCH 2/2] Apply suggestions from code review Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> --- Lib/tarfile.py | 2 ++ Lib/test/test_tarfile.py | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Lib/tarfile.py b/Lib/tarfile.py index c46b4197193d24..75984bf8b262b9 100644 --- a/Lib/tarfile.py +++ b/Lib/tarfile.py @@ -3136,6 +3136,7 @@ def main(): if args.verbose: print('{!r} file created.'.format(tar_name)) + def __getattr__(name): if name == "version": from warnings import _deprecated @@ -3144,5 +3145,6 @@ def __getattr__(name): return "0.9.0" # Do not change raise AttributeError(f"module {__name__!r} has no attribute {name!r}") + if __name__ == '__main__': main() diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py index 9c21f44da3738f..139840dd9c1f1b 100644 --- a/Lib/test/test_tarfile.py +++ b/Lib/test/test_tarfile.py @@ -4840,9 +4840,9 @@ class TestModule(unittest.TestCase): def test_deprecated_version(self): with self.assertWarnsRegex( DeprecationWarning, - r"'version' is deprecated and slated for removal in Python 3.20", + "'version' is deprecated and slated for removal in Python 3.20", ) as cm: - getattr(tarfile, 'version') + getattr(tarfile, "version") self.assertEqual(cm.filename, __file__)