pypa / distutils

distutils as found in cpython

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

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

Output

.pyd

Fixed in #131