1
0
mirror of https://github.com/certbot/certbot.git synced 2025-08-09 15:02:48 +03:00

Drop Python 2 support (#8591)

Fixes #8389 #8584.

This PR makes the necessary modifications to officially drop Python 2 support in the Certbot project.

I did not remove the specific Python 2 compatibility branches that has been added in various places in the codebase, to reduce the size of this PR and this will be done in a future one

* Update classifiers and python_requires in setup.py

* Remove warnings about Python 2 deprecation

* Remove Azure jobs on Python 2.7

* Remove references to python 2 in documentation

* Pin dnspython to 2.1.0

* Update changelog

* Remove warning ignore
This commit is contained in:
Adrien Ferrand
2021-01-26 00:07:43 +01:00
committed by GitHub
parent 00235d3807
commit 7399807ff2
31 changed files with 33 additions and 132 deletions

View File

@@ -37,14 +37,6 @@ jobs:
PYTHON_VERSION: 3.6 PYTHON_VERSION: 3.6
TOXENV: integration-nginx-oldest TOXENV: integration-nginx-oldest
ACME_SERVER: boulder-v2 ACME_SERVER: boulder-v2
linux-boulder-v1-py27-integration:
PYTHON_VERSION: 2.7
TOXENV: integration
ACME_SERVER: boulder-v1
linux-boulder-v2-py27-integration:
PYTHON_VERSION: 2.7
TOXENV: integration
ACME_SERVER: boulder-v2
linux-boulder-v1-py36-integration: linux-boulder-v1-py36-integration:
PYTHON_VERSION: 3.6 PYTHON_VERSION: 3.6
TOXENV: integration TOXENV: integration

View File

@@ -4,10 +4,10 @@ jobs:
PYTHON_VERSION: 3.9 PYTHON_VERSION: 3.9
strategy: strategy:
matrix: matrix:
macos-py27: macos-py36:
IMAGE_NAME: macOS-10.15 IMAGE_NAME: macOS-10.15
PYTHON_VERSION: 2.7 PYTHON_VERSION: 3.6
TOXENV: py27 TOXENV: py36
macos-py39: macos-py39:
IMAGE_NAME: macOS-10.15 IMAGE_NAME: macOS-10.15
PYTHON_VERSION: 3.9 PYTHON_VERSION: 3.9
@@ -32,10 +32,6 @@ jobs:
IMAGE_NAME: ubuntu-18.04 IMAGE_NAME: ubuntu-18.04
PYTHON_VERSION: 3.6 PYTHON_VERSION: 3.6
TOXENV: '{dns,nginx}-oldest' TOXENV: '{dns,nginx}-oldest'
linux-py27:
IMAGE_NAME: ubuntu-18.04
PYTHON_VERSION: 2.7
TOXENV: py27
linux-py36: linux-py36:
IMAGE_NAME: ubuntu-18.04 IMAGE_NAME: ubuntu-18.04
PYTHON_VERSION: 3.6 PYTHON_VERSION: 3.6
@@ -65,11 +61,11 @@ jobs:
TOXENV: modification TOXENV: modification
apacheconftest: apacheconftest:
IMAGE_NAME: ubuntu-18.04 IMAGE_NAME: ubuntu-18.04
PYTHON_VERSION: 2.7 PYTHON_VERSION: 3.6
TOXENV: apacheconftest-with-pebble TOXENV: apacheconftest-with-pebble
nginxroundtrip: nginxroundtrip:
IMAGE_NAME: ubuntu-18.04 IMAGE_NAME: ubuntu-18.04
PYTHON_VERSION: 2.7 PYTHON_VERSION: 3.6
TOXENV: nginxroundtrip TOXENV: nginxroundtrip
pool: pool:
vmImage: $(IMAGE_NAME) vmImage: $(IMAGE_NAME)

View File

@@ -6,7 +6,6 @@ This module is an implementation of the `ACME protocol`_.
""" """
import sys import sys
import warnings
# This code exists to keep backwards compatibility with people using acme.jose # This code exists to keep backwards compatibility with people using acme.jose
# before it became the standalone josepy package. # before it became the standalone josepy package.
@@ -20,10 +19,3 @@ for mod in list(sys.modules):
# preserved (acme.jose.* is josepy.*) # preserved (acme.jose.* is josepy.*)
if mod == 'josepy' or mod.startswith('josepy.'): if mod == 'josepy' or mod.startswith('josepy.'):
sys.modules['acme.' + mod.replace('josepy', 'jose', 1)] = sys.modules[mod] sys.modules['acme.' + mod.replace('josepy', 'jose', 1)] = sys.modules[mod]
if sys.version_info[0] == 2:
warnings.warn(
"Python 2 support will be dropped in the next release of acme. "
"Please upgrade your Python version.",
PendingDeprecationWarning,
) # pragma: no cover

View File

@@ -51,14 +51,12 @@ setup(
author="Certbot Project", author="Certbot Project",
author_email='client-dev@letsencrypt.org', author_email='client-dev@letsencrypt.org',
license='Apache License 2.0', license='Apache License 2.0',
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*', python_requires='>=3.6',
classifiers=[ classifiers=[
'Development Status :: 5 - Production/Stable', 'Development Status :: 5 - Production/Stable',
'Intended Audience :: Developers', 'Intended Audience :: Developers',
'License :: OSI Approved :: Apache Software License', 'License :: OSI Approved :: Apache Software License',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',

View File

@@ -39,7 +39,7 @@ setup(
author="Certbot Project", author="Certbot Project",
author_email='client-dev@letsencrypt.org', author_email='client-dev@letsencrypt.org',
license='Apache License 2.0', license='Apache License 2.0',
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*', python_requires='>=3.6',
classifiers=[ classifiers=[
'Development Status :: 5 - Production/Stable', 'Development Status :: 5 - Production/Stable',
'Environment :: Plugins', 'Environment :: Plugins',
@@ -47,8 +47,6 @@ setup(
'License :: OSI Approved :: Apache Software License', 'License :: OSI Approved :: Apache Software License',
'Operating System :: POSIX :: Linux', 'Operating System :: POSIX :: Linux',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',

View File

@@ -40,14 +40,12 @@ setup(
author="Certbot Project", author="Certbot Project",
author_email='client-dev@letsencrypt.org', author_email='client-dev@letsencrypt.org',
license='Apache License 2.0', license='Apache License 2.0',
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*', python_requires='>=3.6',
classifiers=[ classifiers=[
'Development Status :: 3 - Alpha', 'Development Status :: 3 - Alpha',
'Intended Audience :: Developers', 'Intended Audience :: Developers',
'License :: OSI Approved :: Apache Software License', 'License :: OSI Approved :: Apache Software License',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',

View File

@@ -38,14 +38,12 @@ setup(
author="Certbot Project", author="Certbot Project",
author_email='client-dev@letsencrypt.org', author_email='client-dev@letsencrypt.org',
license='Apache License 2.0', license='Apache License 2.0',
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*', python_requires='>=3.6',
classifiers=[ classifiers=[
'Development Status :: 3 - Alpha', 'Development Status :: 3 - Alpha',
'Intended Audience :: Developers', 'Intended Audience :: Developers',
'License :: OSI Approved :: Apache Software License', 'License :: OSI Approved :: Apache Software License',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',

View File

@@ -49,7 +49,7 @@ setup(
author="Certbot Project", author="Certbot Project",
author_email='client-dev@letsencrypt.org', author_email='client-dev@letsencrypt.org',
license='Apache License 2.0', license='Apache License 2.0',
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*', python_requires='>=3.6',
classifiers=[ classifiers=[
'Development Status :: 5 - Production/Stable', 'Development Status :: 5 - Production/Stable',
'Environment :: Plugins', 'Environment :: Plugins',
@@ -57,8 +57,6 @@ setup(
'License :: OSI Approved :: Apache Software License', 'License :: OSI Approved :: Apache Software License',
'Operating System :: POSIX :: Linux', 'Operating System :: POSIX :: Linux',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',

View File

@@ -49,7 +49,7 @@ setup(
author="Certbot Project", author="Certbot Project",
author_email='client-dev@letsencrypt.org', author_email='client-dev@letsencrypt.org',
license='Apache License 2.0', license='Apache License 2.0',
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*', python_requires='>=3.6',
classifiers=[ classifiers=[
'Development Status :: 5 - Production/Stable', 'Development Status :: 5 - Production/Stable',
'Environment :: Plugins', 'Environment :: Plugins',
@@ -57,8 +57,6 @@ setup(
'License :: OSI Approved :: Apache Software License', 'License :: OSI Approved :: Apache Software License',
'Operating System :: POSIX :: Linux', 'Operating System :: POSIX :: Linux',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',

View File

@@ -50,7 +50,7 @@ setup(
author="Certbot Project", author="Certbot Project",
author_email='client-dev@letsencrypt.org', author_email='client-dev@letsencrypt.org',
license='Apache License 2.0', license='Apache License 2.0',
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*', python_requires='>=3.6',
classifiers=[ classifiers=[
'Development Status :: 5 - Production/Stable', 'Development Status :: 5 - Production/Stable',
'Environment :: Plugins', 'Environment :: Plugins',
@@ -58,8 +58,6 @@ setup(
'License :: OSI Approved :: Apache Software License', 'License :: OSI Approved :: Apache Software License',
'Operating System :: POSIX :: Linux', 'Operating System :: POSIX :: Linux',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',

View File

@@ -60,7 +60,7 @@ setup(
author="Certbot Project", author="Certbot Project",
author_email='client-dev@letsencrypt.org', author_email='client-dev@letsencrypt.org',
license='Apache License 2.0', license='Apache License 2.0',
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*', python_requires='>=3.6',
classifiers=[ classifiers=[
'Development Status :: 5 - Production/Stable', 'Development Status :: 5 - Production/Stable',
'Environment :: Plugins', 'Environment :: Plugins',
@@ -68,8 +68,6 @@ setup(
'License :: OSI Approved :: Apache Software License', 'License :: OSI Approved :: Apache Software License',
'Operating System :: POSIX :: Linux', 'Operating System :: POSIX :: Linux',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',

View File

@@ -49,7 +49,7 @@ setup(
author="Certbot Project", author="Certbot Project",
author_email='client-dev@letsencrypt.org', author_email='client-dev@letsencrypt.org',
license='Apache License 2.0', license='Apache License 2.0',
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*', python_requires='>=3.6',
classifiers=[ classifiers=[
'Development Status :: 5 - Production/Stable', 'Development Status :: 5 - Production/Stable',
'Environment :: Plugins', 'Environment :: Plugins',
@@ -57,8 +57,6 @@ setup(
'License :: OSI Approved :: Apache Software License', 'License :: OSI Approved :: Apache Software License',
'Operating System :: POSIX :: Linux', 'Operating System :: POSIX :: Linux',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',

View File

@@ -48,7 +48,7 @@ setup(
author="Certbot Project", author="Certbot Project",
author_email='client-dev@letsencrypt.org', author_email='client-dev@letsencrypt.org',
license='Apache License 2.0', license='Apache License 2.0',
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*', python_requires='>=3.6',
classifiers=[ classifiers=[
'Development Status :: 5 - Production/Stable', 'Development Status :: 5 - Production/Stable',
'Environment :: Plugins', 'Environment :: Plugins',
@@ -56,8 +56,6 @@ setup(
'License :: OSI Approved :: Apache Software License', 'License :: OSI Approved :: Apache Software License',
'Operating System :: POSIX :: Linux', 'Operating System :: POSIX :: Linux',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',

View File

@@ -52,7 +52,7 @@ setup(
author="Certbot Project", author="Certbot Project",
author_email='client-dev@letsencrypt.org', author_email='client-dev@letsencrypt.org',
license='Apache License 2.0', license='Apache License 2.0',
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*', python_requires='>=3.6',
classifiers=[ classifiers=[
'Development Status :: 5 - Production/Stable', 'Development Status :: 5 - Production/Stable',
'Environment :: Plugins', 'Environment :: Plugins',
@@ -60,8 +60,6 @@ setup(
'License :: OSI Approved :: Apache Software License', 'License :: OSI Approved :: Apache Software License',
'Operating System :: POSIX :: Linux', 'Operating System :: POSIX :: Linux',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',

View File

@@ -48,7 +48,7 @@ setup(
author="Certbot Project", author="Certbot Project",
author_email='client-dev@letsencrypt.org', author_email='client-dev@letsencrypt.org',
license='Apache License 2.0', license='Apache License 2.0',
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*', python_requires='>=3.6',
classifiers=[ classifiers=[
'Development Status :: 5 - Production/Stable', 'Development Status :: 5 - Production/Stable',
'Environment :: Plugins', 'Environment :: Plugins',
@@ -56,8 +56,6 @@ setup(
'License :: OSI Approved :: Apache Software License', 'License :: OSI Approved :: Apache Software License',
'Operating System :: POSIX :: Linux', 'Operating System :: POSIX :: Linux',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',

View File

@@ -49,7 +49,7 @@ setup(
author="Certbot Project", author="Certbot Project",
author_email='client-dev@letsencrypt.org', author_email='client-dev@letsencrypt.org',
license='Apache License 2.0', license='Apache License 2.0',
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*', python_requires='>=3.6',
classifiers=[ classifiers=[
'Development Status :: 5 - Production/Stable', 'Development Status :: 5 - Production/Stable',
'Environment :: Plugins', 'Environment :: Plugins',
@@ -57,8 +57,6 @@ setup(
'License :: OSI Approved :: Apache Software License', 'License :: OSI Approved :: Apache Software License',
'Operating System :: POSIX :: Linux', 'Operating System :: POSIX :: Linux',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',

View File

@@ -49,7 +49,7 @@ setup(
author="Certbot Project", author="Certbot Project",
author_email='client-dev@letsencrypt.org', author_email='client-dev@letsencrypt.org',
license='Apache License 2.0', license='Apache License 2.0',
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*', python_requires='>=3.6',
classifiers=[ classifiers=[
'Development Status :: 5 - Production/Stable', 'Development Status :: 5 - Production/Stable',
'Environment :: Plugins', 'Environment :: Plugins',
@@ -57,8 +57,6 @@ setup(
'License :: OSI Approved :: Apache Software License', 'License :: OSI Approved :: Apache Software License',
'Operating System :: POSIX :: Linux', 'Operating System :: POSIX :: Linux',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',

View File

@@ -49,7 +49,7 @@ setup(
author="Certbot Project", author="Certbot Project",
author_email='client-dev@letsencrypt.org', author_email='client-dev@letsencrypt.org',
license='Apache License 2.0', license='Apache License 2.0',
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*', python_requires='>=3.6',
classifiers=[ classifiers=[
'Development Status :: 5 - Production/Stable', 'Development Status :: 5 - Production/Stable',
'Environment :: Plugins', 'Environment :: Plugins',
@@ -57,8 +57,6 @@ setup(
'License :: OSI Approved :: Apache Software License', 'License :: OSI Approved :: Apache Software License',
'Operating System :: POSIX :: Linux', 'Operating System :: POSIX :: Linux',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',

View File

@@ -1,13 +1,3 @@
# type: ignore
# pylint: disable=no-member
# Many attributes of dnspython are now dynamically defined which causes both
# mypy and pylint to error about accessing attributes they think do not exist.
# This is the case even in up-to-date versions of mypy and pylint which as of
# writing this are 0.790 and 2.6.0 respectively. This problem may be fixed in
# dnspython 2.1.0. See https://github.com/rthalley/dnspython/issues/598. For
# now, let's disable these checks. This is done at the very top of the file
# like this because "type: ignore" must be the first line in the file to be
# respected by mypy.
"""DNS Authenticator using RFC 2136 Dynamic Updates.""" """DNS Authenticator using RFC 2136 Dynamic Updates."""
import logging import logging

View File

@@ -49,7 +49,7 @@ setup(
author="Certbot Project", author="Certbot Project",
author_email='client-dev@letsencrypt.org', author_email='client-dev@letsencrypt.org',
license='Apache License 2.0', license='Apache License 2.0',
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*', python_requires='>=3.6',
classifiers=[ classifiers=[
'Development Status :: 5 - Production/Stable', 'Development Status :: 5 - Production/Stable',
'Environment :: Plugins', 'Environment :: Plugins',
@@ -57,8 +57,6 @@ setup(
'License :: OSI Approved :: Apache Software License', 'License :: OSI Approved :: Apache Software License',
'Operating System :: POSIX :: Linux', 'Operating System :: POSIX :: Linux',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',

View File

@@ -49,7 +49,7 @@ setup(
author="Certbot Project", author="Certbot Project",
author_email='client-dev@letsencrypt.org', author_email='client-dev@letsencrypt.org',
license='Apache License 2.0', license='Apache License 2.0',
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*', python_requires='>=3.6',
classifiers=[ classifiers=[
'Development Status :: 5 - Production/Stable', 'Development Status :: 5 - Production/Stable',
'Environment :: Plugins', 'Environment :: Plugins',
@@ -57,8 +57,6 @@ setup(
'License :: OSI Approved :: Apache Software License', 'License :: OSI Approved :: Apache Software License',
'Operating System :: POSIX :: Linux', 'Operating System :: POSIX :: Linux',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',

View File

@@ -48,7 +48,7 @@ setup(
author="Certbot Project", author="Certbot Project",
author_email='client-dev@letsencrypt.org', author_email='client-dev@letsencrypt.org',
license='Apache License 2.0', license='Apache License 2.0',
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*', python_requires='>=3.6',
classifiers=[ classifiers=[
'Development Status :: 5 - Production/Stable', 'Development Status :: 5 - Production/Stable',
'Environment :: Plugins', 'Environment :: Plugins',
@@ -56,8 +56,6 @@ setup(
'License :: OSI Approved :: Apache Software License', 'License :: OSI Approved :: Apache Software License',
'Operating System :: POSIX :: Linux', 'Operating System :: POSIX :: Linux',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',

View File

@@ -35,7 +35,7 @@ setup(
author="Certbot Project", author="Certbot Project",
author_email='client-dev@letsencrypt.org', author_email='client-dev@letsencrypt.org',
license='Apache License 2.0', license='Apache License 2.0',
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*', python_requires='>=3.6',
classifiers=[ classifiers=[
'Development Status :: 5 - Production/Stable', 'Development Status :: 5 - Production/Stable',
'Environment :: Plugins', 'Environment :: Plugins',
@@ -43,8 +43,6 @@ setup(
'License :: OSI Approved :: Apache Software License', 'License :: OSI Approved :: Apache Software License',
'Operating System :: POSIX :: Linux', 'Operating System :: POSIX :: Linux',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',

View File

@@ -14,6 +14,7 @@ Certbot adheres to [Semantic Versioning](https://semver.org/).
topmost (closest to the root) certificate in the chain, instead of checking topmost (closest to the root) certificate in the chain, instead of checking
every certificate in the chain. every certificate in the chain.
See [#8577](https://github.com/certbot/certbot/issues/8577). See [#8577](https://github.com/certbot/certbot/issues/8577).
* Support for Python 2 has been removed.
### Fixed ### Fixed

View File

@@ -1,13 +1,3 @@
"""Certbot client.""" """Certbot client."""
import warnings
import sys
# version number like 1.2.3a0, must have at least 2 parts, like 1.2 # version number like 1.2.3a0, must have at least 2 parts, like 1.2
__version__ = '1.12.0.dev0' __version__ = '1.12.0.dev0'
if sys.version_info[0] == 2:
warnings.warn(
"Python 2 support will be dropped in the next release of Certbot. "
"Please upgrade your Python version.",
PendingDeprecationWarning,
) # pragma: no cover

View File

@@ -5,7 +5,6 @@ from __future__ import print_function
import functools import functools
import logging.handlers import logging.handlers
import sys import sys
import warnings
import configobj import configobj
import josepy as jose import josepy as jose
@@ -1404,13 +1403,6 @@ def main(cli_args=None):
if config.func != plugins_cmd: # pylint: disable=comparison-with-callable if config.func != plugins_cmd: # pylint: disable=comparison-with-callable
raise raise
if sys.version_info[0] == 2:
warnings.warn(
"Python 2 support will be dropped in the next release of Certbot. "
"Please upgrade your Python version.",
PendingDeprecationWarning,
) # pragma: no cover
set_displayer(config) set_displayer(config)
# Reporter # Reporter

View File

@@ -470,11 +470,8 @@ Mypy type annotations
===================== =====================
Certbot uses the `mypy`_ static type checker. Python 3 natively supports official type annotations, Certbot uses the `mypy`_ static type checker. Python 3 natively supports official type annotations,
which can then be tested for consistency using mypy. Python 2 doesnt, but type annotations can which can then be tested for consistency using mypy. Mypy does some type checks even without type
be `added in comments`_. Mypy does some type checks even without type annotations; we can find annotations; we can find bugs in Certbot even without a fully annotated codebase.
bugs in Certbot even without a fully annotated codebase.
Certbot supports both Python 2 and 3, so were using Python 2-style annotations.
Zulip wrote a `great guide`_ to using mypy. Its useful, but you dont have to read the whole thing Zulip wrote a `great guide`_ to using mypy. Its useful, but you dont have to read the whole thing
to start contributing to Certbot. to start contributing to Certbot.

View File

@@ -28,7 +28,7 @@ your system.
System Requirements System Requirements
=================== ===================
Certbot currently requires Python 2.7 or 3.6+ running on a UNIX-like operating Certbot currently requires Python 3.6+ running on a UNIX-like operating
system. By default, it requires root access in order to write to system. By default, it requires root access in order to write to
``/etc/letsencrypt``, ``/var/log/letsencrypt``, ``/var/lib/letsencrypt``; to ``/etc/letsencrypt``, ``/var/log/letsencrypt``, ``/var/lib/letsencrypt``; to
bind to port 80 (if you use the ``standalone`` plugin) and to read and bind to port 80 (if you use the ``standalone`` plugin) and to read and
@@ -197,12 +197,12 @@ Optionally to install the Certbot Apache plugin, you can use:
.. code-block:: shell .. code-block:: shell
sudo dnf install certbot python2-certbot-apache sudo dnf install certbot python3-certbot-apache
**FreeBSD** **FreeBSD**
* Port: ``cd /usr/ports/security/py-certbot && make install clean`` * Port: ``cd /usr/ports/security/py-certbot && make install clean``
* Package: ``pkg install py27-certbot`` * Package: ``pkg install py37-certbot``
**Gentoo** **Gentoo**
@@ -223,7 +223,7 @@ They need to be installed separately if you require their functionality.
**NetBSD** **NetBSD**
* Build from source: ``cd /usr/pkgsrc/security/py-certbot && make install clean`` * Build from source: ``cd /usr/pkgsrc/security/py-certbot && make install clean``
* Install pre-compiled package: ``pkg_add py27-certbot`` * Install pre-compiled package: ``pkg_add py37-certbot``
**OpenBSD** **OpenBSD**

View File

@@ -116,7 +116,7 @@ setup(
author="Certbot Project", author="Certbot Project",
author_email='client-dev@letsencrypt.org', author_email='client-dev@letsencrypt.org',
license='Apache License 2.0', license='Apache License 2.0',
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*', python_requires='>=3.6',
classifiers=[ classifiers=[
'Development Status :: 5 - Production/Stable', 'Development Status :: 5 - Production/Stable',
'Environment :: Console', 'Environment :: Console',
@@ -125,8 +125,6 @@ setup(
'License :: OSI Approved :: Apache Software License', 'License :: OSI Approved :: Apache Software License',
'Operating System :: POSIX :: Linux', 'Operating System :: POSIX :: Linux',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.7',

View File

@@ -4,8 +4,6 @@
[pytest] [pytest]
# In general, all warnings are treated as errors. Here are the exceptions: # In general, all warnings are treated as errors. Here are the exceptions:
# 1- decodestring: https://github.com/rthalley/dnspython/issues/338 # 1- decodestring: https://github.com/rthalley/dnspython/issues/338
# 2- Python 2 deprecation: https://github.com/certbot/certbot/issues/8388
# (to be removed with Certbot 1.12.0 and its drop of Python 2 support)
# Warnings being triggered by our plugins using deprecated features in # Warnings being triggered by our plugins using deprecated features in
# acme/certbot should be fixed by having our plugins no longer using the # acme/certbot should be fixed by having our plugins no longer using the
# deprecated code rather than adding them to the list of ignored warnings here. # deprecated code rather than adding them to the list of ignored warnings here.
@@ -16,4 +14,3 @@
filterwarnings = filterwarnings =
error error
ignore:decodestring:DeprecationWarning ignore:decodestring:DeprecationWarning
ignore:Python 2 support will be dropped:PendingDeprecationWarning

View File

@@ -26,13 +26,7 @@ coverage==4.5.4
decorator==4.4.1 decorator==4.4.1
deprecated==1.2.10 deprecated==1.2.10
dns-lexicon==3.3.17 dns-lexicon==3.3.17
# There is no version of dnspython that works on both Python 2 and Python 3.9. dnspython==2.1.0
# To work around this, we make use of the fact that subject to other
# constraints, pip will install the newest version of a package while ignoring
# versions that don't support the version of Python being used. The result of
# this is dnspython 2.0.0 is installed in Python 3 while dnspython 1.16.0 is
# installed in Python 2.
dnspython<=2.0.0
docker==4.3.1 docker==4.3.1
docker-compose==1.26.2 docker-compose==1.26.2
docker-pycreds==0.4.0 docker-pycreds==0.4.0