https://github.com/python/cpython/commit/e24c66d55a4fd2c56017f8f4e1bcb154db4ba50a
commit: e24c66d55a4fd2c56017f8f4e1bcb154db4ba50a
branch: main
author: morotti <r.moro...@gmail.com>
committer: gpshead <68491+gpsh...@users.noreply.github.com>
date: 2025-07-20T09:43:40-07:00
summary:

gh-91349: Adjust default compression level to 6 (down from 9) in gzip and 
tarfile (GH-131470)

gh-91349: Adjust default compression level to 6 (down from 9) in gzip and 
tarfile

It is the default level used by most compression tools and a
better tradeoff between speed and performance.

Co-authored-by: rmorotti <romain.moro...@man.com>
Co-authored-by: Pieter Eendebak <pieter.eende...@gmail.com>

files:
A Misc/NEWS.d/next/Library/2025-03-19-12-41-42.gh-issue-91349.8eTOCP.rst
M Doc/library/gzip.rst
M Doc/library/tarfile.rst
M Lib/gzip.py
M Lib/tarfile.py
M Lib/test/test_gzip.py

diff --git a/Doc/library/gzip.rst b/Doc/library/gzip.rst
index c9d96085ef739d..c59014a6f5bdce 100644
--- a/Doc/library/gzip.rst
+++ b/Doc/library/gzip.rst
@@ -26,7 +26,7 @@ Note that additional file formats which can be decompressed 
by the
 The module defines the following items:
 
 
-.. function:: open(filename, mode='rb', compresslevel=9, encoding=None, 
errors=None, newline=None)
+.. function:: open(filename, mode='rb', compresslevel=6, encoding=None, 
errors=None, newline=None)
 
    Open a gzip-compressed file in binary or text mode, returning a :term:`file
    object`.
@@ -59,6 +59,11 @@ The module defines the following items:
    .. versionchanged:: 3.6
       Accepts a :term:`path-like object`.
 
+   .. versionchanged:: next
+      The default compression level was reduced to 6 (down from 9).
+      It is the default level used by most compression tools and a better
+      tradeoff between speed and performance.
+
 .. exception:: BadGzipFile
 
    An exception raised for invalid gzip files.  It inherits from 
:exc:`OSError`.
@@ -67,7 +72,7 @@ The module defines the following items:
 
    .. versionadded:: 3.8
 
-.. class:: GzipFile(filename=None, mode=None, compresslevel=9, fileobj=None, 
mtime=None)
+.. class:: GzipFile(filename=None, mode=None, compresslevel=6, fileobj=None, 
mtime=None)
 
    Constructor for the :class:`GzipFile` class, which simulates most of the
    methods of a :term:`file object`, with the exception of the 
:meth:`~io.IOBase.truncate`
@@ -181,8 +186,13 @@ The module defines the following items:
       Remove the ``filename`` attribute, use the :attr:`~GzipFile.name`
       attribute instead.
 
+   .. versionchanged:: next
+      The default compression level was reduced to 6 (down from 9).
+      It is the default level used by most compression tools and a better
+      tradeoff between speed and performance.
+
 
-.. function:: compress(data, compresslevel=9, *, mtime=0)
+.. function:: compress(data, compresslevel=6, *, mtime=0)
 
    Compress the *data*, returning a :class:`bytes` object containing
    the compressed data.  *compresslevel* and *mtime* have the same meaning as 
in
@@ -206,6 +216,10 @@ The module defines the following items:
       The *mtime* parameter now defaults to 0 for reproducible output.
       For the previous behaviour of using the current time,
       pass ``None`` to *mtime*.
+   .. versionchanged:: next
+      The default compression level was reduced to 6 (down from 9).
+      It is the default level used by most compression tools and a better
+      tradeoff between speed and performance.
 
 .. function:: decompress(data)
 
diff --git a/Doc/library/tarfile.rst b/Doc/library/tarfile.rst
index c6c0033837562a..acaec5b592bf6e 100644
--- a/Doc/library/tarfile.rst
+++ b/Doc/library/tarfile.rst
@@ -123,7 +123,7 @@ Some facts and figures:
 
    For modes ``'w:gz'``, ``'x:gz'``, ``'w|gz'``, ``'w:bz2'``, ``'x:bz2'``,
    ``'w|bz2'``, :func:`tarfile.open` accepts the keyword argument
-   *compresslevel* (default ``9``) to specify the compression level of the 
file.
+   *compresslevel* (default ``6``) to specify the compression level of the 
file.
 
    For modes ``'w:xz'``, ``'x:xz'`` and ``'w|xz'``, :func:`tarfile.open` 
