Skip to content

[BUG] msvc.py never checks Microsoft.VisualStudio.Component.VC.Tools.arm64 and thus fails to detect MSVC #4553

@saschanaz

Description

@saschanaz

setuptools version

70.0.0

Python version

Python 3.12 aarch64

OS

Windows 11 aarch64

Additional environment information

VS2022 Build Tools with MSVC ARM64/ARM64EC option is installed.

> cl /?
Microsoft (R) C/C++ Optimizing Compiler Version 19.40.33813 for ARM64
Copyright (C) Microsoft Corporation.  All rights reserved.
> pip --version
pip 24.2 from C:\Users\sasch\AppData\Local\Programs\Python\Python312-arm64\Lib\site-packages\pip (python 3.12)

Description

Building psutil and zstandard fails on setuptools distutils exception: distutils.errors.DistutilsPlatformError: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/

Expected behavior

It should be able to detect ARM64 MSVC.

How to Reproduce

pip install zstandard

... which effectively does:

from setuptools._distutils import ccompiler
compiler = ccompiler.new_compiler()
compiler.initialize()

Output

        [33 lines of output]
        Traceback (most recent call last):
          File "D:\gecko\third_party\python\pip\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 353, in <module>
            main()
          File "D:\gecko\third_party\python\pip\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 335, in main
            json_out['return_val'] = hook(**hook_input['kwargs'])
                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          File "D:\gecko\third_party\python\pip\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 118, in get_requires_for_build_wheel
            return hook(config_settings)
                   ^^^^^^^^^^^^^^^^^^^^^
          File "C:\Users\sasch\AppData\Local\Temp\pip-build-env-f6yfun9m\overlay\Lib\site-packages\setuptools\build_meta.py", line 327, in get_requires_for_build_wheel
            return self._get_build_requires(config_settings, requirements=[])
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          File "C:\Users\sasch\AppData\Local\Temp\pip-build-env-f6yfun9m\overlay\Lib\site-packages\setuptools\build_meta.py", line 297, in _get_build_requires
            self.run_setup()
          File "C:\Users\sasch\AppData\Local\Temp\pip-build-env-f6yfun9m\overlay\Lib\site-packages\setuptools\build_meta.py", line 313, in run_setup
            exec(code, locals())
          File "<string>", line 126, in <module>
          File "<string>", line 105, in uses_msvc
          File "C:\Users\sasch\AppData\Local\Temp\pip-build-env-f6yfun9m\overlay\Lib\site-packages\setuptools\_distutils\command\config.py", line 220, in try_compile
            self._compile(body, headers, include_dirs, lang)
          File "C:\Users\sasch\AppData\Local\Temp\pip-build-env-f6yfun9m\overlay\Lib\site-packages\setuptools\_distutils\command\config.py", line 132, in _compile
            self.compiler.compile([src], include_dirs=include_dirs)
          File "C:\Users\sasch\AppData\Local\Temp\pip-build-env-f6yfun9m\overlay\Lib\site-packages\setuptools\_distutils\_msvccompiler.py", line 343, in compile
            self.initialize()
          File "C:\Users\sasch\AppData\Local\Temp\pip-build-env-f6yfun9m\overlay\Lib\site-packages\setuptools\_distutils\_msvccompiler.py", line 253, in initialize
            vc_env = _get_vc_env(plat_spec)
                     ^^^^^^^^^^^^^^^^^^^^^^
          File "C:\Users\sasch\AppData\Local\Temp\pip-build-env-f6yfun9m\overlay\Lib\site-packages\setuptools\msvc.py", line 233, in msvc14_get_vc_env
            return _msvc14_get_vc_env(plat_spec)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          File "C:\Users\sasch\AppData\Local\Temp\pip-build-env-f6yfun9m\overlay\Lib\site-packages\setuptools\msvc.py", line 190, in _msvc14_get_vc_env
            raise distutils.errors.DistutilsPlatformError("Unable to find vcvarsall.bat")
        distutils.errors.DistutilsPlatformError: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
        [end of output]

... or with the minimal repro:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\sasch\AppData\Local\Programs\Python\Python312-arm64\Lib\site-packages\setuptools\_distutils\_msvccompiler.py", line 253, in initialize
    vc_env = _get_vc_env(plat_spec)
             ^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sasch\AppData\Local\Programs\Python\Python312-arm64\Lib\site-packages\setuptools\msvc.py", line 233, in msvc14_get_vc_env
    return _msvc14_get_vc_env(plat_spec)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\sasch\AppData\Local\Programs\Python\Python312-arm64\Lib\site-packages\setuptools\msvc.py", line 190, in _msvc14_get_vc_env
    raise distutils.errors.DistutilsPlatformError("Unable to find vcvarsall.bat")
distutils.errors.DistutilsPlatformError: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/

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