[BUG] wrong EXT_SUFFIX on python 3.7 on Windows
See original GitHub issuesetuptools 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: https://github.com/pypa/setuptools/commit/4b313f0d8600e8957736df7d0ffb795d187ab955
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
Issue Analytics
- State:
- Created a year ago
- Comments:5 (3 by maintainers)
Top GitHub Comments
Yep, seems good!
Thanks to everyone for the fix!
Hi @axnsan12, I am not familiar with the procedure to merge distutils, but usually Jason (the main developer behind setuptools and distutils) does it very frequently. So I am sure this change will be available soon.