--- /dev/null
+.. change::
+ :tags: bug, setup
+ :tickets: 7311
+
+ Python 3.10 has deprecated "distutils" in favor of explicit use of
+ "setuptools" in :pep:`632`; SQLAlchemy's setup.py has replaced imports
+ accordingly. However, since setuptools itself only recently added the
+ replacement symbols mentioned in pep-632 as of November of 2022 in version
+ 59.0.1, ``setup.py`` still has fallback imports to distutils, as SQLAlchemy
+ 1.4 does not have a hard setuptools versioning requirement at this time.
+ SQLAlchemy 2.0 is expected to use a full :pep:`517` installation layout
+ which will indicate appropriate setuptools versioning up front.
-from distutils.command.build_ext import build_ext
-from distutils.errors import CCompilerError
-from distutils.errors import DistutilsExecError
-from distutils.errors import DistutilsPlatformError
import os
import platform
import re
from setuptools import Distribution as _Distribution
from setuptools import Extension
from setuptools import setup
+from setuptools.command.build_ext import build_ext
from setuptools.command.test import test as TestCommand
+# attempt to use pep-632 imports for setuptools symbols; however,
+# since these symbols were only added to setuptools as of 59.0.1,
+# fall back to the distutils symbols otherwise
+try:
+ from setuptools.errors import CCompilerError
+ from setuptools.errors import DistutilsExecError
+ from setuptools.errors import DistutilsPlatformError
+except ImportError:
+ from distutils.errors import CCompilerError
+ from distutils.errors import DistutilsExecError
+ from distutils.errors import DistutilsPlatformError
cmdclass = {}