From 2501065177a8d742ef6f2ec0e9b089fbee59624a Mon Sep 17 00:00:00 2001 From: Benedikt Reinartz Date: Wed, 6 May 2026 10:38:02 +0200 Subject: [PATCH] Fix wheel tags - Fix regression for Windows (package must be tagged win32.win_amd64) - Specify compatibility with exactly the versions we support, limited to CPython --- pyproject.toml | 2 +- setup.py | 35 ++++++++++++++++++++++++++++++++--- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index a270163ac..0966038cd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [build-system] -requires = ["setuptools>=80"] +requires = ["setuptools>=80", "packaging>=24", "pyproject-parser>=0.14"] build-backend = "setuptools.build_meta" [project] diff --git a/setup.py b/setup.py index c0683b000..1c2ffe2fd 100644 --- a/setup.py +++ b/setup.py @@ -3,6 +3,10 @@ import distutils from distutils.command.build import build as _build from setuptools.command.develop import develop as _develop +from setuptools.command.bdist_wheel import bdist_wheel as _bdist_wheel +from packaging.specifiers import SpecifierSet +from packaging.version import Version +from pyproject_parser import PyProject from setuptools import Distribution from setuptools import setup, Command @@ -16,6 +20,7 @@ NET46_SUPPORT = NET46_SUPPORT_OPTION in sys.argv if NET46_SUPPORT: sys.argv.remove(NET46_SUPPORT_OPTION) +WINDOWS_PLATFORM_TAG = "win32.win_amd64" class DotnetLib: @@ -111,6 +116,32 @@ def install_for_development(self): return super().install_for_development() +class bdist_wheel(_bdist_wheel): + def get_tag(self): + if NET46_SUPPORT: + platform_tag = WINDOWS_PLATFORM_TAG + else: + platform_tag = "any" + abi_tag = "none" + python_tag = self._get_python_tag() + return python_tag, abi_tag, platform_tag + + def _get_python_tag(self) -> str: + pyproject = PyProject.load("pyproject.toml") + project = pyproject.project or {} + + requires_python = project.get("requires-python") + if not requires_python: + raise RuntimeError("project.requires-python is required") + + specifiers = SpecifierSet(str(requires_python)) + return ".".join( + f"cp3{minor}" + for minor in range(0, 100) + if specifiers.contains(Version(f"3.{minor}"), prereleases=True) + ) + + # Monkey-patch Distribution s.t. it supports the dotnet_libs attribute Distribution.dotnet_libs = None @@ -118,20 +149,18 @@ def install_for_development(self): "build": build, "build_dotnet": build_dotnet, "develop": develop, + "bdist_wheel": bdist_wheel, } if NET46_SUPPORT: csproj = "src/compat/Python.Runtime.Compat.csproj" - plat_name = "win32" else: csproj = "src/runtime/Python.Runtime.csproj" - plat_name = "any" dotnet_libs = [DotnetLib("python-runtime", csproj, output="pythonnet/runtime")] setup( cmdclass=cmdclass, dotnet_libs=dotnet_libs, - options={"bdist_wheel": {"plat_name": plat_name}}, )