accepts the
    keyword argument *preset* to specify the compression level of the file.
@@ -198,6 +198,10 @@ Some facts and figures:
    .. versionchanged:: 3.14
       The *preset* keyword argument also works for streams.
 
+   .. versionchanged:: next
+      The default compression level was reduced to 6 (down from 9).
+      It is the default level used by most compression tools and a better
+      tradeoff between speed and performance.
 
 .. class:: TarFile
    :noindex:
diff --git a/Lib/gzip.py b/Lib/gzip.py
index c00f51858de0f0..89c4738ec69325 100644
--- a/Lib/gzip.py
+++ b/Lib/gzip.py
@@ -30,7 +30,7 @@
 _WRITE_BUFFER_SIZE = 4 * io.DEFAULT_BUFFER_SIZE
 
 
-def open(filename, mode="rb", compresslevel=_COMPRESS_LEVEL_BEST,
+def open(filename, mode="rb", compresslevel=_COMPRESS_LEVEL_TRADEOFF,
          encoding=None, errors=None, newline=None):
     """Open a gzip-compressed file in binary or text mode.
 
@@ -158,7 +158,7 @@ class GzipFile(_streams.BaseStream):
     myfileobj = None
 
     def __init__(self, filename=None, mode=None,
-                 compresslevel=_COMPRESS_LEVEL_BEST, fileobj=None, mtime=None):
+                 compresslevel=_COMPRESS_LEVEL_TRADEOFF, fileobj=None, 
mtime=None):
         """Constructor for the GzipFile class.
 
         At least one of fileobj and filename must be given a
@@ -621,7 +621,7 @@ def _rewind(self):
         self._new_member = True
 
 
-def compress(data, compresslevel=_COMPRESS_LEVEL_BEST, *, mtime=0):
+def compress(data, compresslevel=_COMPRESS_LEVEL_TRADEOFF, *, mtime=0):
     """Compress data in one shot and return the compressed string.
 
     compresslevel sets the compression level in range of 0-9.
diff --git a/Lib/tarfile.py b/Lib/tarfile.py
index 068aa13ed70356..80d8644af86f74 100644
--- a/Lib/tarfile.py
+++ b/Lib/tarfile.py
@@ -1927,7 +1927,7 @@ def not_compressed(comptype):
             if "preset" in kwargs and comptype not in ("xz",):
                 raise ValueError("preset is only valid for w|xz mode")
 
-            compresslevel = kwargs.pop("compresslevel", 9)
+            compresslevel = kwargs.pop("compresslevel", 6)
             preset = kwargs.pop("preset", None)
             stream = _Stream(name, filemode, comptype, fileobj, bufsize,
                              compresslevel, preset)
@@ -1953,7 +1953,7 @@ def taropen(cls, name, mode="r", fileobj=None, **kwargs):
         return cls(name, mode, fileobj, **kwargs)
 
     @classmethod
-    def gzopen(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs):
+    def gzopen(cls, name, mode="r", fileobj=None, compresslevel=6, **kwargs):
         """Open gzip compressed tar archive name for reading or writing.
            Appending is not allowed.
         """
diff --git a/Lib/test/test_gzip.py b/Lib/test/test_gzip.py
index a12ff5662a73db..9a2e1dd248fe94 100644
--- a/Lib/test/test_gzip.py
+++ b/Lib/test/test_gzip.py
@@ -353,7 +353,7 @@ def test_mtime(self):
     def test_metadata(self):
         mtime = 123456789
 
-        with gzip.GzipFile(self.filename, 'w', mtime = mtime) as fWrite:
+        with gzip.GzipFile(self.filename, 'w', mtime = mtime, compresslevel = 
9) as fWrite:
             fWrite.write(data1)
 
         with open(self.filename, 'rb') as fRead:
diff --git 
a/Misc/NEWS.d/next/Library/2025-03-19-12-41-42.gh-issue-91349.8eTOCP.rst 
b/Misc/NEWS.d/next/Library/2025-03-19-12-41-42.gh-issue-91349.8eTOCP.rst
new file mode 100644
index 00000000000000..0e866fa4ef6169
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2025-03-19-12-41-42.gh-issue-91349.8eTOCP.rst
@@ -0,0 +1,3 @@
+Adjust default ``compressionlevel=`` to 6 (down from 9) in :mod:`gzip` and 
:mod:`tarfile`.
+It is the default level used by most compression tools and a better
+tradeoff between speed and performance.

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: arch...@mail-archive.com

Reply via email to