浏览代码

drop Python 3.9 (EOL'ed by python.org)

Thomas Waldmann 1 月之前
父节点
当前提交
cb0157ca55
共有 6 个文件被更改,包括 17 次插入27 次删除
  1. 2 3
      .github/workflows/ci.yml
  2. 4 2
      Vagrantfile
  3. 1 1
      docs/development.rst
  4. 4 4
      docs/installation.rst
  5. 3 14
      pyproject.toml
  6. 3 3
      src/borg/archiver.py

+ 2 - 3
.github/workflows/ci.yml

@@ -50,13 +50,12 @@ jobs:
         ${{ fromJSON(
         ${{ fromJSON(
           github.event_name == 'pull_request' && '{
           github.event_name == 'pull_request' && '{
             "include": [
             "include": [
-              {"os": "ubuntu-22.04", "python-version": "3.9", "toxenv": "py39-fuse2"},
+              {"os": "ubuntu-22.04", "python-version": "3.10", "toxenv": "py310-fuse2"},
               {"os": "ubuntu-24.04", "python-version": "3.14", "toxenv": "py314-fuse3"}
               {"os": "ubuntu-24.04", "python-version": "3.14", "toxenv": "py314-fuse3"}
             ]
             ]
           }' || '{
           }' || '{
             "include": [
             "include": [
-              {"os": "ubuntu-22.04", "python-version": "3.9", "toxenv": "py39-fuse2"},
-              {"os": "ubuntu-22.04", "python-version": "3.10", "toxenv": "py310-fuse3"},
+              {"os": "ubuntu-22.04", "python-version": "3.10", "toxenv": "py310-fuse2"},
               {"os": "ubuntu-22.04", "python-version": "3.11", "toxenv": "py311-fuse2", "binary": "borg-linux-glibc235-x86_64-gh"},
               {"os": "ubuntu-22.04", "python-version": "3.11", "toxenv": "py311-fuse2", "binary": "borg-linux-glibc235-x86_64-gh"},
               {"os": "ubuntu-22.04-arm", "python-version": "3.11", "toxenv": "py311-fuse2", "binary": "borg-linux-glibc235-arm64-gh"},
               {"os": "ubuntu-22.04-arm", "python-version": "3.11", "toxenv": "py311-fuse2", "binary": "borg-linux-glibc235-arm64-gh"},
               {"os": "ubuntu-24.04", "python-version": "3.12", "toxenv": "py312-fuse3"},
               {"os": "ubuntu-24.04", "python-version": "3.12", "toxenv": "py312-fuse3"},

+ 4 - 2
Vagrantfile

@@ -129,9 +129,11 @@ def packages_openindiana
   return <<-EOF
   return <<-EOF
     pkg install gcc-13 git
     pkg install gcc-13 git
     pkg install pkg-config libxxhash
     pkg install pkg-config libxxhash
-    ln -sf /usr/bin/python3.9 /usr/bin/python3
+    pkg install python-313
+    ln -sf /usr/bin/python3.13 /usr/bin/python3
+    ln -sf /usr/bin/python3.13-config /usr/bin/python3-config
     python3 -m ensurepip
     python3 -m ensurepip
-    ln -sf /usr/bin/pip3.9 /usr/bin/pip3
+    ln -sf /usr/bin/pip3.13 /usr/bin/pip3
     pip3 install virtualenv
     pip3 install virtualenv
     # let borg's pkg-config find openssl:
     # let borg's pkg-config find openssl:
     pfexec pkg set-mediator -V 3 openssl
     pfexec pkg set-mediator -V 3 openssl

+ 1 - 1
docs/development.rst

@@ -185,7 +185,7 @@ Some more advanced examples::
   # verify a changed tox.ini (run this after any change to tox.ini):
   # verify a changed tox.ini (run this after any change to tox.ini):
   fakeroot -u tox --recreate
   fakeroot -u tox --recreate
 
 
-  fakeroot -u tox -e py39  # run all tests, but only on python 3.9
+  fakeroot -u tox -e py310  # run all tests, but only on python 3.10
 
 
   fakeroot -u tox borg.testsuite.locking  # only run 1 test module
   fakeroot -u tox borg.testsuite.locking  # only run 1 test module
 
 

+ 4 - 4
docs/installation.rst

@@ -158,7 +158,7 @@ To install Borg from a source package (including pip), you have to install the
 following dependencies first. For the libraries you will also need their
 following dependencies first. For the libraries you will also need their
 development header files (sometimes in a separate `-dev` or `-devel` package).
 development header files (sometimes in a separate `-dev` or `-devel` package).
 
 
-* `Python 3`_ >= 3.9.0
+* `Python 3`_ >= 3.10.0
 * OpenSSL_ >= 1.0.0
 * OpenSSL_ >= 1.0.0
 * libacl_ (which depends on libattr_)
 * libacl_ (which depends on libattr_)
 * libxxhash_ >= 0.8.1
 * libxxhash_ >= 0.8.1
@@ -424,9 +424,9 @@ If you need to use a different version of Python you can install this using ``py
 
 
     ...
     ...
     # create a virtual environment
     # create a virtual environment
-    pyenv install 3.9.0  # minimum, preferably use something more recent!
-    pyenv global 3.9.0
-    pyenv local 3.9.0
+    pyenv install 3.10.0  # minimum, preferably use something more recent!
+    pyenv global 3.10.0
+    pyenv local 3.10.0
     virtualenv --python=${pyenv which python} borg-env
     virtualenv --python=${pyenv which python} borg-env
     source borg-env/bin/activate   # always before using!
     source borg-env/bin/activate   # always before using!
     ...
     ...

+ 3 - 14
pyproject.toml

@@ -6,7 +6,7 @@ maintainers = [
     {name="Thomas Waldmann", email="tw@waldmann-edv.de"},
     {name="Thomas Waldmann", email="tw@waldmann-edv.de"},
 ]
 ]
 description = "Deduplicated, encrypted, authenticated and compressed backups"
 description = "Deduplicated, encrypted, authenticated and compressed backups"
-requires-python = ">=3.9"
+requires-python = ">=3.10"
 keywords = ["backup", "borgbackup"]
 keywords = ["backup", "borgbackup"]
 classifiers = [
 classifiers = [
     "Development Status :: 4 - Beta",
     "Development Status :: 4 - Beta",
@@ -19,7 +19,6 @@ classifiers = [
     "Operating System :: POSIX :: Linux",
     "Operating System :: POSIX :: Linux",
     "Programming Language :: Python",
     "Programming Language :: Python",
     "Programming Language :: Python :: 3",
     "Programming Language :: Python :: 3",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Programming Language :: Python :: 3.12",
@@ -85,7 +84,7 @@ write_to_template = "__version__ = version = {version!r}\n"
 
 
 [tool.ruff]
 [tool.ruff]
 line-length = 120
 line-length = 120
-target-version = "py39"
+target-version = "py310"
 
 
 # Enable pycodestyle (`E`) and Pyflakes (`F`) codes by default.
 # Enable pycodestyle (`E`) and Pyflakes (`F`) codes by default.
 select = ["E", "F"]
 select = ["E", "F"]
@@ -175,7 +174,7 @@ min_version = "4.19"
 requires = ["tox>=4.19", "pkgconfig", "cython", "wheel", "setuptools_scm"]
 requires = ["tox>=4.19", "pkgconfig", "cython", "wheel", "setuptools_scm"]
 # Important: when adding/removing Python versions here,
 # Important: when adding/removing Python versions here,
 #            also update the section "Test environments with different FUSE implementations" accordingly.
 #            also update the section "Test environments with different FUSE implementations" accordingly.
-env_list = ["py{39,310,311,312,313,314}-{none,fuse2,fuse3}", "ruff"]
+env_list = ["py{310,311,312,313,314}-{none,fuse2,fuse3}", "ruff"]
 
 
 # Base configuration for test environments
 # Base configuration for test environments
 [tool.tox.env_run_base]
 [tool.tox.env_run_base]
@@ -193,16 +192,6 @@ labels = ["test"]
 pass_env = ["*"]  # needed by tox4, so env vars are visible for building borg
 pass_env = ["*"]  # needed by tox4, so env vars are visible for building borg
 
 
 # Test environments with different FUSE implementations
 # Test environments with different FUSE implementations
-[tool.tox.env.py39-none]
-
-[tool.tox.env.py39-fuse2]
-set_env = {BORG_FUSE_IMPL = "llfuse"}
-extras = ["llfuse"]
-
-[tool.tox.env.py39-fuse3]
-set_env = {BORG_FUSE_IMPL = "pyfuse3"}
-extras = ["pyfuse3"]
-
 [tool.tox.env.py310-none]
 [tool.tox.env.py310-none]
 
 
 [tool.tox.env.py310-fuse2]
 [tool.tox.env.py310-fuse2]

+ 3 - 3
src/borg/archiver.py

@@ -2702,11 +2702,11 @@ class Archiver:
 
 
         {now}
         {now}
             The current local date and time, by default in ISO-8601 format.
             The current local date and time, by default in ISO-8601 format.
-            You can also supply your own `format string <https://docs.python.org/3.9/library/datetime.html#strftime-and-strptime-behavior>`_, e.g. {now:%Y-%m-%d_%H:%M:%S}
+            You can also supply your own `format string <https://docs.python.org/3.10/library/datetime.html#strftime-and-strptime-behavior>`_, e.g. {now:%Y-%m-%d_%H:%M:%S}
 
 
         {utcnow}
         {utcnow}
             The current UTC date and time, by default in ISO-8601 format.
             The current UTC date and time, by default in ISO-8601 format.
-            You can also supply your own `format string <https://docs.python.org/3.9/library/datetime.html#strftime-and-strptime-behavior>`_, e.g. {utcnow:%Y-%m-%d_%H:%M:%S}
+            You can also supply your own `format string <https://docs.python.org/3.10/library/datetime.html#strftime-and-strptime-behavior>`_, e.g. {utcnow:%Y-%m-%d_%H:%M:%S}
 
 
         {user}
         {user}
             The user name (or UID, if no name is available) of the user running borg.
             The user name (or UID, if no name is available) of the user running borg.
@@ -4896,7 +4896,7 @@ class Archiver:
         +++++++++++++++++++++++++++
         +++++++++++++++++++++++++++
 
 
         The ``--format`` option uses Python's `format string syntax
         The ``--format`` option uses Python's `format string syntax
-        <https://docs.python.org/3.9/library/string.html#formatstrings>`_.
+        <https://docs.python.org/3.10/library/string.html#formatstrings>`_.
 
 
         Examples:
         Examples:
         ::
         ::