40
40
from mypyc .namegen import exported_name
41
41
from mypyc .options import CompilerOptions
42
42
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
46
47
47
- from setuptools import Extension as _setuptools_Extension
48
+ from setuptools import Extension as _setuptools_Extension
48
49
49
- Extension : TypeAlias = Union [_setuptools_Extension , _distutils_Extension ]
50
+ Extension : TypeAlias = Union [_setuptools_Extension , _distutils_Extension ]
50
51
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 :
54
59
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
60
68
61
69
62
70
def get_extension () -> type [Extension ]:
@@ -65,11 +73,13 @@ def get_extension() -> type[Extension]:
65
73
use_setuptools = "setuptools" in sys .modules
66
74
extension_class : type [Extension ]
67
75
68
- if not use_setuptools :
76
+ if sys . version_info < ( 3 , 12 ) and not use_setuptools :
69
77
import distutils .core
70
78
71
79
extension_class = distutils .core .Extension
72
80
else :
81
+ if not use_setuptools :
82
+ sys .exit ("error: setuptools not installed" )
73
83
extension_class = setuptools .Extension
74
84
75
85
return extension_class
0 commit comments