diff --git a/.azure-pipelines/templates/jobs/extended-tests-jobs.yml b/.azure-pipelines/templates/jobs/extended-tests-jobs.yml index 0ba02a9b7..5aa9fcb12 100644 --- a/.azure-pipelines/templates/jobs/extended-tests-jobs.yml +++ b/.azure-pipelines/templates/jobs/extended-tests-jobs.yml @@ -8,12 +8,6 @@ jobs: - group: certbot-common strategy: matrix: - linux-py39: - PYTHON_VERSION: 3.9 - TOXENV: py39 - linux-py310: - PYTHON_VERSION: 3.10 - TOXENV: py310 linux-py311: PYTHON_VERSION: 3.11 TOXENV: py311 @@ -23,14 +17,11 @@ jobs: linux-isolated: TOXENV: 'isolated-acme,isolated-certbot,isolated-apache,isolated-cloudflare,isolated-digitalocean,isolated-dnsimple,isolated-dnsmadeeasy,isolated-gehirn,isolated-google,isolated-linode,isolated-luadns,isolated-nsone,isolated-ovh,isolated-rfc2136,isolated-route53,isolated-sakuracloud,isolated-nginx' linux-integration-certbot-oldest: - PYTHON_VERSION: 3.9 + PYTHON_VERSION: 3.10 TOXENV: integration-certbot-oldest linux-integration-nginx-oldest: - PYTHON_VERSION: 3.9 + PYTHON_VERSION: 3.10 TOXENV: integration-nginx-oldest - linux-py39-integration: - PYTHON_VERSION: 3.9 - TOXENV: integration linux-py310-integration: PYTHON_VERSION: 3.10 TOXENV: integration diff --git a/.azure-pipelines/templates/jobs/standard-tests-jobs.yml b/.azure-pipelines/templates/jobs/standard-tests-jobs.yml index 2a589bc2f..b26333dd7 100644 --- a/.azure-pipelines/templates/jobs/standard-tests-jobs.yml +++ b/.azure-pipelines/templates/jobs/standard-tests-jobs.yml @@ -12,13 +12,13 @@ jobs: PIP_USE_PEP517: "true" linux-oldest: IMAGE_NAME: ubuntu-22.04 - PYTHON_VERSION: 3.9 + PYTHON_VERSION: 3.10 TOXENV: oldest - linux-py39: + linux-py310: # linux unit tests with the oldest python we support IMAGE_NAME: ubuntu-22.04 - PYTHON_VERSION: 3.9 - TOXENV: py39 + PYTHON_VERSION: 3.10 + TOXENV: py310 linux-cover: # linux unit+cover tests with the newest python we support IMAGE_NAME: ubuntu-22.04 diff --git a/acme/setup.py b/acme/setup.py index c3117c612..d0b5d6fb1 100644 --- a/acme/setup.py +++ b/acme/setup.py @@ -32,14 +32,13 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.9.2', + python_requires='>=3.10', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Intended Audience :: Developers', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', diff --git a/acme/src/acme/__init__.py b/acme/src/acme/__init__.py index bd48fbfcd..405a45252 100644 --- a/acme/src/acme/__init__.py +++ b/acme/src/acme/__init__.py @@ -6,7 +6,6 @@ This module is an implementation of the `ACME protocol`_. """ import sys -import warnings # This code exists to keep backwards compatibility with people using acme.jose # before it became the standalone josepy package. @@ -20,10 +19,3 @@ for mod in list(sys.modules): # preserved (acme.jose.* is josepy.*) if mod == 'josepy' or mod.startswith('josepy.'): sys.modules['acme.' + mod.replace('josepy', 'jose', 1)] = sys.modules[mod] - -if sys.version_info[:2] == (3, 9): - warnings.warn( - "Python 3.9 support will be dropped in the next planned release of " - "acme. Please upgrade your Python version.", - DeprecationWarning, - ) # pragma: no cover diff --git a/certbot-apache/setup.py b/certbot-apache/setup.py index 6ffce4f3f..a668c21aa 100644 --- a/certbot-apache/setup.py +++ b/certbot-apache/setup.py @@ -28,7 +28,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.9.2', + python_requires='>=3.10', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -37,7 +37,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', diff --git a/certbot-ci/setup.py b/certbot-ci/setup.py index 0e2aa359e..ce1ede342 100644 --- a/certbot-ci/setup.py +++ b/certbot-ci/setup.py @@ -31,14 +31,13 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.9.2', + python_requires='>=3.10', classifiers=[ 'Development Status :: 3 - Alpha', 'Intended Audience :: Developers', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', diff --git a/certbot-compatibility-test/setup.py b/certbot-compatibility-test/setup.py index 81f600353..034b7b488 100644 --- a/certbot-compatibility-test/setup.py +++ b/certbot-compatibility-test/setup.py @@ -18,14 +18,13 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.9.2', + python_requires='>=3.10', classifiers=[ 'Development Status :: 3 - Alpha', 'Intended Audience :: Developers', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', diff --git a/certbot-dns-cloudflare/setup.py b/certbot-dns-cloudflare/setup.py index 40f91b4c0..e37111231 100644 --- a/certbot-dns-cloudflare/setup.py +++ b/certbot-dns-cloudflare/setup.py @@ -39,7 +39,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.9.2', + python_requires='>=3.10', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -48,7 +48,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', diff --git a/certbot-dns-digitalocean/setup.py b/certbot-dns-digitalocean/setup.py index e6574dce4..0b143a040 100644 --- a/certbot-dns-digitalocean/setup.py +++ b/certbot-dns-digitalocean/setup.py @@ -37,7 +37,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.9.2', + python_requires='>=3.10', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -46,7 +46,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', diff --git a/certbot-dns-dnsimple/setup.py b/certbot-dns-dnsimple/setup.py index 177e1ceea..a05eb0245 100644 --- a/certbot-dns-dnsimple/setup.py +++ b/certbot-dns-dnsimple/setup.py @@ -39,7 +39,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.9.2', + python_requires='>=3.10', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -48,7 +48,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', diff --git a/certbot-dns-dnsmadeeasy/setup.py b/certbot-dns-dnsmadeeasy/setup.py index f16a40454..11570149f 100644 --- a/certbot-dns-dnsmadeeasy/setup.py +++ b/certbot-dns-dnsmadeeasy/setup.py @@ -37,7 +37,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.9.2', + python_requires='>=3.10', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -46,7 +46,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', diff --git a/certbot-dns-gehirn/setup.py b/certbot-dns-gehirn/setup.py index 50ebf6e07..9af3b123f 100644 --- a/certbot-dns-gehirn/setup.py +++ b/certbot-dns-gehirn/setup.py @@ -37,7 +37,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.9.2', + python_requires='>=3.10', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -46,7 +46,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', diff --git a/certbot-dns-google/setup.py b/certbot-dns-google/setup.py index 424026e67..7abe4fb63 100644 --- a/certbot-dns-google/setup.py +++ b/certbot-dns-google/setup.py @@ -38,7 +38,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.9.2', + python_requires='>=3.10', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -47,7 +47,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', diff --git a/certbot-dns-linode/setup.py b/certbot-dns-linode/setup.py index 606725345..4611587b9 100644 --- a/certbot-dns-linode/setup.py +++ b/certbot-dns-linode/setup.py @@ -37,7 +37,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.9.2', + python_requires='>=3.10', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -46,7 +46,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', diff --git a/certbot-dns-luadns/setup.py b/certbot-dns-luadns/setup.py index fda460a3a..64e479d84 100644 --- a/certbot-dns-luadns/setup.py +++ b/certbot-dns-luadns/setup.py @@ -37,7 +37,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.9.2', + python_requires='>=3.10', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -46,7 +46,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', diff --git a/certbot-dns-nsone/setup.py b/certbot-dns-nsone/setup.py index 32d121e65..85da1300f 100644 --- a/certbot-dns-nsone/setup.py +++ b/certbot-dns-nsone/setup.py @@ -37,7 +37,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.9.2', + python_requires='>=3.10', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -46,7 +46,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', diff --git a/certbot-dns-ovh/setup.py b/certbot-dns-ovh/setup.py index a40349d28..15a102311 100644 --- a/certbot-dns-ovh/setup.py +++ b/certbot-dns-ovh/setup.py @@ -37,7 +37,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.9.2', + python_requires='>=3.10', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -46,7 +46,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', diff --git a/certbot-dns-rfc2136/setup.py b/certbot-dns-rfc2136/setup.py index 4f7f71830..68bfb426c 100644 --- a/certbot-dns-rfc2136/setup.py +++ b/certbot-dns-rfc2136/setup.py @@ -40,7 +40,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.9.2', + python_requires='>=3.10', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -49,7 +49,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', diff --git a/certbot-dns-route53/setup.py b/certbot-dns-route53/setup.py index 54cd7f69c..4cbdfa9b2 100644 --- a/certbot-dns-route53/setup.py +++ b/certbot-dns-route53/setup.py @@ -37,7 +37,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.9.2', + python_requires='>=3.10', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -46,7 +46,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', diff --git a/certbot-dns-sakuracloud/setup.py b/certbot-dns-sakuracloud/setup.py index 1ebb9b0ee..688fac8a3 100644 --- a/certbot-dns-sakuracloud/setup.py +++ b/certbot-dns-sakuracloud/setup.py @@ -37,7 +37,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.9.2', + python_requires='>=3.10', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -46,7 +46,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', diff --git a/certbot-nginx/setup.py b/certbot-nginx/setup.py index baaaf7164..82a59b5d3 100644 --- a/certbot-nginx/setup.py +++ b/certbot-nginx/setup.py @@ -27,7 +27,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.9.2', + python_requires='>=3.10', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -36,7 +36,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', diff --git a/certbot/pyproject.toml b/certbot/pyproject.toml index 942d142ce..578cacb23 100644 --- a/certbot/pyproject.toml +++ b/certbot/pyproject.toml @@ -8,7 +8,7 @@ dynamic = ["version", "dependencies"] description = "ACME client" readme = "README.rst" license = "Apache-2.0" -requires-python = ">=3.9.2" +requires-python = ">=3.10" authors = [ { name = "Certbot Project", email = "certbot-dev@eff.org" }, ] @@ -19,11 +19,10 @@ classifiers = [ "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.13", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Topic :: Internet :: WWW/HTTP", "Topic :: Security", "Topic :: System :: Installation/Setup", diff --git a/certbot/src/certbot/__init__.py b/certbot/src/certbot/__init__.py index 07bf1f61d..1247fcd3d 100644 --- a/certbot/src/certbot/__init__.py +++ b/certbot/src/certbot/__init__.py @@ -1,14 +1,4 @@ """Certbot client.""" -import sys -import warnings # version number like 1.2.3a0, must have at least 2 parts, like 1.2 __version__ = '5.0.0.dev0' - - -if sys.version_info[:2] == (3, 9): - warnings.warn( - "Python 3.9 support will be dropped in the next planned release of " - "certbot. Please upgrade your Python version.", - DeprecationWarning, - ) # pragma: no cover diff --git a/certbot/src/certbot/_internal/main.py b/certbot/src/certbot/_internal/main.py index e26447be6..ed776d8a7 100644 --- a/certbot/src/certbot/_internal/main.py +++ b/certbot/src/certbot/_internal/main.py @@ -1864,10 +1864,6 @@ def main(cli_args: Optional[list[str]] = None) -> Optional[Union[str, int]]: if config.func != plugins_cmd: # pylint: disable=comparison-with-callable raise - if sys.version_info[:2] == (3, 9): - logger.warning("Python 3.9 support will be dropped in the next planned release " - "of Certbot - please upgrade your Python version.") - with make_displayer(config) as displayer: display_obj.set_display(displayer) diff --git a/letstest/scripts/test_apache2.sh b/letstest/scripts/test_apache2.sh index b94a36204..915615e44 100755 --- a/letstest/scripts/test_apache2.sh +++ b/letstest/scripts/test_apache2.sh @@ -48,10 +48,8 @@ eval "$(pyenv init --path)" eval "$(pyenv init -)" # Install and configure Python -# Python<=3.9 must be used because Python 3.10 requires too new of a version of -# OpenSSL. -pyenv install 3.9.10 -pyenv shell 3.9.10 +pyenv install 3.10 +pyenv shell 3.10 tools/venv.py -e acme -e certbot -e certbot-apache -e certbot-ci tox PEBBLE_LOGS="acme_server.log" @@ -92,18 +90,10 @@ sudo "venv/bin/certbot" -v --debug --text --agree-tos --no-verify-ssl \ --renew-by-default --redirect --register-unsafely-without-email \ --domain "${PUBLIC_HOSTNAME}" --server "${PEBBLE_URL}" -# Check that ssl_module detection is working on various systems -if [ "$OS_TYPE" = "ubuntu" ] ; then - MOD_SSL_LOCATION="/usr/lib/apache2/modules/mod_ssl.so" - APACHE_NAME=apache2ctl -elif [ "$OS_TYPE" = "centos" ]; then - MOD_SSL_LOCATION="/etc/httpd/modules/mod_ssl.so" - APACHE_NAME=httpd +if ! grep -q SSLSessionTickets /etc/letsencrypt/options-ssl-apache.conf; then + echo "modern TLS options were not used" + exit 1 fi -OPENSSL_VERSION=$(strings "$MOD_SSL_LOCATION" | egrep -o -m1 '^OpenSSL ([0-9]\.[^ ]+) ' | tail -c +9) -APACHE_VERSION=$(sudo $APACHE_NAME -v | egrep -o 'Apache/([0-9]\.[^ ]+)' | tail -c +8) -"venv/bin/python" letstest/scripts/test_openssl_version.py "$OPENSSL_VERSION" "$APACHE_VERSION" - if [ "$OS_TYPE" = "ubuntu" ] ; then export SERVER="${PEBBLE_URL}" diff --git a/letstest/scripts/test_openssl_version.py b/letstest/scripts/test_openssl_version.py deleted file mode 100644 index 94648c40c..000000000 --- a/letstest/scripts/test_openssl_version.py +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env python -# Test script for OpenSSL version checking -import sys - -from certbot import util - - -def main(openssl_version, apache_version): - if not openssl_version.strip(): - raise Exception("No OpenSSL version found.") - if not apache_version.strip(): - raise Exception("No Apache version found.") - conf_file_location = "/etc/letsencrypt/options-ssl-apache.conf" - with open(conf_file_location) as f: - contents = f.read() - if util.parse_loose_version(apache_version.strip()) < util.parse_loose_version('2.4.11') or \ - util.parse_loose_version(openssl_version.strip()) < util.parse_loose_version('1.0.2l'): - # should be old version - # assert SSLSessionTickets not in conf file - if "SSLSessionTickets" in contents: - raise Exception("Apache or OpenSSL version is too old, " - "but SSLSessionTickets is set.") - else: - # should be current version - # assert SSLSessionTickets in conf file - if "SSLSessionTickets" not in contents: - raise Exception("Apache and OpenSSL versions are sufficiently new, " - "but SSLSessionTickets is not set.") - -if __name__ == '__main__': - main(*sys.argv[1:]) diff --git a/letstest/setup.py b/letstest/setup.py index aeede0003..ba687aff2 100644 --- a/letstest/setup.py +++ b/letstest/setup.py @@ -9,14 +9,13 @@ setup( author='Certbot Project', author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.9.2', + python_requires='>=3.10', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Intended Audience :: Developers', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', diff --git a/newsfragments/10389.changed b/newsfragments/10389.changed new file mode 100644 index 000000000..4a7232179 --- /dev/null +++ b/newsfragments/10389.changed @@ -0,0 +1 @@ +Python 3.9 support was removed. diff --git a/pytest.ini b/pytest.ini index be9c816bf..dbc0d77fb 100644 --- a/pytest.ini +++ b/pytest.ini @@ -21,11 +21,9 @@ # from dateutil. See https://github.com/dateutil/dateutil/issues/1314. # 4) Planning to remove support for checking OCSP via OpenSSL binary. # See https://github.com/certbot/certbot/issues/10291. -# 5) Ignore our own DeprecationWarning about Python 3.9 soon to be dropped. filterwarnings = error ignore:.*rsyncdir:DeprecationWarning ignore:'urllib3.contrib.pyopenssl:DeprecationWarning:requests_toolbelt ignore:.*datetime.utcfromtimestamp\(\) is deprecated:DeprecationWarning:dateutil ignore:enforce_openssl_binary_usage parameter is deprecated:DeprecationWarning - ignore:Python 3.9 support will be dropped:DeprecationWarning diff --git a/tools/pinning/current/pyproject.toml b/tools/pinning/current/pyproject.toml index db270dab4..9b6d257db 100644 --- a/tools/pinning/current/pyproject.toml +++ b/tools/pinning/current/pyproject.toml @@ -6,11 +6,7 @@ authors = ["Certbot Project"] license = "Apache License 2.0" [tool.poetry.dependencies] -# python 3.9.2 is used as a lower bound here because newer versions of -# cryptography dropped support for python 3.9.0 and 3.9.1. see -# https://github.com/pyca/cryptography/pull/12045. when we drop support for -# python 3.9 altogether, this line can be changed to the simpler 'python = "^3.10"'. -python = ">=3.9.2,<4.0" +python = "^3.10" # Local dependencies # Any local packages that have dependencies on other local packages must be diff --git a/tools/pinning/oldest/pyproject.toml b/tools/pinning/oldest/pyproject.toml index fcbd23ac8..c84f52394 100644 --- a/tools/pinning/oldest/pyproject.toml +++ b/tools/pinning/oldest/pyproject.toml @@ -18,7 +18,7 @@ license = "Apache License 2.0" [tool.poetry.dependencies] # The Python version here should be kept in sync with the one used in our # oldest tests in tox.ini. -python = "<3.10 >= 3.9.2" +python = "<3.11 >= 3.10" # Local dependencies # Any local packages that have dependencies on other local packages must be diff --git a/tools/venv.py b/tools/venv.py index d8165f089..668689ee1 100755 --- a/tools/venv.py +++ b/tools/venv.py @@ -116,7 +116,7 @@ def _check_version(version_str): version = (int(search.group(1)), int(search.group(2))) - if version >= (3, 9): + if version >= (3, 10): return True print('Incompatible python version for Certbot found: {0}'.format(version_str)) diff --git a/tox.ini b/tox.ini index f74c56d99..bf6e14a44 100644 --- a/tox.ini +++ b/tox.ini @@ -52,10 +52,10 @@ commands = commands = {[base]pytest} acme certbot certbot-dns-cloudflare certbot-dns-digitalocean certbot-dns-dnsimple certbot-dns-dnsmadeeasy certbot-dns-gehirn certbot-dns-google certbot-dns-linode certbot-dns-luadns certbot-dns-nsone certbot-dns-ovh certbot-dns-rfc2136 certbot-dns-route53 certbot-dns-sakuracloud certbot-nginx certbot-apache -[testenv:py3{,9,10,11,12,13}] +[testenv:py3{,10,11,12,13}] commands = {[testenv:py]commands} -[testenv:py3.{9,10,11,12,13}] +[testenv:py3.{10,11,12,13}] commands = {[testenv:py]commands} [testenv:oldest] @@ -65,7 +65,7 @@ commands = {[testenv:py]commands} # # This version should be kept in sync with the one declared in # tools/pinning/oldest/pyproject.toml. -basepython = python3.9 +basepython = python3.10 setenv = CERTBOT_OLDEST=1 commands = {[testenv:py]commands}