4040from mypyc .namegen import exported_name
4141from mypyc .options import CompilerOptions
4242
43- if TYPE_CHECKING :
44- from distutils .core import Extension as _distutils_Extension
45- from typing_extensions import TypeAlias
43+ if sys .version_info < (3 , 12 ):
44+ if TYPE_CHECKING :
45+ from distutils .core import Extension as _distutils_Extension
46+ from typing_extensions import TypeAlias
4647
47- from setuptools import Extension as _setuptools_Extension
48+ from setuptools import Extension as _setuptools_Extension
4849
49- Extension : TypeAlias = Union [_setuptools_Extension , _distutils_Extension ]
50+ Extension : TypeAlias = Union [_setuptools_Extension , _distutils_Extension ]
5051
51-
52- try :
53- # Import setuptools so that it monkey-patch overrides distutils
52+ try :
53+ # Import setuptools so that it monkey-patch overrides distutils
54+ import setuptools
55+ except ImportError :
56+ pass
57+ from distutils import ccompiler , sysconfig
58+ else :
5459 import setuptools
55- except ImportError :
56- if sys .version_info >= (3 , 12 ):
57- # Raise on Python 3.12, since distutils will go away forever
58- raise
59- from distutils import ccompiler , sysconfig
60+ from setuptools import Extension
61+ from setuptools ._distutils import (
62+ ccompiler as _ccompiler , # type: ignore[attr-defined]
63+ sysconfig as _sysconfig , # type: ignore[attr-defined]
64+ )
65+
66+ ccompiler = _ccompiler
67+ sysconfig = _sysconfig
6068
6169
6270def get_extension () -> type [Extension ]:
@@ -65,11 +73,13 @@ def get_extension() -> type[Extension]:
6573 use_setuptools = "setuptools" in sys .modules
6674 extension_class : type [Extension ]
6775
68- if not use_setuptools :
76+ if sys . version_info < ( 3 , 12 ) and not use_setuptools :
6977 import distutils .core
7078
7179 extension_class = distutils .core .Extension
7280 else :
81+ if not use_setuptools :
82+ sys .exit ("error: setuptools not installed" )
7383 extension_class = setuptools .Extension
7484
7585 return extension_class
0 commit comments