pypa / cibuildwheel

🎡 Build Python wheels for all the platforms with minimal configuration.
https://cibuildwheel.pypa.io
Other
1.83k stars 233 forks source link

Problems building Python 3.13t wheels on Windows with git dependency and `uv` #1975

Open burgholzer opened 1 month ago

burgholzer commented 1 month ago

Description

Hi 👋🏼

First things first: I am not 100% sure what I am about to describe is a cibuildwheel issue, but it was the only scenario under which I could reproduce the issue. Feel free to transfer this issue to its appropriate place or point me there.

Context

We are currently working on improving one of our libraries (https://github.com/cda-tum/mqt-qcec, built in C++, exposed to Python via pybind11, using scikit-build-core as a build backend) to get some of its build time dependencies (including C++ shared libraries) via another one of our packages (https://github.com/cda-tum/mqt-core; same setup as the other tool) kind of similar to how pybind11 is distributed as a Python package and can then be found via find_package in CMake.

The respective PRs in question are: https://github.com/cda-tum/mqt-qcec/pull/432 and https://github.com/cda-tum/mqt-core/pull/662

For the development, we added mqt.core as a git dependency to the mqt.qcec package configuration (see here):

[build-system]
requires = [
  "scikit-build-core>=0.10.1",
  "setuptools-scm>=7",
  "pybind11>=2.13",
  "mqt.core @ git+https://github.com/cda-tum/mqt-core@shared-libs",
]
build-backend = "scikit_build_core.build"

Almost everything works smoothly with this setup and nearly all the CI workflows are green, except one:

Problem

Running cibuildwheel on Windows to build Python 3.13 free-threading wheels. A corresponding failing CI log can be found here. Interestingly, it fails to properly build the mqt.core git dependency from the build requirements. The errors from the CI log all boil down to something similar as

< //?/C:/Users/runneradmin/AppData/Local/uv/cache/builds- v0/.tmphbUzYj/Lib/site- packages/pybind11\include\pybind11/detail/class.h(12,10): error: '../attr.h' file not found, did you mean 'attr.h'?

indicating that something is messed up with the pybind11 include directories.

Note that the same job succeeds on Ubuntu (also with emulation based on QEMU), macOS (x86 and arm64), as well as Windows (despite the 3.13t job), as can be seen from all the build logs here.

The cibuildwheel configuration of the mqt.qcec project is here.

What I tried to narrow down the problem

Steps to reproduce the problem

On a Windows machine with pipx installed:

git clone https://github.com/cda-tum/mqt-qcec.git
cd mqt-qcec
git checkout use-mqt-core-package
pipx run cibuildwheel --only cp313t-win_amd64

The issue is probably right at the intersection of cibuildwheel, scikit-build-core, pybind11, uv and some Python 3.13 free-threading change. However, even after longer sessions of debugging, I couldn't really make sense of it.

Build log

https://github.com/cda-tum/mqt-qcec/actions/runs/10392166048/job/28783894623

CI config

https://github.com/cda-tum/mqt-workflows/blob/a9a471582a6aefc2a71ab50772707829edb2abc3/.github/workflows/reusable-python-packaging.yml#L67-L118

henryiii commented 4 weeks ago

Have you activated all verbosity options? SKBUILD_BUILD_VERBOSE=1 and SKBUILD_LOGGING_LEVEL=DEBUG are the envvar versions. Comparing a working and failing build would be very interesting!

Using #include "../<stuff>" is somewhat poor form, public headers should be included via <project/...> (and including from a parent directory in the first place is poor structure). But I'm guessing since it's very specific, this likely isn't the problem. Though I'm slightly curious if we made a branch with absolute references here how the error message would change.

By the way, for free-threading on Windows, you have to define Py_GIL_DISABLED on Windows. See https://gitlab.kitware.com/cmake/cmake/-/issues/26016.

burgholzer commented 4 weeks ago

Have you activated all verbosity options? SKBUILD_BUILD_VERBOSE=1 and SKBUILD_LOGGING_LEVEL=DEBUG are the envvar versions. Comparing a working and failing build would be very interesting!

I generated the following verbose logs:

What I do not quite get is that the two commands using uv up there succeed on my local Windows VM, e.g.:

Copy of successful local CI log of (.venvt) PS C:\Users\burgholzer\Code\mqt-qcec> uv pip install -v "mqt.core @ git+https://github.com/cda-tum/mqt-core@shared-libs" ```console DEBUG uv 0.2.37 DEBUG Searching for Python interpreter in system path or `py` launcher DEBUG Found `cpython-3.13.0-windows-x86_64-none` at `C:\Users\burgholzer\Code\mqt-qcec\.venvt\Scripts\python.exe` (active virtual environment) DEBUG Using Python 3.13.0rc1 environment at .venvt\Scripts\python.exe DEBUG Acquired lock for `.venvt` DEBUG At least one requirement is not satisfied: mqt-core @ git+https://github.com/cda-tum/mqt-core@shared-libs DEBUG Using request timeout of 30s DEBUG Fetching source distribution from Git: https://github.com/cda-tum/mqt-core DEBUG Acquired lock for `https://github.com/cda-tum/mqt-core` DEBUG Updating git source `Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("github.com")), port: None, path: "/cda-tum/mqt-core", query: None, fragment: None }` DEBUG Attempting GitHub fast path for: https://api.github.com/repos/cda-tum/mqt-core/commits/shared-libs DEBUG Performing a Git fetch for: https://github.com/cda-tum/mqt-core DEBUG reset \\?\C:\Users\burgholzer\AppData\Local\uv\cache\git-v0\checkouts\8e9a633086c3b2cc\748193ab to 748193ab38722efb0701b3f8eb90bdab13fd00db DEBUG Acquired lock for `\\?\C:\Users\burgholzer\AppData\Local\uv\cache\built-wheels-v3\git\c328da53b66d2548\748193ab38722efb` DEBUG Preparing metadata for: mqt-core @ git+https://github.com/cda-tum/mqt-core@shared-libs DEBUG No static `PKG-INFO` available for: mqt-core @ git+https://github.com/cda-tum/mqt-core@shared-libs (MissingPkgInfo) DEBUG No static `pyproject.toml` available for: mqt-core @ git+https://github.com/cda-tum/mqt-core@shared-libs (PyprojectToml(DynamicField("version"))) INFO Ignoring empty directory DEBUG Solving with installed Python version: 3.13.0 DEBUG Adding direct dependency: scikit-build-core>=0.10.1 DEBUG Adding direct dependency: setuptools-scm>=7 DEBUG Adding direct dependency: pybind11>=2.13 DEBUG No cache entry for: https://pypi.org/simple/scikit-build-core/ DEBUG No cache entry for: https://pypi.org/simple/setuptools-scm/ DEBUG No cache entry for: https://pypi.org/simple/pybind11/ WARN Skipping file for setuptools-scm: setuptools_scm-1.14.0-py2.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.14.0-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.14.0-py3.3.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.14.0-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.14.0-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.14.0rc1-py2.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.14.0rc1-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.14.0rc1-py3.3.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.14.0rc1-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.14.0rc1-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.0-py2.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.0-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.0-py3.3.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.0-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.0-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.0-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.0rc1-py2.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.0rc1-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.0rc1-py3.3.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.0rc1-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.0rc1-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.1rc1-py2.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.1rc1-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.1rc1-py3.3.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.1rc1-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.1rc1-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.1rc1-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.4-py2.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.4-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.4-py3.3.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.4-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.4-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.4-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.5-py2.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.5-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.5-py3.3.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.5-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.5-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.5-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.6-py2.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.6-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.6-py3.3.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.6-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.6-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.6-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.7-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.7-py3.3.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.7-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.7-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.15.7-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.16.0-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.16.0-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.16.0-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.16.0-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.16.1-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.16.1-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.16.1-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.16.1-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.16.2-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.16.2-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.16.2-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.16.2-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.17.0-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.17.0-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.17.0-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-1.17.0-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-2.0.0-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-2.0.0-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-2.0.0-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-2.0.0-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-2.1.0-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-2.1.0-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-2.1.0-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-2.1.0-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.0-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.0-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.0-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.0-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.1-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.1-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.1-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.1-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.2-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.2-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.2-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.2-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.4-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.4-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.4-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.4-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.5-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.5-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.5-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.5-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.6-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.6-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.6-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.0.6-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.1.0-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.1.0-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.1.0-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.1.0-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.2.0-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.2.0-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.2.0-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.2.0-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.3.1-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.3.1-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.3.1-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.3.1-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.3.2-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.3.2-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.3.2-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.3.2-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.3.3-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.3.3-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.3.3-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.3.3-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.3.3-py3.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.3.3-py3.8.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.0-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.0-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.0-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.0-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.0-py3.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.0-py3.8.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.1-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.1-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.1-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.1-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.1-py3.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.1-py3.8.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.2-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.2-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.2-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.2-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.2-py3.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.2-py3.8.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.3-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.3-py3.4.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.3-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.3-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.3-py3.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.4.3-py3.8.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.5.0-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.5.0-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.5.0-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.5.0-py3.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-3.5.0-py3.8.egg WARN Skipping file for setuptools-scm: setuptools_scm-4.0.0-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-4.0.0-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-4.0.0-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-4.0.0-py3.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-4.0.0-py3.8.egg WARN Skipping file for setuptools-scm: setuptools_scm-4.1.0-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-4.1.0-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-4.1.0-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-4.1.0-py3.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-4.1.0-py3.8.egg WARN Skipping file for setuptools-scm: setuptools_scm-4.1.0-py3.9.egg WARN Skipping file for setuptools-scm: setuptools_scm-4.1.1-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-4.1.1-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-4.1.1-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-4.1.1-py3.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-4.1.1-py3.8.egg WARN Skipping file for setuptools-scm: setuptools_scm-4.1.1-py3.9.egg WARN Skipping file for setuptools-scm: setuptools_scm-4.1.2-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-4.1.2-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-4.1.2-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-4.1.2-py3.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-4.1.2-py3.8.egg WARN Skipping file for setuptools-scm: setuptools_scm-4.1.2-py3.9.egg WARN Skipping file for setuptools-scm: setuptools_scm-5.0.0-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-5.0.0-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-5.0.0-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-5.0.0-py3.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-5.0.0-py3.8.egg WARN Skipping file for setuptools-scm: setuptools_scm-5.0.0-py3.9.egg WARN Skipping file for setuptools-scm: setuptools_scm-5.0.1-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-5.0.1-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-5.0.1-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-5.0.1-py3.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-5.0.1-py3.8.egg WARN Skipping file for setuptools-scm: setuptools_scm-5.0.1-py3.9.egg WARN Skipping file for setuptools-scm: setuptools_scm-5.0.2-py2.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-5.0.2-py3.5.egg WARN Skipping file for setuptools-scm: setuptools_scm-5.0.2-py3.6.egg WARN Skipping file for setuptools-scm: setuptools_scm-5.0.2-py3.7.egg WARN Skipping file for setuptools-scm: setuptools_scm-5.0.2-py3.8.egg WARN Skipping file for setuptools-scm: setuptools_scm-5.0.2-py3.9.egg DEBUG No cache entry for: https://files.pythonhosted.org/packages/d9/0d/639dbbe0122b9359185877da57ad421a2cac9ab3a5c766833963354c4331/pybind11-2.13.4-py3-none-any.whl.metadata DEBUG No cache entry for: https://files.pythonhosted.org/packages/a0/b9/1906bfeb30f2fc13bb39bf7ddb8749784c05faadbd18a21cf141ba37bff2/setuptools_scm-8.1.0-py3-none-any.whl.metadata DEBUG Searching for a compatible version of scikit-build-core (>=0.10.1) DEBUG Selecting: scikit-build-core==0.10.3 [compatible] (scikit_build_core-0.10.3-py3-none-any.whl) DEBUG No cache entry for: https://files.pythonhosted.org/packages/df/d9/051e1809217842f8a067af0d1f9129d4aeb0e485aad611e278fb6f2741b9/scikit_build_core-0.10.3-py3-none-any.whl.metadata DEBUG Adding transitive dependency for scikit-build-core==0.10.3: packaging>=21.3 DEBUG Adding transitive dependency for scikit-build-core==0.10.3: pathspec>=0.10.1 DEBUG Searching for a compatible version of setuptools-scm (>=7) DEBUG Selecting: setuptools-scm==8.1.0 [compatible] (setuptools_scm-8.1.0-py3-none-any.whl) DEBUG No cache entry for: https://pypi.org/simple/packaging/ DEBUG No cache entry for: https://pypi.org/simple/pathspec/ DEBUG No cache entry for: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl.metadata DEBUG No cache entry for: https://files.pythonhosted.org/packages/08/aa/cc0199a5f0ad350994d660967a8efb233fe0416e4639146c089643407ce6/packaging-24.1-py3-none-any.whl.metadata DEBUG Adding transitive dependency for setuptools-scm==8.1.0: packaging>=20 DEBUG Adding transitive dependency for setuptools-scm==8.1.0: setuptools* DEBUG Searching for a compatible version of pybind11 (>=2.13) DEBUG Selecting: pybind11==2.13.4 [compatible] (pybind11-2.13.4-py3-none-any.whl) DEBUG No cache entry for: https://pypi.org/simple/setuptools/ DEBUG Searching for a compatible version of packaging (>=21.3) DEBUG Selecting: packaging==24.1 [compatible] (packaging-24.1-py3-none-any.whl) DEBUG Searching for a compatible version of pathspec (>=0.10.1) DEBUG Selecting: pathspec==0.12.1 [compatible] (pathspec-0.12.1-py3-none-any.whl) WARN Skipping file for setuptools: setuptools-0.6b1-py2.3.egg WARN Skipping file for setuptools: setuptools-0.6b1-py2.4.egg WARN Skipping file for setuptools: setuptools-0.6b2-py2.3.egg WARN Skipping file for setuptools: setuptools-0.6b2-py2.4.egg WARN Skipping file for setuptools: setuptools-0.6b3-py2.3.egg WARN Skipping file for setuptools: setuptools-0.6b3-py2.4.egg WARN Skipping file for setuptools: setuptools-0.6b4-py2.3.egg WARN Skipping file for setuptools: setuptools-0.6b4-py2.4.egg WARN Skipping file for setuptools: setuptools-0.6c1-py2.3.egg WARN Skipping file for setuptools: setuptools-0.6c1-py2.4.egg WARN Skipping file for setuptools: setuptools-0.6c10-1.src.rpm WARN Skipping file for setuptools: setuptools-0.6c10-py2.3.egg WARN Skipping file for setuptools: setuptools-0.6c10-py2.4.egg WARN Skipping file for setuptools: setuptools-0.6c10-py2.5.egg WARN Skipping file for setuptools: setuptools-0.6c10-py2.6.egg WARN Skipping file for setuptools: setuptools-0.6c10.win32-py2.3.exe WARN Skipping file for setuptools: setuptools-0.6c10.win32-py2.4.exe WARN Skipping file for setuptools: setuptools-0.6c10.win32-py2.5.exe WARN Skipping file for setuptools: setuptools-0.6c10.win32-py2.6.exe WARN Skipping file for setuptools: setuptools-0.6c11-1.src.rpm WARN Skipping file for setuptools: setuptools-0.6c11-py2.3.egg WARN Skipping file for setuptools: setuptools-0.6c11-py2.4.egg WARN Skipping file for setuptools: setuptools-0.6c11-py2.5.egg WARN Skipping file for setuptools: setuptools-0.6c11-py2.6.egg WARN Skipping file for setuptools: setuptools-0.6c11-py2.7.egg WARN Skipping file for setuptools: setuptools-0.6c11.win32-py2.3.exe WARN Skipping file for setuptools: setuptools-0.6c11.win32-py2.4.exe WARN Skipping file for setuptools: setuptools-0.6c11.win32-py2.5.exe WARN Skipping file for setuptools: setuptools-0.6c11.win32-py2.6.exe WARN Skipping file for setuptools: setuptools-0.6c11.win32-py2.7.exe WARN Skipping file for setuptools: setuptools-0.6c2-py2.3.egg WARN Skipping file for setuptools: setuptools-0.6c2-py2.4.egg WARN Skipping file for setuptools: setuptools-0.6c3-py2.3.egg WARN Skipping file for setuptools: setuptools-0.6c3-py2.4.egg WARN Skipping file for setuptools: setuptools-0.6c3-py2.5.egg WARN Skipping file for setuptools: setuptools-0.6c4-1.src.rpm WARN Skipping file for setuptools: setuptools-0.6c4-py2.3.egg WARN Skipping file for setuptools: setuptools-0.6c4-py2.4.egg WARN Skipping file for setuptools: setuptools-0.6c4-py2.5.egg WARN Skipping file for setuptools: setuptools-0.6c4.win32-py2.3.exe WARN Skipping file for setuptools: setuptools-0.6c4.win32-py2.4.exe WARN Skipping file for setuptools: setuptools-0.6c4.win32-py2.5.exe WARN Skipping file for setuptools: setuptools-0.6c5-1.src.rpm WARN Skipping file for setuptools: setuptools-0.6c5-py2.3.egg WARN Skipping file for setuptools: setuptools-0.6c5-py2.4.egg WARN Skipping file for setuptools: setuptools-0.6c5-py2.5.egg WARN Skipping file for setuptools: setuptools-0.6c5.win32-py2.3.exe WARN Skipping file for setuptools: setuptools-0.6c5.win32-py2.4.exe WARN Skipping file for setuptools: setuptools-0.6c5.win32-py2.5.exe WARN Skipping file for setuptools: setuptools-0.6c6-1.src.rpm WARN Skipping file for setuptools: setuptools-0.6c6-py2.3.egg WARN Skipping file for setuptools: setuptools-0.6c6-py2.4.egg WARN Skipping file for setuptools: setuptools-0.6c6-py2.5.egg WARN Skipping file for setuptools: setuptools-0.6c6.win32-py2.3.exe WARN Skipping file for setuptools: setuptools-0.6c6.win32-py2.4.exe WARN Skipping file for setuptools: setuptools-0.6c6.win32-py2.5.exe WARN Skipping file for setuptools: setuptools-0.6c7-1.src.rpm WARN Skipping file for setuptools: setuptools-0.6c7-py2.3.egg WARN Skipping file for setuptools: setuptools-0.6c7-py2.4.egg WARN Skipping file for setuptools: setuptools-0.6c7-py2.5.egg WARN Skipping file for setuptools: setuptools-0.6c7.win32-py2.3.exe WARN Skipping file for setuptools: setuptools-0.6c7.win32-py2.4.exe WARN Skipping file for setuptools: setuptools-0.6c7.win32-py2.5.exe WARN Skipping file for setuptools: setuptools-0.6c8-1.src.rpm WARN Skipping file for setuptools: setuptools-0.6c8-py2.3.egg WARN Skipping file for setuptools: setuptools-0.6c8-py2.4.egg WARN Skipping file for setuptools: setuptools-0.6c8-py2.5.egg WARN Skipping file for setuptools: setuptools-0.6c8.win32-py2.3.exe WARN Skipping file for setuptools: setuptools-0.6c8.win32-py2.4.exe WARN Skipping file for setuptools: setuptools-0.6c8.win32-py2.5.exe WARN Skipping file for setuptools: setuptools-0.6c9-1.src.rpm WARN Skipping file for setuptools: setuptools-0.6c9-py2.3.egg WARN Skipping file for setuptools: setuptools-0.6c9-py2.4.egg WARN Skipping file for setuptools: setuptools-0.6c9-py2.5.egg WARN Skipping file for setuptools: setuptools-0.6c9-py2.6.egg WARN Skipping file for setuptools: setuptools-0.6c9.win32-py2.3.exe WARN Skipping file for setuptools: setuptools-0.6c9.win32-py2.4.exe WARN Skipping file for setuptools: setuptools-0.6c9.win32-py2.5.exe WARN Skipping file for setuptools: setuptools-18.3.1-py3.4.egg DEBUG Searching for a compatible version of setuptools (*) DEBUG Selecting: setuptools==72.2.0 [compatible] (setuptools-72.2.0-py3-none-any.whl) DEBUG No cache entry for: https://files.pythonhosted.org/packages/6e/ec/06715d912351edc453e37f93f3fc80dcffd5ca0e70386c87529aca296f05/setuptools-72.2.0-py3-none-any.whl.metadata DEBUG Tried 6 versions: packaging 1, pathspec 1, pybind11 1, scikit-build-core 1, setuptools 1, setuptools-scm 1 DEBUG Split specific environment resolution took 0.667s DEBUG Installing in packaging==24.1, pathspec==0.12.1, pybind11==2.13.4, scikit-build-core==0.10.3, setuptools==72.2.0, setuptools-scm==8.1.0 in \\?\C:\Users\burgholzer\AppData\Local\uv\cache\builds-v0\.tmpH6V1at DEBUG Identified uncached requirement: packaging==24.1 DEBUG Identified uncached requirement: pathspec==0.12.1 DEBUG Identified uncached requirement: pybind11==2.13.4 DEBUG Identified uncached requirement: scikit-build-core==0.10.3 DEBUG Identified uncached requirement: setuptools==72.2.0 DEBUG Identified uncached requirement: setuptools-scm==8.1.0 DEBUG Downloading and building requirements for build: packaging==24.1, pathspec==0.12.1, pybind11==2.13.4, scikit-build-core==0.10.3, setuptools==72.2.0, setuptools-scm==8.1.0 DEBUG No cache entry for: https://files.pythonhosted.org/packages/6e/ec/06715d912351edc453e37f93f3fc80dcffd5ca0e70386c87529aca296f05/setuptools-72.2.0-py3-none-any.whl DEBUG No cache entry for: https://files.pythonhosted.org/packages/d9/0d/639dbbe0122b9359185877da57ad421a2cac9ab3a5c766833963354c4331/pybind11-2.13.4-py3-none-any.whl DEBUG No cache entry for: https://files.pythonhosted.org/packages/df/d9/051e1809217842f8a067af0d1f9129d4aeb0e485aad611e278fb6f2741b9/scikit_build_core-0.10.3-py3-none-any.whl DEBUG No cache entry for: https://files.pythonhosted.org/packages/08/aa/cc0199a5f0ad350994d660967a8efb233fe0416e4639146c089643407ce6/packaging-24.1-py3-none-any.whl DEBUG No cache entry for: https://files.pythonhosted.org/packages/a0/b9/1906bfeb30f2fc13bb39bf7ddb8749784c05faadbd18a21cf141ba37bff2/setuptools_scm-8.1.0-py3-none-any.whl DEBUG No cache entry for: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl DEBUG Installing build requirements: packaging==24.1, pathspec==0.12.1, setuptools-scm==8.1.0, pybind11==2.13.4, scikit-build-core==0.10.3, setuptools==72.2.0 DEBUG Calling `scikit_build_core.build.get_requires_for_build_wheel()` DEBUG Installing extra requirements for build backend DEBUG Solving with installed Python version: 3.13.0 DEBUG Adding direct dependency: scikit-build-core>=0.10.1 DEBUG Adding direct dependency: setuptools-scm>=7 DEBUG Adding direct dependency: pybind11>=2.13 DEBUG Adding direct dependency: cmake>=3.19 DEBUG Adding direct dependency: setuptools-scm* DEBUG Searching for a compatible version of scikit-build-core (>=0.10.1) DEBUG Selecting: scikit-build-core==0.10.3 [compatible] (scikit_build_core-0.10.3-py3-none-any.whl) DEBUG No cache entry for: https://pypi.org/simple/cmake/ DEBUG Adding transitive dependency for scikit-build-core==0.10.3: packaging>=21.3 DEBUG Adding transitive dependency for scikit-build-core==0.10.3: pathspec>=0.10.1 DEBUG Searching for a compatible version of setuptools-scm (>=7) DEBUG Selecting: setuptools-scm==8.1.0 [compatible] (setuptools_scm-8.1.0-py3-none-any.whl) DEBUG Adding transitive dependency for setuptools-scm==8.1.0: packaging>=20 DEBUG Adding transitive dependency for setuptools-scm==8.1.0: setuptools* DEBUG Searching for a compatible version of pybind11 (>=2.13) DEBUG Selecting: pybind11==2.13.4 [compatible] (pybind11-2.13.4-py3-none-any.whl) DEBUG Searching for a compatible version of cmake (>=3.19) DEBUG Selecting: cmake==3.30.2 [compatible] (cmake-3.30.2-py3-none-win_amd64.whl) DEBUG No cache entry for: https://files.pythonhosted.org/packages/5b/34/a6a1030ec63da17e884bf2916f7ff92ad76f730d5e8edafd948b99c05384/cmake-3.30.2-py3-none-win_amd64.whl.metadata DEBUG Searching for a compatible version of packaging (>=21.3) DEBUG Selecting: packaging==24.1 [compatible] (packaging-24.1-py3-none-any.whl) DEBUG Searching for a compatible version of pathspec (>=0.10.1) DEBUG Selecting: pathspec==0.12.1 [compatible] (pathspec-0.12.1-py3-none-any.whl) DEBUG Searching for a compatible version of setuptools (*) DEBUG Selecting: setuptools==72.2.0 [compatible] (setuptools-72.2.0-py3-none-any.whl) DEBUG Tried 7 versions: cmake 1, packaging 1, pathspec 1, pybind11 1, scikit-build-core 1, setuptools 1, setuptools-scm 1 DEBUG Split specific environment resolution took 0.171s DEBUG Installing in cmake==3.30.2, packaging==24.1, pathspec==0.12.1, pybind11==2.13.4, scikit-build-core==0.10.3, setuptools==72.2.0, setuptools-scm==8.1.0 in \\?\C:\Users\burgholzer\AppData\Local\uv\cache\builds-v0\.tmpH6V1at DEBUG Identified uncached requirement: cmake==3.30.2 DEBUG Requirement already installed: packaging==24.1 DEBUG Requirement already installed: pathspec==0.12.1 DEBUG Requirement already installed: pybind11==2.13.4 DEBUG Requirement already installed: scikit-build-core==0.10.3 DEBUG Requirement already installed: setuptools==72.2.0 DEBUG Requirement already installed: setuptools-scm==8.1.0 DEBUG Downloading and building requirement for build: cmake==3.30.2 DEBUG No cache entry for: https://files.pythonhosted.org/packages/5b/34/a6a1030ec63da17e884bf2916f7ff92ad76f730d5e8edafd948b99c05384/cmake-3.30.2-py3-none-win_amd64.whl DEBUG Installing build requirement: cmake==3.30.2 DEBUG Calling `scikit_build_core.build.prepare_metadata_for_build_wheel()` DEBUG Prepared metadata for: mqt-core @ git+https://github.com/cda-tum/mqt-core@shared-libs DEBUG No workspace root found, using project root DEBUG Solving with installed Python version: 3.13.0 DEBUG Adding direct dependency: mqt-core* DEBUG Searching for a compatible version of mqt-core @ git+https://github.com/cda-tum/mqt-core@shared-libs (*) DEBUG Tried 1 versions: mqt-core 1 DEBUG Split specific environment resolution took 0.000s Resolved 1 package in 15.44s DEBUG Identified uncached requirement: mqt-core @ git+https://github.com/cda-tum/mqt-core@shared-libs DEBUG Fetching source distribution from Git: https://github.com/cda-tum/mqt-core DEBUG Acquired lock for `https://github.com/cda-tum/mqt-core` DEBUG Using existing git source `Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("github.com")), port: None, path: "/cda-tum/mqt-core", query: None, fragment: None }` DEBUG Acquired lock for `\\?\C:\Users\burgholzer\AppData\Local\uv\cache\built-wheels-v3\git\0337e042a8704385\748193ab38722efb` DEBUG Building: mqt-core @ git+https://github.com/cda-tum/mqt-core@748193ab38722efb0701b3f8eb90bdab13fd00db INFO Ignoring empty directory DEBUG Solving with installed Python version: 3.13.0 DEBUG Adding direct dependency: scikit-build-core>=0.10.1 DEBUG Adding direct dependency: setuptools-scm>=7 DEBUG Adding direct dependency: pybind11>=2.13 DEBUG Searching for a compatible version of scikit-build-core (>=0.10.1) DEBUG Selecting: scikit-build-core==0.10.3 [compatible] (scikit_build_core-0.10.3-py3-none-any.whl) DEBUG Adding transitive dependency for scikit-build-core==0.10.3: packaging>=21.3 DEBUG Adding transitive dependency for scikit-build-core==0.10.3: pathspec>=0.10.1 DEBUG Searching for a compatible version of setuptools-scm (>=7) DEBUG Selecting: setuptools-scm==8.1.0 [compatible] (setuptools_scm-8.1.0-py3-none-any.whl) DEBUG Adding transitive dependency for setuptools-scm==8.1.0: packaging>=20 DEBUG Adding transitive dependency for setuptools-scm==8.1.0: setuptools* DEBUG Searching for a compatible version of pybind11 (>=2.13) DEBUG Selecting: pybind11==2.13.4 [compatible] (pybind11-2.13.4-py3-none-any.whl) DEBUG Searching for a compatible version of packaging (>=21.3) DEBUG Selecting: packaging==24.1 [compatible] (packaging-24.1-py3-none-any.whl) DEBUG Searching for a compatible version of pathspec (>=0.10.1) DEBUG Selecting: pathspec==0.12.1 [compatible] (pathspec-0.12.1-py3-none-any.whl) DEBUG Searching for a compatible version of setuptools (*) DEBUG Selecting: setuptools==72.2.0 [compatible] (setuptools-72.2.0-py3-none-any.whl) DEBUG Tried 6 versions: packaging 1, pathspec 1, pybind11 1, scikit-build-core 1, setuptools 1, setuptools-scm 1 DEBUG Split specific environment resolution took 0.015s DEBUG Installing in packaging==24.1, pathspec==0.12.1, pybind11==2.13.4, scikit-build-core==0.10.3, setuptools==72.2.0, setuptools-scm==8.1.0 in \\?\C:\Users\burgholzer\AppData\Local\uv\cache\builds-v0\.tmpMJnx4l DEBUG Requirement already cached: packaging==24.1 DEBUG Requirement already cached: pathspec==0.12.1 DEBUG Requirement already cached: pybind11==2.13.4 DEBUG Requirement already cached: scikit-build-core==0.10.3 DEBUG Requirement already cached: setuptools==72.2.0 DEBUG Requirement already cached: setuptools-scm==8.1.0 DEBUG Installing build requirements: packaging==24.1, pathspec==0.12.1, pybind11==2.13.4, scikit-build-core==0.10.3, setuptools==72.2.0, setuptools-scm==8.1.0 DEBUG Calling `scikit_build_core.build.get_requires_for_build_wheel()` DEBUG Installing extra requirements for build backend DEBUG Solving with installed Python version: 3.13.0 DEBUG Adding direct dependency: scikit-build-core>=0.10.1 DEBUG Adding direct dependency: setuptools-scm>=7 DEBUG Adding direct dependency: pybind11>=2.13 DEBUG Adding direct dependency: cmake>=3.19 DEBUG Adding direct dependency: setuptools-scm* DEBUG Searching for a compatible version of scikit-build-core (>=0.10.1) DEBUG Selecting: scikit-build-core==0.10.3 [compatible] (scikit_build_core-0.10.3-py3-none-any.whl) DEBUG Adding transitive dependency for scikit-build-core==0.10.3: packaging>=21.3 DEBUG Adding transitive dependency for scikit-build-core==0.10.3: pathspec>=0.10.1 DEBUG Searching for a compatible version of setuptools-scm (>=7) DEBUG Selecting: setuptools-scm==8.1.0 [compatible] (setuptools_scm-8.1.0-py3-none-any.whl) DEBUG Adding transitive dependency for setuptools-scm==8.1.0: packaging>=20 DEBUG Adding transitive dependency for setuptools-scm==8.1.0: setuptools* DEBUG Searching for a compatible version of pybind11 (>=2.13) DEBUG Selecting: pybind11==2.13.4 [compatible] (pybind11-2.13.4-py3-none-any.whl) DEBUG Searching for a compatible version of cmake (>=3.19) DEBUG Selecting: cmake==3.30.2 [compatible] (cmake-3.30.2-py3-none-win_amd64.whl) DEBUG Searching for a compatible version of packaging (>=21.3) DEBUG Selecting: packaging==24.1 [compatible] (packaging-24.1-py3-none-any.whl) DEBUG Searching for a compatible version of pathspec (>=0.10.1) DEBUG Selecting: pathspec==0.12.1 [compatible] (pathspec-0.12.1-py3-none-any.whl) DEBUG Searching for a compatible version of setuptools (*) DEBUG Selecting: setuptools==72.2.0 [compatible] (setuptools-72.2.0-py3-none-any.whl) DEBUG Tried 7 versions: cmake 1, packaging 1, pathspec 1, pybind11 1, scikit-build-core 1, setuptools 1, setuptools-scm 1 DEBUG Split specific environment resolution took 0.003s DEBUG Installing in cmake==3.30.2, packaging==24.1, pathspec==0.12.1, pybind11==2.13.4, scikit-build-core==0.10.3, setuptools==72.2.0, setuptools-scm==8.1.0 in \\?\C:\Users\burgholzer\AppData\Local\uv\cache\builds-v0\.tmpMJnx4l DEBUG Requirement already cached: cmake==3.30.2 DEBUG Requirement already installed: packaging==24.1 DEBUG Requirement already installed: pathspec==0.12.1 DEBUG Requirement already installed: pybind11==2.13.4 DEBUG Requirement already installed: scikit-build-core==0.10.3 DEBUG Requirement already installed: setuptools==72.2.0 DEBUG Requirement already installed: setuptools-scm==8.1.0 DEBUG Installing build requirement: cmake==3.30.2 DEBUG Calling `scikit_build_core.build.build_wheel("\\\\?\\C:\\Users\\burgholzer\\AppData\\Local\\uv\\cache\\built-wheels-v3\\git\\0337e042a8704385\\748193ab38722efb\\.tmpKusJ8h", {}, None)` DEBUG Finished building: mqt-core @ git+https://github.com/cda-tum/mqt-core@748193ab38722efb0701b3f8eb90bdab13fd00db Prepared 1 package in 2m 12s Installed 1 package in 314ms + mqt-core==2.6.1.dev37+g748193ab (from git+https://github.com/cda-tum/mqt-core@748193ab38722efb0701b3f8eb90bdab13fd00db) ```

Note this is on a freshly cleaned uv cache (to avoid any caching effects) in a fresh virtual environment. Unfortunately, uv currently swallows all build backend output on successful builds. So I am not sure if there is much to make of the above.

Using #include "../<stuff>" is somewhat poor form, public headers should be included via <project/...> (and including from a parent directory in the first place is poor structure). But I'm guessing since it's very specific, this likely isn't the problem. Though I'm slightly curious if we made a branch with absolute references here how the error message would change.

Note that these relative includes are coming from pybind11, e.g., https://github.com/pybind/pybind11/blob/a1d00916b26b187e583f3bce39cd59c3b0652c32/include/pybind11/detail/class.h#L12-L13

By the way, for free-threading on Windows, you have to define Py_GIL_DISABLED on Windows. See https://gitlab.kitware.com/cmake/cmake/-/issues/26016.

Thanks for pointing that out. Would https://github.com/cda-tum/mqt-core/pull/662/commits/f100a2e372c8d1c6e682328f4e9d3e3105307bf1 be an appropriate way of setting that? It seems to not really do anything if I am reading https://github.com/cda-tum/mqt-core/actions/runs/10459567906/job/28963824077?pr=662#step:8:6014 correctly. But I am probably missing something here.

henryiii commented 4 weeks ago

appropriate way of setting that?

It's a C define, not a CMake define. It needs to be set on building any file that includes Python.h.

burgholzer commented 4 weeks ago

It's a C define, not a CMake define. It needs to be set on building any file that includes Python.h.

Gotcha, thanks! Adapted the code accordingly.

I also slightly extended the experimental workflow running 3.13t with some more combinations (Workflow | Log):

henryiii commented 3 weeks ago

I could be wrong, but it seems like the broken one has a //?/ prefix:

-- Disabling Python GIL
-- Found Python: \\?\C:\Users\runneradmin\AppData\Local\uv\cache\builds-v0\.tmp3yRqOT\Scripts\python.exe (found suitable version "3.13.0", minimum required is "3.8") found components: Interpreter Development.Module Development.SABIModule
...
-- Found pybind11: //?/C:/Users/runneradmin/AppData/Local/uv/cache/builds-v0/.tmp3yRqOT/Lib/site-packages/pybind11/include (found version "2.13.4")

While the working ones don't have this:

-- Found Python: C:\Users\runneradmin\AppData\Local\Temp\build-env-3doskkoe\Scripts\python.exe (found suitable version "3.13.0", minimum required is "3.8") found components: Interpreter Development.Module Development.SABIModule
...
-- Found pybind11: C:/Users/runneradmin/AppData/Local/Temp/build-env-3doskkoe/Lib/site-packages/pybind11/include (found version "2.13.4")

Assuming this is treated like a \\?\ prefix, this means the path is allowed to be longer than 256 chars, but it also disables path processing, which might cause the mix of / and \ to trip up the compiler, perhaps? It also might trip up the usage of .., since .. is valid in a path with a \\?\ prefix.

If all this is at least partially true, it might be that uv is adding this prefix in pyvenv.cfg (possibly to support potentially long paths) and it's making it's way and something is either adding .. or / and making an invalid path. May be the wrong direction, but the fact this is showing up on the failing build is suspicious.

Edit: Just putting down where I am in debugging, as I'll be out for a bit. After I come back, I'll boot up a Windows box and play with these ideas a bit.

burgholzer commented 3 weeks ago

Assuming this is treated like a \\?\ prefix, this means the path is allowed to be longer than 256 chars, but it also disables path processing, which might cause the mix of / and \ to trip up the compiler, perhaps? It also might trip up the usage of .., since .. is valid in a path with a \\?\ prefix.

If all this is at least partially true, it might be that uv is adding this prefix in pyvenv.cfg (possibly to support potentially long paths) and it's making it's way and something is either adding .. or / and making an invalid path. May be the wrong direction, but the fact this is showing up on the failing build is suspicious.

You could be onto something here. I can also confirm that a local (successful) cibuildhweel run on Windows with Python 3.11 contains the following in the build log

< -- Found Python: C:\Users\burgholzer\AppData\Local\uv\cache\builds-v0\.tmpSFszTP\Scripts\python.exe (found suitable version "3.11.9", minimum required is "3.8") found components: Interpreter Development.Module Development.SABIModule
...
< -- Pybind11 directory: C:\Users\burgholzer\AppData\Local\uv\cache\builds-v0\.tmpSFszTP\Lib\site-packages\pybind11\share\cmake\pybind11
< -- Python executable: C:\Users\burgholzer\AppData\Local\uv\cache\builds-v0\.tmpSFszTP\Scripts\python.exe
...
< -- Found pybind11: C:/Users/burgholzer/AppData/Local/uv/cache/builds-v0/.tmpSFszTP/Lib/site-packages/pybind11/include (found version "2.13.4")

While the (failing) 3.13t one contains

< -- Found Python: \\?\C:\Users\burgholzer\AppData\Local\uv\cache\builds-v0\.tmpqLWHdD\Scripts\python.exe (found suitable version "3.13.0", minimum required is "3.8") found components: Interpreter Development.Module Development.SABIModule
...
< -- Pybind11 directory: \\?\C:\Users\burgholzer\AppData\Local\uv\cache\builds-v0\.tmpqLWHdD\Lib\site-packages\pybind11\share\cmake\pybind11
< -- Python executable: \\?\C:\Users\burgholzer\AppData\Local\uv\cache\builds-v0\.tmpqLWHdD\Scripts\python.exe
...
< -- Found pybind11: //?/C:/Users/burgholzer/AppData/Local/uv/cache/builds-v0/.tmpqLWHdD/Lib/site-packages/pybind11/include (found version "2.13.4")

I don't quite understand what's so special about the free threading variant that would cause this though. Maybe @charliermarsh has any more insight in this, given how this seems to very much be related to uv in some way.

henryiii commented 3 weeks ago

Played around on a windows box; looks like //?/ still doesn't care about the type of slash, and \\?\ is equivalent, but it does break .. handling (as it is supposed to). I'm guessing the compiler is just adding the the path direction to the include, and not resolving .. itself, so that's why it breaks.

charliermarsh commented 3 weeks ago

We're supposed to be stripping that //? prefix when it's unambiguous (sometimes it's not possible, for complicated reasons that I don't fully understand related to Windows paths). It's not clear to me how it's appearing in one case but not the other...

henryiii commented 3 weeks ago

Could you try this branch of pybind11 without the ..'s?

"pybind11 @ git+https://github.com/henryiii/pybind11@hernyiii/fix/upheader"

?

henryiii commented 3 weeks ago

I wasn't able to easily get python3.13t to get a \\?\ prefixed path in pyvenv.cfg trying it locally with the nuget package. I did run into some bugs with uv python list along the way (I gave up trying to get 3.13rc1 with uv python and used nuget, which is what cibuildwheel does).

burgholzer commented 3 weeks ago

We're supposed to be stripping that //? prefix when it's unambiguous (sometimes it's not possible, for complicated reasons that I don't fully understand related to Windows paths). It's not clear to me how it's appearing in one case but not the other...

Yeah. Really strange. It only seems to be happening on the free threaded variant of Python 3.13 and only when installing a git dependency (that needs to be built) as part of the build process.

burgholzer commented 3 weeks ago

Could you try this branch of pybind11 without the ..'s?

"pybind11 @ git+https://github.com/henryiii/pybind11@hernyiii/fix/upheader"

?

Sure: The respective workflow logs can be found here https://github.com/cda-tum/mqt-qcec/actions/runs/10478228069/job/29021100463?pr=432 (for the cibuildwheel run) and https://github.com/cda-tum/mqt-qcec/actions/runs/10478228069/job/29021098494?pr=432 (for the other experimental runs).

The cibuildwheel run succeeded 🥳 The other run still fails. The major difference between the two runs being that the cibuildwheel one is running with CMAKE_ARGS = "-T ClangCL", which means it is using clang as a compiler. Without passing that flag, the default being used is MSVC as a compiler and that one still fails, although with a different error message that does not involve relative file paths:

C:\Users\runneradmin\AppData\Local\uv\git- v0\checkouts\8e9a633086c3b2cc\300693b3\include\mqt- core\python\pybind11.hpp(5,10): error C1083: Cannot open include file: 'pybind11/pybind11.h': No such file or directory [C:\Users\runneradmin\AppDa ta\Local\uv\git- v0\checkouts\8e9a633086c3b2cc\300693b3\build\Release\src\python\ir\ir.vcxpro j]

The file in question that is importing pybind11 is living here: https://github.com/cda-tum/mqt-core/blob/main/include/mqt-core/python/pybind11.hpp (nothing too fancy about that). The respective CMake target that includes it is here: https://github.com/cda-tum/mqt-core/blob/main/src/python/ir/CMakeLists.txt Although I don't quite think that is relevant.

henryiii commented 3 weeks ago

I do see /external:I "//?/C:/Users/runneradmin/AppData/Local/uv/builds-v0/.tmpdZmHW4/Lib/site- packages/pybind11/include" in the compiler invocation, so it seems like it should work unless MSVC doesn't support long paths.

henryiii commented 3 weeks ago

That might be the case - it's possible (from things like https://developercommunity.visualstudio.com/t/allow-building-running-and-debugging-a-net-applica/351628) that MSVC may not support long paths.

burgholzer commented 3 weeks ago

Ok, I now have a bit of a better testing matrix set up (Workflow, CI Log). All running uv 0.3.0 and the git dependency for pybind11 with the absolute paths.

That might be the case - it's possible (from things like https://developercommunity.visualstudio.com/t/allow-building-running-and-debugging-a-net-applica/351628) that MSVC may not support long paths.

That might explain all the MSVC failures. It still doesn't quite explain the uv - ClangCL failure. Quick googling around also points towards this being an issue with certain paths not being found.

henryiii commented 3 weeks ago

I'm going to go ahead and make a scikit-build-core release with a couple of other fixes, don't think this is a scikit-build-core issue (and can always fix and release if it does turn out to be). It's most likely a mix of a uv issue (not simplifying this when I think it could), and MSVC not understanding these paths.

I'd really be interested to see the contents of the pyvenv.cfg files for a uv environment in this setting!

burgholzer commented 3 weeks ago

It's most likely a mix of a uv issue (not simplifying this when I think it could), and MSVC not understanding these paths.

Agreed. Although it's still kind of puzzling to me that this is only happening on 3.13t and nowhere else. @charliermarsh should I file this as an uv issue to investigate this further?

I'd really be interested to see the contents of the pyvenv.cfg files for a uv environment in this setting!

Where would that file be located in the build? Maybe I could try to extract it somehow. Unfortunately, I probably won't have access to my windows machine for the next two weeks.


Anyway. Once the pybind11 fix is merged and released, there at least is a way forward to build our projects on 3.13t 🚀

charliermarsh commented 3 weeks ago

Please feel free to file a uv issue!

henryiii commented 3 weeks ago

It's in the base of the virtual environments. cat $VIRTUAL_ENV/pyvenv.cfg basically. python -c 'import sys; from pathlib import Path; print(Path(sys.prefix).joinpath("pyvenv.cfg").read_text())' would print it in a cross-platform way, I believe.

henryiii commented 3 weeks ago

Anyway. Once the pybind11 fix is merged and released, there at least is a way forward to build our projects on 3.13t 🚀

pybind11 2.13.5 is out!

burgholzer commented 3 weeks ago

Anyway. Once the pybind11 fix is merged and released, there at least is a way forward to build our projects on 3.13t 🚀

pybind11 2.13.5 is out!

Nice! Thanks for the quick release.

I'll try to get to the last two comments in this thread in the next couple of days (always a bit hard to plan on vacation).

burgholzer commented 2 weeks ago

Please feel free to file a uv issue!

x-ref: filed https://github.com/astral-sh/uv/issues/6948

burgholzer commented 2 weeks ago

It's in the base of the virtual environments. cat $VIRTUAL_ENV/pyvenv.cfg basically. python -c 'import sys; from pathlib import Path; print(Path(sys.prefix).joinpath("pyvenv.cfg").read_text())' would print it in a cross-platform way, I believe.

Thanks for the tip. Ran that locally on my Windows VM to get the pyenv.cfg of the venv that the mqt-core build time dependency is being built in and it prints

home = C:\Users\burgholzer\AppData\Local\pypa\cibuildwheel\Cache\nuget-cpython\python-freethreaded.3.13.0-rc1\tools
implementation = CPython
uv = 0.4.2
version_info = 3.13.0rc1
include-system-site-packages = false
relocatable = false

The Python_EXECUTABLE to print this was \\?\C:\Users\burgholzer\AppData\Local\uv\cache\builds-v0\.tmpRmcSyJ\Scripts\python.exe

For the venv that runs the isolated build of mqt-qcec the pyenv.cfg looks like this

home = C:\Users\burgholzer\AppData\Local\pypa\cibuildwheel\Cache\nuget-cpython\python-freethreaded.3.13.0-rc1\tools
include-system-site-packages = false
version = 3.13.0
executable = C:\Users\burgholzer\AppData\Local\Temp\cibw-run-os7xk_t1\cp313t-win_amd64\build\venv\Scripts\python.exe
command = C:\Users\burgholzer\AppData\Local\Temp\cibw-run-os7xk_t1\cp313t-win_amd64\build\venv\Scripts\python.exe -m venv --without-pip --without-scm-ignore-files C:\Users\burgholzer\AppData\Local\Temp\build-env-d4_sgdys

With Python_EXECUTABLE being C:\Users\burgholzer\AppData\Local\Temp\build-env-d4_sgdys\Scripts\python.exe