Skip to content

[BUG] wrong EXT_SUFFIX on python 3.7 on Windows #3219

@axnsan12

Description

@axnsan12

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: 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

  1. Install setuptools>=61
  2. py -3.7 -c "from distutils import sysconfig; print(sysconfig.get_config_var('EXT_SUFFIX'))"

Output

.pyd

Metadata

Metadata

Assignees

No one assigned

    Labels

    Needs TriageIssues that need to be evaluated for severity and status.bug

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions