25
25
import re
26
26
import sys
27
27
import time
28
- from typing import TYPE_CHECKING , Any , Dict , Iterable , NoReturn , cast
28
+ from typing import TYPE_CHECKING , Any , Dict , Iterable , NoReturn , Union , cast
29
29
30
30
from mypy .build import BuildSource
31
31
from mypy .errors import CompileError
41
41
from mypyc .options import CompilerOptions
42
42
43
43
if TYPE_CHECKING :
44
- from distutils .core import Extension
44
+ from distutils .core import Extension as _distutils_Extension
45
+ from typing_extensions import TypeAlias
46
+
47
+ from setuptools import Extension as _setuptools_Extension
48
+
49
+ Extension : TypeAlias = Union [_setuptools_Extension , _distutils_Extension ]
50
+
45
51
46
52
try :
47
53
# Import setuptools so that it monkey-patch overrides distutils
48
- import setuptools # noqa: F401
54
+ import setuptools
49
55
except ImportError :
50
56
if sys .version_info >= (3 , 12 ):
51
57
# Raise on Python 3.12, since distutils will go away forever
@@ -57,13 +63,16 @@ def get_extension() -> type[Extension]:
57
63
# We can work with either setuptools or distutils, and pick setuptools
58
64
# if it has been imported.
59
65
use_setuptools = "setuptools" in sys .modules
66
+ extension_class : type [Extension ]
60
67
61
68
if not use_setuptools :
62
- from distutils .core import Extension
69
+ import distutils .core
70
+
71
+ extension_class = distutils .core .Extension
63
72
else :
64
- from setuptools import Extension
73
+ extension_class = setuptools . Extension
65
74
66
- return Extension
75
+ return extension_class
67
76
68
77
69
78
def setup_mypycify_vars () -> None :
0 commit comments