Wrong EXT_SUFFIX on python 3.7 on Windows
axnsan12 opened this issue · comments
Delegating get_config_var
to the built-in sysconfig breaks extension module builds with python 3.7 (and unpatched 3.8, 3.9 installs) on windows.
For context see pypa/setuptools#3219
Pasting the contents below:
setuptools version
>=61
Python version
3.7
OS
Windows
Additional environment information
No response
Description
This setuptools commit changed the bundled distutils.sysconfig
to transparently forward get_config_var
to the interpreter builtin sysconfig: pypa/setuptools@4b313f0
However, as mentioned in this python bug, sysconfig is (was) broken and returns a bad EXT_SUFFIX on python >=3.7. The issue was fixed in 3.10, with a backport into 3.8 and 3.9, however 3.7 was completely left behind.
This problem was mentioned on the setuptools issue tracker in the past, but the knowledge seems to since have slipped the collective mind.
Since setuptools hijacks import distutils
by default, this means that anyone using python 3.7, or an older 3.8 or 3.9 installation, will suddenly start getting a wrong EXT_SUFFIX
by simply updating to setuptools>=61
, and the only way to get back the correct behavior is to set SETUPTOOLS_USE_DISTUTILS=stdlib
to prevent the hijacking. Given this overarching impact I believe it's unfair to impose such a breaking change on users unsuspectingly using older python versions.
Notably, this completely breaks CMake builds of extension modules with FindPython when using affected python versions, since they use distutils.sysconfig
to determine the required EXT_SUFFIX.
Expected behavior
Return proper EXT_SUFFIX on any python version >=3.7 (e.g. .cp37-win_amd64.pyd
)
How to Reproduce
- Install
setuptools>=61
py -3.7 -c "from distutils import sysconfig; print(sysconfig.get_config_var('EXT_SUFFIX'))"
Output
.pyd
Fixed in #131