From b4a22b6d5ef2472e416f1209d539c9b3c8266653 Mon Sep 17 00:00:00 2001 From: Grzegorz Bokota Date: Wed, 21 Feb 2024 00:43:04 +0100 Subject: [PATCH 01/44] add information about potential problem --- docs/faq.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/faq.md b/docs/faq.md index 807ff2b2e..555f4bf48 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -355,6 +355,13 @@ sh "/Applications/Python 3.8/Install Certificates.command" Then cibuildwheel will detect that it's installed and use it instead. However, you probably don't want to build x86_64 wheels on this Python, unless you're happy with them only supporting macOS 11+. +### macOS: Library dependencies do not satisfy target MacOS + +Since delocate 0.10.8 there is added verification that the library binary dependencies match the target macOS version. This is to prevent the situation where a wheel platform tag is lower than the actual minimum macOS version required by the library. To resolve this error you need to build the library to the same macOS version as the target wheel (for example using `MACOSX_DEPLOYMENT_TARGET` environment variable). +Alternatively, you could set a higher `MACOSX_DEPLOYMENT_TARGET` to drop support for older macOS versions. + +This error may happen when you install a library using a package manager like Homebrew, which compiles the library for the macOS version of the build machine. This is not suitable for wheels, as the library will only work on the same macOS version as the build machine. You should compile the library yourself, or use a precompiled binary that matches the target macOS version. + ### Windows: 'ImportError: DLL load failed: The specific module could not be found' Visual Studio and MSVC link the compiled binary wheels to the Microsoft Visual C++ Runtime. Normally, the C parts of the runtime are included with Python, but the C++ components are not. When compiling modules using C++, it is possible users will run into problems on systems that do not have the full set of runtime libraries installed. The solution is to ask users to download the corresponding Visual C++ Redistributable from the [Microsoft website](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) and install it. From 86ed421c1b62cff6c22dbc566969dd38988c3088 Mon Sep 17 00:00:00 2001 From: Grzegorz Bokota Date: Wed, 21 Feb 2024 11:10:58 +0100 Subject: [PATCH 02/44] Update docs/faq.md Co-authored-by: Joe Rickerby --- docs/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/faq.md b/docs/faq.md index 555f4bf48..6cec6d26e 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -358,7 +358,7 @@ Then cibuildwheel will detect that it's installed and use it instead. However, y ### macOS: Library dependencies do not satisfy target MacOS Since delocate 0.10.8 there is added verification that the library binary dependencies match the target macOS version. This is to prevent the situation where a wheel platform tag is lower than the actual minimum macOS version required by the library. To resolve this error you need to build the library to the same macOS version as the target wheel (for example using `MACOSX_DEPLOYMENT_TARGET` environment variable). -Alternatively, you could set a higher `MACOSX_DEPLOYMENT_TARGET` to drop support for older macOS versions. +Alternatively, you could set `MACOSX_DEPLOYMENT_TARGET` in `CIBW_ENVIRONMENT` to correctly label the wheel as incompatible with older macOS versions. This error may happen when you install a library using a package manager like Homebrew, which compiles the library for the macOS version of the build machine. This is not suitable for wheels, as the library will only work on the same macOS version as the build machine. You should compile the library yourself, or use a precompiled binary that matches the target macOS version. From 90c14a333f410212a0d0afedffe1b961b1df1e2f Mon Sep 17 00:00:00 2001 From: Joe Rickerby Date: Mon, 11 Mar 2024 21:24:21 +0000 Subject: [PATCH 03/44] Improve version push command --- bin/bump_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/bump_version.py b/bin/bump_version.py index cf0727db7..a0ced2b19 100755 --- a/bin/bump_version.py +++ b/bin/bump_version.py @@ -181,7 +181,7 @@ def bump_version() -> None: print() print("Push the new version to GitHub with:") - print(" git push && git push --tags") + print(f" git push && git push origin v{new_version}") print() release_url = "https://github.com/pypa/cibuildwheel/releases/new?" + urllib.parse.urlencode( From 3eb6dbbdd366b1e81ca3a84fc0df44391739ccd8 Mon Sep 17 00:00:00 2001 From: Joe Rickerby Date: Mon, 11 Mar 2024 21:28:09 +0000 Subject: [PATCH 04/44] Fix typo in changelog --- README.md | 2 +- docs/changelog.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 548dc83f4..118a75861 100644 --- a/README.md +++ b/README.md @@ -214,7 +214,7 @@ _11 March 2024_ - 🌟 Adds the ability to inherit configuration in TOML overrides. This makes certain configurations much simpler. If you're overriding an option like `before-build` or `environment`, and you just want to add an extra command or environment variable, you can just append (or prepend) to the previous config. See [the docs](https://cibuildwheel.pypa.io/en/stable/options/#inherit) for more information. (#1730) - 🌟 Adds official support for native arm64 macOS GitHub runners. To use them, just specify `macos-14` as an `os` of your job in your workflow file. You can also keep `macos-13` in your build matrix to build x86_64. Check out the new [GitHub Actions example config](https://cibuildwheel.pypa.io/en/stable/setup/#github-actions). -- ✨ You no longer need to specify `--platform` to run cibuildwheel locally! Instead it will your platform automatically. This was a safety feature, no longer necessary. (#1727) +- ✨ You no longer need to specify `--platform` to run cibuildwheel locally! Instead it will detect your platform automatically. This was a safety feature, no longer necessary. (#1727) - πŸ›  Removed setuptools and wheel pinned versions. This only affects old-style projects without a `pyproject.toml`, projects with `pyproject.toml` are already getting fresh versions of their `build-system.requires` installed into an isolated environment. (#1725) - πŸ›  Improve how the GitHub Action passes arguments (#1757) - πŸ›  Remove a system-wide install of pipx in the GitHub Action (#1745) diff --git a/docs/changelog.md b/docs/changelog.md index 8275eeffe..8b9b53e7e 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -10,7 +10,7 @@ _11 March 2024_ - 🌟 Adds the ability to inherit configuration in TOML overrides. This makes certain configurations much simpler. If you're overriding an option like `before-build` or `environment`, and you just want to add an extra command or environment variable, you can just append (or prepend) to the previous config. See [the docs](https://cibuildwheel.pypa.io/en/stable/options/#inherit) for more information. (#1730) - 🌟 Adds official support for native arm64 macOS GitHub runners. To use them, just specify `macos-14` as an `os` of your job in your workflow file. You can also keep `macos-13` in your build matrix to build x86_64. Check out the new [GitHub Actions example config](https://cibuildwheel.pypa.io/en/stable/setup/#github-actions). -- ✨ You no longer need to specify `--platform` to run cibuildwheel locally! Instead it will your platform automatically. This was a safety feature, no longer necessary. (#1727) +- ✨ You no longer need to specify `--platform` to run cibuildwheel locally! Instead it will detect your platform automatically. This was a safety feature, no longer necessary. (#1727) - πŸ›  Removed setuptools and wheel pinned versions. This only affects old-style projects without a `pyproject.toml`, projects with `pyproject.toml` are already getting fresh versions of their `build-system.requires` installed into an isolated environment. (#1725) - πŸ›  Improve how the GitHub Action passes arguments (#1757) - πŸ›  Remove a system-wide install of pipx in the GitHub Action (#1745) From b3c4d37885700c89a65e7d59d349cbfe943cbf37 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Tue, 12 Mar 2024 11:25:23 -0400 Subject: [PATCH 05/44] fix(schema): use $refs instead of defines (#1788) --- bin/generate_schema.py | 32 +++++++++---------- .../resources/cibuildwheel.schema.json | 32 +++++++++---------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/bin/generate_schema.py b/bin/generate_schema.py index a7007886a..39012cdcc 100755 --- a/bin/generate_schema.py +++ b/bin/generate_schema.py @@ -12,12 +12,9 @@ args = parser.parse_args() starter = """ -$id: https://github.com/pypa/cibuildwheel/blob/main/cibuildwheel/resources/cibuildwheel.schema.json $schema: http://json-schema.org/draft-07/schema -additionalProperties: false -description: cibuildwheel's settings. -type: object -defines: +$id: https://github.com/pypa/cibuildwheel/blob/main/cibuildwheel/resources/cibuildwheel.schema.json +$defs: inherit: enum: - none @@ -25,6 +22,9 @@ - append default: none description: How to inherit the parent's value. +additionalProperties: false +description: cibuildwheel's settings. +type: object properties: archs: description: Change the architectures built on your machine by default. @@ -223,17 +223,17 @@ type: object additionalProperties: false properties: - before-all: {"$ref": "#/defines/inherit"} - before-build: {"$ref": "#/defines/inherit"} - before-test: {"$ref": "#/defines/inherit"} - config-settings: {"$ref": "#/defines/inherit"} - container-engine: {"$ref": "#/defines/inherit"} - environment: {"$ref": "#/defines/inherit"} - environment-pass: {"$ref": "#/defines/inherit"} - repair-wheel-command: {"$ref": "#/defines/inherit"} - test-command: {"$ref": "#/defines/inherit"} - test-extras: {"$ref": "#/defines/inherit"} - test-requires: {"$ref": "#/defines/inherit"} + before-all: {"$ref": "#/$defs/inherit"} + before-build: {"$ref": "#/$defs/inherit"} + before-test: {"$ref": "#/$defs/inherit"} + config-settings: {"$ref": "#/$defs/inherit"} + container-engine: {"$ref": "#/$defs/inherit"} + environment: {"$ref": "#/$defs/inherit"} + environment-pass: {"$ref": "#/$defs/inherit"} + repair-wheel-command: {"$ref": "#/$defs/inherit"} + test-command: {"$ref": "#/$defs/inherit"} + test-extras: {"$ref": "#/$defs/inherit"} + test-requires: {"$ref": "#/$defs/inherit"} """ ) diff --git a/cibuildwheel/resources/cibuildwheel.schema.json b/cibuildwheel/resources/cibuildwheel.schema.json index 1dd890990..25cf64baa 100644 --- a/cibuildwheel/resources/cibuildwheel.schema.json +++ b/cibuildwheel/resources/cibuildwheel.schema.json @@ -1,10 +1,7 @@ { - "$id": "https://github.com/pypa/cibuildwheel/blob/main/cibuildwheel/resources/cibuildwheel.schema.json", "$schema": "http://json-schema.org/draft-07/schema", - "additionalProperties": false, - "description": "cibuildwheel's settings.", - "type": "object", - "defines": { + "$id": "https://github.com/pypa/cibuildwheel/blob/main/cibuildwheel/resources/cibuildwheel.schema.json", + "$defs": { "inherit": { "enum": [ "none", @@ -15,6 +12,9 @@ "description": "How to inherit the parent's value." } }, + "additionalProperties": false, + "description": "cibuildwheel's settings.", + "type": "object", "properties": { "archs": { "description": "Change the architectures built on your machine by default.", @@ -439,37 +439,37 @@ "additionalProperties": false, "properties": { "before-all": { - "$ref": "#/defines/inherit" + "$ref": "#/$defs/inherit" }, "before-build": { - "$ref": "#/defines/inherit" + "$ref": "#/$defs/inherit" }, "before-test": { - "$ref": "#/defines/inherit" + "$ref": "#/$defs/inherit" }, "config-settings": { - "$ref": "#/defines/inherit" + "$ref": "#/$defs/inherit" }, "container-engine": { - "$ref": "#/defines/inherit" + "$ref": "#/$defs/inherit" }, "environment": { - "$ref": "#/defines/inherit" + "$ref": "#/$defs/inherit" }, "environment-pass": { - "$ref": "#/defines/inherit" + "$ref": "#/$defs/inherit" }, "repair-wheel-command": { - "$ref": "#/defines/inherit" + "$ref": "#/$defs/inherit" }, "test-command": { - "$ref": "#/defines/inherit" + "$ref": "#/$defs/inherit" }, "test-extras": { - "$ref": "#/defines/inherit" + "$ref": "#/$defs/inherit" }, "test-requires": { - "$ref": "#/defines/inherit" + "$ref": "#/$defs/inherit" } } }, From 510382886de7114c5f109007d314d74f04b180a4 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 15 Mar 2024 13:27:39 -0400 Subject: [PATCH 06/44] [pre-commit.ci] pre-commit autoupdate (#1791) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [pre-commit.ci] pre-commit autoupdate updates: - [github.com/astral-sh/ruff-pre-commit: v0.2.2 β†’ v0.3.2](https://github.com/astral-sh/ruff-pre-commit/compare/v0.2.2...v0.3.2) - [github.com/pre-commit/mirrors-mypy: v1.8.0 β†’ v1.9.0](https://github.com/pre-commit/mirrors-mypy/compare/v1.8.0...v1.9.0) * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- bin/generate_schema.py | 6 +++--- bin/inspect_all_known_projects.py | 1 - bin/update_virtualenv.py | 6 +++--- cibuildwheel/__main__.py | 6 ++---- cibuildwheel/extra.py | 3 +-- cibuildwheel/typing.py | 3 +-- cibuildwheel/util.py | 6 ++---- 8 files changed, 14 insertions(+), 21 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5689c826e..4ec3cc6b5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,7 +14,7 @@ repos: - id: trailing-whitespace - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.2.2 + rev: v0.3.2 hooks: - id: ruff args: ["--fix", "--show-fixes"] @@ -27,7 +27,7 @@ repos: args: [--include-version-classifiers, --min-py-version=3.8, --max-py-version=3.12] - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.8.0 + rev: v1.9.0 hooks: - id: mypy name: mypy 3.8 on cibuildwheel/ diff --git a/bin/generate_schema.py b/bin/generate_schema.py index 39012cdcc..7a9954a93 100755 --- a/bin/generate_schema.py +++ b/bin/generate_schema.py @@ -290,8 +290,8 @@ def as_object(d: dict[str, Any]) -> dict[str, Any]: if args.schemastore: schema["$id"] = "https://json.schemastore.org/partial-cibuildwheel.json" schema["$schema"] = "http://json-schema.org/draft-07/schema#" - schema[ - "description" - ] = "cibuildwheel's toml file, generated with ./bin/generate_schema.py --schemastore from cibuildwheel." + schema["description"] = ( + "cibuildwheel's toml file, generated with ./bin/generate_schema.py --schemastore from cibuildwheel." + ) print(json.dumps(schema, indent=2)) diff --git a/bin/inspect_all_known_projects.py b/bin/inspect_all_known_projects.py index a2c68a6bd..ad2c63655 100755 --- a/bin/inspect_all_known_projects.py +++ b/bin/inspect_all_known_projects.py @@ -11,7 +11,6 @@ the results without the `--online` setting. """ - from __future__ import annotations import ast diff --git a/bin/update_virtualenv.py b/bin/update_virtualenv.py index d5c86d25c..a18c5f7db 100755 --- a/bin/update_virtualenv.py +++ b/bin/update_virtualenv.py @@ -25,9 +25,9 @@ RESOURCES_DIR: Final[Path] = DIR / "cibuildwheel/resources" GET_VIRTUALENV_GITHUB: Final[str] = "https://github.com/pypa/get-virtualenv" -GET_VIRTUALENV_URL_TEMPLATE: Final[ - str -] = f"{GET_VIRTUALENV_GITHUB}/blob/{{version}}/public/virtualenv.pyz?raw=true" +GET_VIRTUALENV_URL_TEMPLATE: Final[str] = ( + f"{GET_VIRTUALENV_GITHUB}/blob/{{version}}/public/virtualenv.pyz?raw=true" +) @dataclass(frozen=True, order=True) diff --git a/cibuildwheel/__main__.py b/cibuildwheel/__main__.py index 170405a69..9e0f75b8e 100644 --- a/cibuildwheel/__main__.py +++ b/cibuildwheel/__main__.py @@ -233,11 +233,9 @@ class PlatformModule(Protocol): # is applied to a module def get_python_configurations( self, build_selector: BuildSelector, architectures: Set[Architecture] - ) -> Sequence[GenericPythonConfiguration]: - ... + ) -> Sequence[GenericPythonConfiguration]: ... - def build(self, options: Options, tmp_path: Path) -> None: - ... + def build(self, options: Options, tmp_path: Path) -> None: ... # pylint: disable-next=inconsistent-return-statements diff --git a/cibuildwheel/extra.py b/cibuildwheel/extra.py index 9e8ae8ecf..9cb6dd55b 100644 --- a/cibuildwheel/extra.py +++ b/cibuildwheel/extra.py @@ -12,8 +12,7 @@ class Printable(Protocol): - def __str__(self) -> str: - ... + def __str__(self) -> str: ... def dump_python_configurations( diff --git a/cibuildwheel/typing.py b/cibuildwheel/typing.py index 870cf9fcc..3fe480aa6 100644 --- a/cibuildwheel/typing.py +++ b/cibuildwheel/typing.py @@ -28,5 +28,4 @@ class GenericPythonConfiguration(Protocol): @property - def identifier(self) -> str: - ... + def identifier(self) -> str: ... diff --git a/cibuildwheel/util.py b/cibuildwheel/util.py index 18900fc3d..fb334257f 100644 --- a/cibuildwheel/util.py +++ b/cibuildwheel/util.py @@ -91,8 +91,7 @@ def call( env: Mapping[str, str] | None = None, cwd: PathOrStr | None = None, capture_stdout: Literal[False] = ..., -) -> None: - ... +) -> None: ... @typing.overload @@ -101,8 +100,7 @@ def call( env: Mapping[str, str] | None = None, cwd: PathOrStr | None = None, capture_stdout: Literal[True], -) -> str: - ... +) -> str: ... def call( From a8d1defda9f1196489ffe8cb2e6e5d912f690f14 Mon Sep 17 00:00:00 2001 From: "cibuildwheel-bot[bot]" <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> Date: Mon, 18 Mar 2024 06:27:40 -0400 Subject: [PATCH 07/44] [Bot] Update dependencies (#1794) Update dependencies Co-authored-by: cibuildwheel-bot[bot] <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> --- .../resources/constraints-python38.txt | 2 +- .../resources/constraints-python39.txt | 2 +- .../resources/pinned_docker_images.cfg | 48 +++++++++---------- docs/working-examples.md | 8 ++-- 4 files changed, 30 insertions(+), 30 deletions(-) diff --git a/cibuildwheel/resources/constraints-python38.txt b/cibuildwheel/resources/constraints-python38.txt index 7c3891427..d8a3de47b 100644 --- a/cibuildwheel/resources/constraints-python38.txt +++ b/cibuildwheel/resources/constraints-python38.txt @@ -30,7 +30,7 @@ typing-extensions==4.10.0 # via delocate virtualenv==20.25.1 # via -r cibuildwheel/resources/constraints.in -zipp==3.17.0 +zipp==3.18.1 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: diff --git a/cibuildwheel/resources/constraints-python39.txt b/cibuildwheel/resources/constraints-python39.txt index 969195612..a5aba2465 100644 --- a/cibuildwheel/resources/constraints-python39.txt +++ b/cibuildwheel/resources/constraints-python39.txt @@ -30,7 +30,7 @@ typing-extensions==4.10.0 # via delocate virtualenv==20.25.1 # via -r cibuildwheel/resources/constraints.in -zipp==3.17.0 +zipp==3.18.1 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: diff --git a/cibuildwheel/resources/pinned_docker_images.cfg b/cibuildwheel/resources/pinned_docker_images.cfg index a9fc2ae3d..462053f7f 100644 --- a/cibuildwheel/resources/pinned_docker_images.cfg +++ b/cibuildwheel/resources/pinned_docker_images.cfg @@ -1,54 +1,54 @@ [x86_64] manylinux1 = quay.io/pypa/manylinux1_x86_64:2024-03-10-b85029d manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-03-10-4935fcc +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-03-13-062cde0 manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-03-10-4935fcc -musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024-03-10-4935fcc -musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024-03-10-4935fcc +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-03-13-062cde0 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024-03-13-062cde0 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024-03-13-062cde0 [i686] manylinux1 = quay.io/pypa/manylinux1_i686:2024-03-10-b85029d manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-03-10-4935fcc +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-03-13-062cde0 manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024-03-10-4935fcc -musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024-03-10-4935fcc +musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024-03-13-062cde0 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024-03-13-062cde0 [pypy_x86_64] manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-03-10-4935fcc +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-03-13-062cde0 manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-03-10-4935fcc +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-03-13-062cde0 [pypy_i686] manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-03-10-4935fcc +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-03-13-062cde0 manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 [aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-03-10-4935fcc +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-03-13-062cde0 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-03-10-4935fcc -musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024-03-10-4935fcc -musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024-03-10-4935fcc +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-03-13-062cde0 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024-03-13-062cde0 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024-03-13-062cde0 [ppc64le] -manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024-03-10-4935fcc +manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024-03-13-062cde0 manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024-03-10-4935fcc -musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024-03-10-4935fcc -musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024-03-10-4935fcc +manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024-03-13-062cde0 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024-03-13-062cde0 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024-03-13-062cde0 [s390x] -manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024-03-10-4935fcc +manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024-03-13-062cde0 manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024-03-10-4935fcc -musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024-03-10-4935fcc -musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024-03-10-4935fcc +manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024-03-13-062cde0 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024-03-13-062cde0 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024-03-13-062cde0 [pypy_aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-03-10-4935fcc +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-03-13-062cde0 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-03-10-4935fcc +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-03-13-062cde0 diff --git a/docs/working-examples.md b/docs/working-examples.md index 2d5c6b66d..27f5844ea 100644 --- a/docs/working-examples.md +++ b/docs/working-examples.md @@ -76,13 +76,13 @@ title: Working examples | [KDEpy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Kernel Density Estimation in Python | | [python-rapidjson][] | ![travisci icon][] ![gitlab icon][] ![appveyor icon][] | ![windows icon][] ![linux icon][] | Python wrapper around rapidjson | | [dd-trace-py][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Uses custom alternate arch emulation on GitHub | -| [python-snappy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Python bindings for the snappy google library | | [tgcalls][] | ![github icon][] | ![apple icon][] ![windows icon][] | Python `pybind11` binding to Telegram's WebRTC library with third party dependencies like `OpenSSL`, `MozJPEG`, `FFmpeg`, etc. | +| [python-snappy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Python bindings for the snappy google library | | [pybind11 python_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a Python-based build system | | [sourmash][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Quickly search, compare, and analyze genomic and metagenomic data sets. | | [abess][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A fast best-subset selection library. It uses cibuildwheel to build a large project with C++ extensions. | -| [matrixprofile][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python 3 library making time series data mining tasks, utilizing matrix profile algorithms, accessible to everyone. | | [cyvcf2][] | ![github icon][] | ![apple icon][] ![linux icon][] | cython + htslib == fast VCF and BCF processing | +| [matrixprofile][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python 3 library making time series data mining tasks, utilizing matrix profile algorithms, accessible to everyone. | | [jq.py][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | Python bindings for jq | | [iminuit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Jupyter-friendly Python interface for C++ MINUIT2 | | [Tokenizer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast and customizable text tokenization library with BPE and SentencePiece support | @@ -185,13 +185,13 @@ title: Working examples [KDEpy]: https://github.com/tommyod/KDEpy [python-rapidjson]: https://github.com/python-rapidjson/python-rapidjson [dd-trace-py]: https://github.com/DataDog/dd-trace-py -[python-snappy]: https://github.com/andrix/python-snappy [tgcalls]: https://github.com/MarshalX/tgcalls +[python-snappy]: https://github.com/andrix/python-snappy [pybind11 python_example]: https://github.com/pybind/python_example [sourmash]: https://github.com/dib-lab/sourmash [abess]: https://github.com/abess-team/abess -[matrixprofile]: https://github.com/matrix-profile-foundation/matrixprofile [cyvcf2]: https://github.com/brentp/cyvcf2 +[matrixprofile]: https://github.com/matrix-profile-foundation/matrixprofile [jq.py]: https://github.com/mwilliamson/jq.py [iminuit]: https://github.com/scikit-hep/iminuit [Tokenizer]: https://github.com/OpenNMT/Tokenizer From 3f00a2fdedee1d6128f025a27745cbae8d364c22 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 18 Mar 2024 19:44:26 +0000 Subject: [PATCH 08/44] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.3.2 β†’ v0.3.3](https://github.com/astral-sh/ruff-pre-commit/compare/v0.3.2...v0.3.3) - [github.com/shellcheck-py/shellcheck-py: v0.9.0.6 β†’ v0.10.0.1](https://github.com/shellcheck-py/shellcheck-py/compare/v0.9.0.6...v0.10.0.1) --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4ec3cc6b5..cbf26d66a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,7 +14,7 @@ repos: - id: trailing-whitespace - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.3.2 + rev: v0.3.3 hooks: - id: ruff args: ["--fix", "--show-fixes"] @@ -54,7 +54,7 @@ repos: additional_dependencies: *mypy-dependencies - repo: https://github.com/shellcheck-py/shellcheck-py - rev: v0.9.0.6 + rev: v0.10.0.1 hooks: - id: shellcheck From 312cf1573e455a4820bb482757e9bc87d3fae84e Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Thu, 21 Mar 2024 15:41:31 -0400 Subject: [PATCH 09/44] chore: use uv pip compile (#1778) --- cibuildwheel/options.py | 1 + .../resources/constraints-python310.txt | 20 ++---- .../resources/constraints-python311.txt | 16 +---- .../resources/constraints-python312.txt | 16 +---- .../resources/constraints-python37.txt | 16 +---- .../resources/constraints-python38.txt | 18 ++--- .../resources/constraints-python39.txt | 18 ++--- cibuildwheel/resources/constraints.txt | 16 +---- noxfile.py | 69 +++++++++---------- 9 files changed, 60 insertions(+), 130 deletions(-) diff --git a/cibuildwheel/options.py b/cibuildwheel/options.py index a69664554..519917d87 100644 --- a/cibuildwheel/options.py +++ b/cibuildwheel/options.py @@ -215,6 +215,7 @@ def _resolve_cascade( return result +# pylint: disable-next=inconsistent-return-statements def _merge_values(before: str | None, after: str, rule: InheritRule, merge_sep: str | None) -> str: if rule == InheritRule.NONE: return after diff --git a/cibuildwheel/resources/constraints-python310.txt b/cibuildwheel/resources/constraints-python310.txt index 2c8f5b4cb..0600b10e0 100644 --- a/cibuildwheel/resources/constraints-python310.txt +++ b/cibuildwheel/resources/constraints-python310.txt @@ -1,21 +1,18 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# nox -s update_constraints-3.10 -# +# This file was autogenerated by uv via the following command: +# nox -s update_constraints build==1.1.1 - # via -r cibuildwheel/resources/constraints.in delocate==0.10.7 - # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv filelock==3.13.1 # via virtualenv +importlib-metadata==7.1.0 + # via build packaging==24.0 # via # build # delocate +pip==24.0 platformdirs==4.2.0 # via virtualenv pyproject-hooks==1.0.0 @@ -27,8 +24,5 @@ tomli==2.0.1 typing-extensions==4.10.0 # via delocate virtualenv==20.25.1 - # via -r cibuildwheel/resources/constraints.in - -# The following packages are considered to be unsafe in a requirements file: -pip==24.0 - # via -r cibuildwheel/resources/constraints.in +zipp==3.18.1 + # via importlib-metadata diff --git a/cibuildwheel/resources/constraints-python311.txt b/cibuildwheel/resources/constraints-python311.txt index 8ecebf837..d8a5a79f7 100644 --- a/cibuildwheel/resources/constraints-python311.txt +++ b/cibuildwheel/resources/constraints-python311.txt @@ -1,13 +1,7 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# nox -s update_constraints-3.11 -# +# This file was autogenerated by uv via the following command: +# nox -s update_constraints build==1.1.1 - # via -r cibuildwheel/resources/constraints.in delocate==0.10.7 - # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv filelock==3.13.1 @@ -16,6 +10,7 @@ packaging==24.0 # via # build # delocate +pip==24.0 platformdirs==4.2.0 # via virtualenv pyproject-hooks==1.0.0 @@ -23,8 +18,3 @@ pyproject-hooks==1.0.0 typing-extensions==4.10.0 # via delocate virtualenv==20.25.1 - # via -r cibuildwheel/resources/constraints.in - -# The following packages are considered to be unsafe in a requirements file: -pip==24.0 - # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python312.txt b/cibuildwheel/resources/constraints-python312.txt index 596c8641b..d8a5a79f7 100644 --- a/cibuildwheel/resources/constraints-python312.txt +++ b/cibuildwheel/resources/constraints-python312.txt @@ -1,13 +1,7 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# nox -s update_constraints-3.12 -# +# This file was autogenerated by uv via the following command: +# nox -s update_constraints build==1.1.1 - # via -r cibuildwheel/resources/constraints.in delocate==0.10.7 - # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv filelock==3.13.1 @@ -16,6 +10,7 @@ packaging==24.0 # via # build # delocate +pip==24.0 platformdirs==4.2.0 # via virtualenv pyproject-hooks==1.0.0 @@ -23,8 +18,3 @@ pyproject-hooks==1.0.0 typing-extensions==4.10.0 # via delocate virtualenv==20.25.1 - # via -r cibuildwheel/resources/constraints.in - -# The following packages are considered to be unsafe in a requirements file: -pip==24.0 - # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python37.txt b/cibuildwheel/resources/constraints-python37.txt index aa4731e83..273c799f5 100644 --- a/cibuildwheel/resources/constraints-python37.txt +++ b/cibuildwheel/resources/constraints-python37.txt @@ -1,13 +1,7 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# nox -s update_constraints-3.7 -# +# This file was autogenerated by uv via the following command: +# nox -s update_constraints build==1.1.1 - # via -r cibuildwheel/resources/constraints.in delocate==0.10.7 - # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv filelock==3.12.2 @@ -20,6 +14,7 @@ packaging==24.0 # via # build # delocate +pip==24.0 platformdirs==4.0.0 # via virtualenv pyproject-hooks==1.0.0 @@ -34,10 +29,5 @@ typing-extensions==4.7.1 # importlib-metadata # platformdirs virtualenv==20.25.1 - # via -r cibuildwheel/resources/constraints.in zipp==3.15.0 # via importlib-metadata - -# The following packages are considered to be unsafe in a requirements file: -pip==24.0 - # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python38.txt b/cibuildwheel/resources/constraints-python38.txt index d8a3de47b..0600b10e0 100644 --- a/cibuildwheel/resources/constraints-python38.txt +++ b/cibuildwheel/resources/constraints-python38.txt @@ -1,23 +1,18 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# nox -s update_constraints-3.8 -# +# This file was autogenerated by uv via the following command: +# nox -s update_constraints build==1.1.1 - # via -r cibuildwheel/resources/constraints.in delocate==0.10.7 - # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv filelock==3.13.1 # via virtualenv -importlib-metadata==7.0.2 +importlib-metadata==7.1.0 # via build packaging==24.0 # via # build # delocate +pip==24.0 platformdirs==4.2.0 # via virtualenv pyproject-hooks==1.0.0 @@ -29,10 +24,5 @@ tomli==2.0.1 typing-extensions==4.10.0 # via delocate virtualenv==20.25.1 - # via -r cibuildwheel/resources/constraints.in zipp==3.18.1 # via importlib-metadata - -# The following packages are considered to be unsafe in a requirements file: -pip==24.0 - # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python39.txt b/cibuildwheel/resources/constraints-python39.txt index a5aba2465..0600b10e0 100644 --- a/cibuildwheel/resources/constraints-python39.txt +++ b/cibuildwheel/resources/constraints-python39.txt @@ -1,23 +1,18 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# nox -s update_constraints-3.9 -# +# This file was autogenerated by uv via the following command: +# nox -s update_constraints build==1.1.1 - # via -r cibuildwheel/resources/constraints.in delocate==0.10.7 - # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv filelock==3.13.1 # via virtualenv -importlib-metadata==7.0.2 +importlib-metadata==7.1.0 # via build packaging==24.0 # via # build # delocate +pip==24.0 platformdirs==4.2.0 # via virtualenv pyproject-hooks==1.0.0 @@ -29,10 +24,5 @@ tomli==2.0.1 typing-extensions==4.10.0 # via delocate virtualenv==20.25.1 - # via -r cibuildwheel/resources/constraints.in zipp==3.18.1 # via importlib-metadata - -# The following packages are considered to be unsafe in a requirements file: -pip==24.0 - # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints.txt b/cibuildwheel/resources/constraints.txt index 596c8641b..d8a5a79f7 100644 --- a/cibuildwheel/resources/constraints.txt +++ b/cibuildwheel/resources/constraints.txt @@ -1,13 +1,7 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# nox -s update_constraints-3.12 -# +# This file was autogenerated by uv via the following command: +# nox -s update_constraints build==1.1.1 - # via -r cibuildwheel/resources/constraints.in delocate==0.10.7 - # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv filelock==3.13.1 @@ -16,6 +10,7 @@ packaging==24.0 # via # build # delocate +pip==24.0 platformdirs==4.2.0 # via virtualenv pyproject-hooks==1.0.0 @@ -23,8 +18,3 @@ pyproject-hooks==1.0.0 typing-extensions==4.10.0 # via delocate virtualenv==20.25.1 - # via -r cibuildwheel/resources/constraints.in - -# The following packages are considered to be unsafe in a requirements file: -pip==24.0 - # via -r cibuildwheel/resources/constraints.in diff --git a/noxfile.py b/noxfile.py index 8747b91dd..19dbed42b 100644 --- a/noxfile.py +++ b/noxfile.py @@ -9,8 +9,6 @@ nox.options.sessions = ["lint", "pylint", "check_manifest", "tests"] -PYTHON_ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"] - DIR = Path(__file__).parent.resolve() if os.environ.get("CI", None): @@ -23,7 +21,7 @@ def tests(session: nox.Session) -> None: Run the unit and regular tests. """ unit_test_args = ["--run-docker"] if sys.platform.startswith("linux") else [] - session.install("-e", ".[test]") + session.install("-e.[test]") if session.posargs: session.run("pytest", *session.posargs) else: @@ -46,7 +44,8 @@ def pylint(session: nox.Session) -> None: Run pylint. """ - session.install("pylint", ".") + name = "cibuildwheel @ ." if getattr(session.virtualenv, "venv_backend", "") == "uv" else "." + session.install("pylint", name) session.run("pylint", "cibuildwheel", *session.posargs) @@ -60,32 +59,36 @@ def check_manifest(session: nox.Session) -> None: session.run("check-manifest", *session.posargs) -@nox.session(python=PYTHON_ALL_VERSIONS) +@nox.session def update_constraints(session: nox.Session) -> None: """ Update the dependencies inplace. """ - session.install("pip-tools") - assert isinstance(session.python, str) - python_version = session.python.replace(".", "") - env = os.environ.copy() - # CUSTOM_COMPILE_COMMAND is a pip-compile option that tells users how to - # regenerate the constraints files - env["CUSTOM_COMPILE_COMMAND"] = f"nox -s {session.name}" - session.run( - "pip-compile", - "--allow-unsafe", - "--upgrade", - "cibuildwheel/resources/constraints.in", - f"--output-file=cibuildwheel/resources/constraints-python{python_version}.txt", - env=env, - ) - if session.python == PYTHON_ALL_VERSIONS[-1]: - RESOURCES = DIR / "cibuildwheel" / "resources" - shutil.copyfile( - RESOURCES / f"constraints-python{python_version}.txt", - RESOURCES / "constraints.txt", + + if getattr(session.virtualenv, "venv_backend", "") != "uv": + session.install("uv>=0.1.23") + + for minor_version in range(7, 13): + python_version = f"3.{minor_version}" + env = os.environ.copy() + # CUSTOM_COMPILE_COMMAND is a pip-compile option that tells users how to + # regenerate the constraints files + env["UV_CUSTOM_COMPILE_COMMAND"] = f"nox -s {session.name}" + session.run( + "uv", + "pip", + "compile", + f"--python-version={python_version}", + "--upgrade", + "cibuildwheel/resources/constraints.in", + f"--output-file=cibuildwheel/resources/constraints-python{python_version.replace('.', '')}.txt", + env=env, ) + RESOURCES = DIR / "cibuildwheel" / "resources" + shutil.copyfile( + RESOURCES / "constraints-python312.txt", + RESOURCES / "constraints.txt", + ) @nox.session @@ -104,7 +107,7 @@ def update_proj(session: nox.Session) -> None: """ Update the README inplace. """ - session.install("-e", ".[bin]") + session.install("-e.[bin]") session.run( "python", "bin/projects.py", @@ -127,18 +130,10 @@ def generate_schema(session: nox.Session) -> None: @nox.session(python="3.9") def docs(session: nox.Session) -> None: """ - Build the docs. + Build the docs. Will serve unless --non-interactive """ - session.install("-e", ".[docs]") - session.run("pip", "list") - - if session.posargs: - if "serve" in session.posargs: - session.run("mkdocs", "serve") - else: - session.error("Unrecognized args, use 'serve'") - else: - session.run("mkdocs", "build") + session.install("-e.[docs]") + session.run("mkdocs", "serve" if session.interactive else "build") @nox.session From 89e0a90bc52530e80796e70503b37d038de29326 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Mon, 25 Mar 2024 04:30:10 -0400 Subject: [PATCH 10/44] Update docs/faq.md --- docs/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/faq.md b/docs/faq.md index 6cec6d26e..a2a6bcddc 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -357,7 +357,7 @@ Then cibuildwheel will detect that it's installed and use it instead. However, y ### macOS: Library dependencies do not satisfy target MacOS -Since delocate 0.10.8 there is added verification that the library binary dependencies match the target macOS version. This is to prevent the situation where a wheel platform tag is lower than the actual minimum macOS version required by the library. To resolve this error you need to build the library to the same macOS version as the target wheel (for example using `MACOSX_DEPLOYMENT_TARGET` environment variable). +Since delocate 0.11.0 there is added verification that the library binary dependencies match the target macOS version. This is to prevent the situation where a wheel platform tag is lower than the actual minimum macOS version required by the library. To resolve this error you need to build the library to the same macOS version as the target wheel (for example using `MACOSX_DEPLOYMENT_TARGET` environment variable). Alternatively, you could set `MACOSX_DEPLOYMENT_TARGET` in `CIBW_ENVIRONMENT` to correctly label the wheel as incompatible with older macOS versions. This error may happen when you install a library using a package manager like Homebrew, which compiles the library for the macOS version of the build machine. This is not suitable for wheels, as the library will only work on the same macOS version as the build machine. You should compile the library yourself, or use a precompiled binary that matches the target macOS version. From 070e744d267952ab3b86ed434d5796b707e497af Mon Sep 17 00:00:00 2001 From: "cibuildwheel-bot[bot]" <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> Date: Mon, 25 Mar 2024 04:30:47 -0400 Subject: [PATCH 11/44] [Bot] Update dependencies (#1796) Update dependencies Co-authored-by: cibuildwheel-bot[bot] <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> --- .../resources/constraints-python310.txt | 6 ++- .../resources/constraints-python311.txt | 6 ++- .../resources/constraints-python312.txt | 6 ++- .../resources/constraints-python37.txt | 6 ++- .../resources/constraints-python38.txt | 6 ++- .../resources/constraints-python39.txt | 6 ++- cibuildwheel/resources/constraints.txt | 6 ++- .../resources/pinned_docker_images.cfg | 48 +++++++++---------- docs/working-examples.md | 16 +++---- 9 files changed, 67 insertions(+), 39 deletions(-) diff --git a/cibuildwheel/resources/constraints-python310.txt b/cibuildwheel/resources/constraints-python310.txt index 0600b10e0..9907af01d 100644 --- a/cibuildwheel/resources/constraints-python310.txt +++ b/cibuildwheel/resources/constraints-python310.txt @@ -1,13 +1,17 @@ # This file was autogenerated by uv via the following command: # nox -s update_constraints +altgraph==0.17.4 + # via macholib build==1.1.1 -delocate==0.10.7 +delocate==0.11.0 distlib==0.3.8 # via virtualenv filelock==3.13.1 # via virtualenv importlib-metadata==7.1.0 # via build +macholib==1.16.3 + # via delocate packaging==24.0 # via # build diff --git a/cibuildwheel/resources/constraints-python311.txt b/cibuildwheel/resources/constraints-python311.txt index d8a5a79f7..5c0ba2a19 100644 --- a/cibuildwheel/resources/constraints-python311.txt +++ b/cibuildwheel/resources/constraints-python311.txt @@ -1,11 +1,15 @@ # This file was autogenerated by uv via the following command: # nox -s update_constraints +altgraph==0.17.4 + # via macholib build==1.1.1 -delocate==0.10.7 +delocate==0.11.0 distlib==0.3.8 # via virtualenv filelock==3.13.1 # via virtualenv +macholib==1.16.3 + # via delocate packaging==24.0 # via # build diff --git a/cibuildwheel/resources/constraints-python312.txt b/cibuildwheel/resources/constraints-python312.txt index d8a5a79f7..5c0ba2a19 100644 --- a/cibuildwheel/resources/constraints-python312.txt +++ b/cibuildwheel/resources/constraints-python312.txt @@ -1,11 +1,15 @@ # This file was autogenerated by uv via the following command: # nox -s update_constraints +altgraph==0.17.4 + # via macholib build==1.1.1 -delocate==0.10.7 +delocate==0.11.0 distlib==0.3.8 # via virtualenv filelock==3.13.1 # via virtualenv +macholib==1.16.3 + # via delocate packaging==24.0 # via # build diff --git a/cibuildwheel/resources/constraints-python37.txt b/cibuildwheel/resources/constraints-python37.txt index 273c799f5..39829fed0 100644 --- a/cibuildwheel/resources/constraints-python37.txt +++ b/cibuildwheel/resources/constraints-python37.txt @@ -1,7 +1,9 @@ # This file was autogenerated by uv via the following command: # nox -s update_constraints +altgraph==0.17.4 + # via macholib build==1.1.1 -delocate==0.10.7 +delocate==0.11.0 distlib==0.3.8 # via virtualenv filelock==3.12.2 @@ -10,6 +12,8 @@ importlib-metadata==6.7.0 # via # build # virtualenv +macholib==1.16.3 + # via delocate packaging==24.0 # via # build diff --git a/cibuildwheel/resources/constraints-python38.txt b/cibuildwheel/resources/constraints-python38.txt index 0600b10e0..9907af01d 100644 --- a/cibuildwheel/resources/constraints-python38.txt +++ b/cibuildwheel/resources/constraints-python38.txt @@ -1,13 +1,17 @@ # This file was autogenerated by uv via the following command: # nox -s update_constraints +altgraph==0.17.4 + # via macholib build==1.1.1 -delocate==0.10.7 +delocate==0.11.0 distlib==0.3.8 # via virtualenv filelock==3.13.1 # via virtualenv importlib-metadata==7.1.0 # via build +macholib==1.16.3 + # via delocate packaging==24.0 # via # build diff --git a/cibuildwheel/resources/constraints-python39.txt b/cibuildwheel/resources/constraints-python39.txt index 0600b10e0..9907af01d 100644 --- a/cibuildwheel/resources/constraints-python39.txt +++ b/cibuildwheel/resources/constraints-python39.txt @@ -1,13 +1,17 @@ # This file was autogenerated by uv via the following command: # nox -s update_constraints +altgraph==0.17.4 + # via macholib build==1.1.1 -delocate==0.10.7 +delocate==0.11.0 distlib==0.3.8 # via virtualenv filelock==3.13.1 # via virtualenv importlib-metadata==7.1.0 # via build +macholib==1.16.3 + # via delocate packaging==24.0 # via # build diff --git a/cibuildwheel/resources/constraints.txt b/cibuildwheel/resources/constraints.txt index d8a5a79f7..5c0ba2a19 100644 --- a/cibuildwheel/resources/constraints.txt +++ b/cibuildwheel/resources/constraints.txt @@ -1,11 +1,15 @@ # This file was autogenerated by uv via the following command: # nox -s update_constraints +altgraph==0.17.4 + # via macholib build==1.1.1 -delocate==0.10.7 +delocate==0.11.0 distlib==0.3.8 # via virtualenv filelock==3.13.1 # via virtualenv +macholib==1.16.3 + # via delocate packaging==24.0 # via # build diff --git a/cibuildwheel/resources/pinned_docker_images.cfg b/cibuildwheel/resources/pinned_docker_images.cfg index 462053f7f..1086db8fd 100644 --- a/cibuildwheel/resources/pinned_docker_images.cfg +++ b/cibuildwheel/resources/pinned_docker_images.cfg @@ -1,54 +1,54 @@ [x86_64] manylinux1 = quay.io/pypa/manylinux1_x86_64:2024-03-10-b85029d manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-03-13-062cde0 +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-03-18-314a21e manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-03-13-062cde0 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024-03-13-062cde0 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024-03-13-062cde0 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-03-18-314a21e +musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024-03-18-314a21e +musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024-03-18-314a21e [i686] manylinux1 = quay.io/pypa/manylinux1_i686:2024-03-10-b85029d manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-03-13-062cde0 +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-03-18-314a21e manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024-03-13-062cde0 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024-03-13-062cde0 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024-03-18-314a21e +musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024-03-18-314a21e [pypy_x86_64] manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-03-13-062cde0 +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-03-18-314a21e manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-03-13-062cde0 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-03-18-314a21e [pypy_i686] manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-03-13-062cde0 +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-03-18-314a21e manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 [aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-03-13-062cde0 +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-03-18-314a21e manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-03-13-062cde0 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024-03-13-062cde0 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024-03-13-062cde0 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-03-18-314a21e +musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024-03-18-314a21e +musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024-03-18-314a21e [ppc64le] -manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024-03-13-062cde0 +manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024-03-18-314a21e manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024-03-13-062cde0 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024-03-13-062cde0 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024-03-13-062cde0 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024-03-18-314a21e +musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024-03-18-314a21e +musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024-03-18-314a21e [s390x] -manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024-03-13-062cde0 +manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024-03-18-314a21e manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024-03-13-062cde0 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024-03-13-062cde0 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024-03-13-062cde0 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024-03-18-314a21e +musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024-03-18-314a21e +musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024-03-18-314a21e [pypy_aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-03-13-062cde0 +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-03-18-314a21e manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-03-13-062cde0 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-03-18-314a21e diff --git a/docs/working-examples.md b/docs/working-examples.md index 27f5844ea..053f46439 100644 --- a/docs/working-examples.md +++ b/docs/working-examples.md @@ -45,8 +45,8 @@ title: Working examples | [vispy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Main repository for Vispy | | [tinyobjloader][] | ![azurepipelines icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Tiny but powerful single file wavefront obj loader | | [coverage.py][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The coverage tool for Python | -| [PyCryptodome][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A self-contained cryptographic library for Python | | [CTranslate2][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes libraries from the [Intel oneAPI toolkit](https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit.html) and CUDA kernels compiled for multiple GPU architectures. | +| [PyCryptodome][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A self-contained cryptographic library for Python | | [Line Profiler][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Line-by-line profiling for Python | | [PyYAML][] | ![github icon][] | ![apple icon][] | Canonical source repository for PyYAML | | [PyAV][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Pythonic bindings for FFmpeg's libraries. | @@ -69,9 +69,9 @@ title: Working examples | [H3-py][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Python bindings for H3, a hierarchical hexagonal geospatial indexing system | | [mosec][] | ![github icon][] | ![linux icon][] ![apple icon][] | A machine learning model serving framework powered by Rust | | [Picologging][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A high-performance logging library for Python. | +| [time-machine][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Time mocking library using only the CPython C API. | | [markupsafe][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Safely add untrusted strings to HTML/XML markup. | | [Rtree][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Rtree: spatial index for Python GIS | -| [time-machine][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Time mocking library using only the CPython C API. | | [pybind11 cmake_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a CMake-based build system | | [KDEpy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Kernel Density Estimation in Python | | [python-rapidjson][] | ![travisci icon][] ![gitlab icon][] ![appveyor icon][] | ![windows icon][] ![linux icon][] | Python wrapper around rapidjson | @@ -90,8 +90,8 @@ title: Working examples | [PyGLM][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Fast OpenGL Mathematics (GLM) for Python | | [pillow-heif][] | ![github icon][] ![cirrusci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Bindings to libheif library with third party dependencies. Fully automated CI for tests and publishing including Apple Silicon builds. | | [TgCrypto][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. | -| [iDynTree][] | ![github icon][] | ![linux icon][] | Uses manylinux_2_24 | | [bx-python][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | A library that includes Cython extensions. | +| [iDynTree][] | ![github icon][] | ![linux icon][] | Uses manylinux_2_24 | | [boost-histogram][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Supports full range of wheels, including PyPy and alternate archs. | | [Python-WebRTC][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | a Python extension that provides bindings to WebRTC M92 | | [pybase64][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast Base64 encoding/decoding in Python | @@ -110,8 +110,8 @@ title: Working examples | [ril][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A python binding to Rust Imaging library using maturin and Pyo3, utilizes Github Action cache to improve speed. Builds abi3 wheels. | | [GSD][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Cython and NumPy project with 64-bit wheels. | | [SiPM][] | ![github icon][] | ![apple icon][] ![linux icon][] | High performance library for SiPM detectors simulation using C++17, OpenMP and AVX2 intrinsics. | -| [xmlstarlet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python 3.6+ CFFI bindings with true MSVC build. | | [CorrectionLib][] | ![github icon][] | ![apple icon][] ![linux icon][] | Structured JSON powered correction library for HEP, designed for the CMS experiment at CERN. | +| [xmlstarlet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python 3.6+ CFFI bindings with true MSVC build. | | [aalink][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Async Python interface for Ableton Link. | | [pyinstrument_cext][] | ![travisci icon][] ![appveyor icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A simple C extension, without external dependencies | | [werpy][] | ![github icon][] | ![windows icon][] ![linux icon][] ![apple icon][] | An ultra-fast python package using optimized dynamic programming to compute the Word Error Rate (WER). | @@ -154,8 +154,8 @@ title: Working examples [vispy]: https://github.com/vispy/vispy [tinyobjloader]: https://github.com/tinyobjloader/tinyobjloader [coverage.py]: https://github.com/nedbat/coveragepy -[PyCryptodome]: https://github.com/Legrandin/pycryptodome [CTranslate2]: https://github.com/OpenNMT/CTranslate2 +[PyCryptodome]: https://github.com/Legrandin/pycryptodome [Line Profiler]: https://github.com/pyutils/line_profiler [PyYAML]: https://github.com/yaml/pyyaml [PyAV]: https://github.com/PyAV-Org/PyAV @@ -178,9 +178,9 @@ title: Working examples [H3-py]: https://github.com/uber/h3-py [mosec]: https://github.com/mosecorg/mosec [Picologging]: https://github.com/microsoft/picologging +[time-machine]: https://github.com/adamchainz/time-machine [markupsafe]: https://github.com/pallets/markupsafe [Rtree]: https://github.com/Toblerity/rtree -[time-machine]: https://github.com/adamchainz/time-machine [pybind11 cmake_example]: https://github.com/pybind/cmake_example [KDEpy]: https://github.com/tommyod/KDEpy [python-rapidjson]: https://github.com/python-rapidjson/python-rapidjson @@ -199,8 +199,8 @@ title: Working examples [PyGLM]: https://github.com/Zuzu-Typ/PyGLM [pillow-heif]: https://github.com/bigcat88/pillow_heif [TgCrypto]: https://github.com/pyrogram/tgcrypto -[iDynTree]: https://github.com/robotology/idyntree [bx-python]: https://github.com/bxlab/bx-python +[iDynTree]: https://github.com/robotology/idyntree [boost-histogram]: https://github.com/scikit-hep/boost-histogram [Python-WebRTC]: https://github.com/MarshalX/python-webrtc [pybase64]: https://github.com/mayeut/pybase64 @@ -219,8 +219,8 @@ title: Working examples [ril]: https://github.com/Cryptex-github/ril-py [GSD]: https://github.com/glotzerlab/gsd [SiPM]: https://github.com/EdoPro98/SimSiPM -[xmlstarlet]: https://github.com/dimitern/xmlstarlet [CorrectionLib]: https://github.com/cms-nanoAOD/correctionlib +[xmlstarlet]: https://github.com/dimitern/xmlstarlet [aalink]: https://github.com/artfwo/aalink [pyinstrument_cext]: https://github.com/joerick/pyinstrument_cext [werpy]: https://github.com/analyticsinmotion/werpy From 376414dc69f1d69b15775ea811d19b587f252237 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 7 Apr 2024 03:22:03 -0400 Subject: [PATCH 12/44] [pre-commit.ci] pre-commit autoupdate (#1797) --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index cbf26d66a..5377a8926 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,7 +14,7 @@ repos: - id: trailing-whitespace - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.3.3 + rev: v0.3.5 hooks: - id: ruff args: ["--fix", "--show-fixes"] @@ -82,7 +82,7 @@ repos: - repo: https://github.com/python-jsonschema/check-jsonschema - rev: 0.28.0 + rev: 0.28.1 hooks: - id: check-dependabot - id: check-github-actions From 2fb3205ff1ddea0d60c112e449be469fcb753bb8 Mon Sep 17 00:00:00 2001 From: "cibuildwheel-bot[bot]" <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> Date: Mon, 8 Apr 2024 22:07:14 -0400 Subject: [PATCH 13/44] [Bot] Update dependencies (#1799) Update dependencies Co-authored-by: cibuildwheel-bot[bot] <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> --- cibuildwheel/resources/build-platforms.toml | 12 ++--- .../resources/constraints-python310.txt | 6 +-- .../resources/constraints-python311.txt | 6 +-- .../resources/constraints-python312.txt | 6 +-- .../resources/constraints-python38.txt | 6 +-- .../resources/constraints-python39.txt | 6 +-- cibuildwheel/resources/constraints.txt | 6 +-- .../resources/pinned_docker_images.cfg | 52 +++++++++---------- docs/working-examples.md | 12 ++--- 9 files changed, 56 insertions(+), 56 deletions(-) diff --git a/cibuildwheel/resources/build-platforms.toml b/cibuildwheel/resources/build-platforms.toml index 168ecadac..9eb61f81c 100644 --- a/cibuildwheel/resources/build-platforms.toml +++ b/cibuildwheel/resources/build-platforms.toml @@ -97,9 +97,9 @@ python_configurations = [ { identifier = "cp310-macosx_x86_64", version = "3.10", url = "https://www.python.org/ftp/python/3.10.11/python-3.10.11-macos11.pkg" }, { identifier = "cp310-macosx_arm64", version = "3.10", url = "https://www.python.org/ftp/python/3.10.11/python-3.10.11-macos11.pkg" }, { identifier = "cp310-macosx_universal2", version = "3.10", url = "https://www.python.org/ftp/python/3.10.11/python-3.10.11-macos11.pkg" }, - { identifier = "cp311-macosx_x86_64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.8/python-3.11.8-macos11.pkg" }, - { identifier = "cp311-macosx_arm64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.8/python-3.11.8-macos11.pkg" }, - { identifier = "cp311-macosx_universal2", version = "3.11", url = "https://www.python.org/ftp/python/3.11.8/python-3.11.8-macos11.pkg" }, + { identifier = "cp311-macosx_x86_64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.9/python-3.11.9-macos11.pkg" }, + { identifier = "cp311-macosx_arm64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.9/python-3.11.9-macos11.pkg" }, + { identifier = "cp311-macosx_universal2", version = "3.11", url = "https://www.python.org/ftp/python/3.11.9/python-3.11.9-macos11.pkg" }, { identifier = "cp312-macosx_x86_64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.2/python-3.12.2-macos11.pkg" }, { identifier = "cp312-macosx_arm64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.2/python-3.12.2-macos11.pkg" }, { identifier = "cp312-macosx_universal2", version = "3.12", url = "https://www.python.org/ftp/python/3.12.2/python-3.12.2-macos11.pkg" }, @@ -124,13 +124,13 @@ python_configurations = [ { identifier = "cp39-win_amd64", version = "3.9.13", arch = "64" }, { identifier = "cp310-win32", version = "3.10.11", arch = "32" }, { identifier = "cp310-win_amd64", version = "3.10.11", arch = "64" }, - { identifier = "cp311-win32", version = "3.11.8", arch = "32" }, - { identifier = "cp311-win_amd64", version = "3.11.8", arch = "64" }, + { identifier = "cp311-win32", version = "3.11.9", arch = "32" }, + { identifier = "cp311-win_amd64", version = "3.11.9", arch = "64" }, { identifier = "cp312-win32", version = "3.12.2", arch = "32" }, { identifier = "cp312-win_amd64", version = "3.12.2", arch = "64" }, { identifier = "cp39-win_arm64", version = "3.9.10", arch = "ARM64" }, { identifier = "cp310-win_arm64", version = "3.10.11", arch = "ARM64" }, - { identifier = "cp311-win_arm64", version = "3.11.8", arch = "ARM64" }, + { identifier = "cp311-win_arm64", version = "3.11.9", arch = "ARM64" }, { identifier = "cp312-win_arm64", version = "3.12.2", arch = "ARM64" }, { identifier = "pp37-win_amd64", version = "3.7", arch = "64", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-win64.zip" }, { identifier = "pp38-win_amd64", version = "3.8", arch = "64", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-win64.zip" }, diff --git a/cibuildwheel/resources/constraints-python310.txt b/cibuildwheel/resources/constraints-python310.txt index 9907af01d..c4af2efe4 100644 --- a/cibuildwheel/resources/constraints-python310.txt +++ b/cibuildwheel/resources/constraints-python310.txt @@ -2,11 +2,11 @@ # nox -s update_constraints altgraph==0.17.4 # via macholib -build==1.1.1 +build==1.2.1 delocate==0.11.0 distlib==0.3.8 # via virtualenv -filelock==3.13.1 +filelock==3.13.3 # via virtualenv importlib-metadata==7.1.0 # via build @@ -25,7 +25,7 @@ tomli==2.0.1 # via # build # pyproject-hooks -typing-extensions==4.10.0 +typing-extensions==4.11.0 # via delocate virtualenv==20.25.1 zipp==3.18.1 diff --git a/cibuildwheel/resources/constraints-python311.txt b/cibuildwheel/resources/constraints-python311.txt index 5c0ba2a19..d943b36bc 100644 --- a/cibuildwheel/resources/constraints-python311.txt +++ b/cibuildwheel/resources/constraints-python311.txt @@ -2,11 +2,11 @@ # nox -s update_constraints altgraph==0.17.4 # via macholib -build==1.1.1 +build==1.2.1 delocate==0.11.0 distlib==0.3.8 # via virtualenv -filelock==3.13.1 +filelock==3.13.3 # via virtualenv macholib==1.16.3 # via delocate @@ -19,6 +19,6 @@ platformdirs==4.2.0 # via virtualenv pyproject-hooks==1.0.0 # via build -typing-extensions==4.10.0 +typing-extensions==4.11.0 # via delocate virtualenv==20.25.1 diff --git a/cibuildwheel/resources/constraints-python312.txt b/cibuildwheel/resources/constraints-python312.txt index 5c0ba2a19..d943b36bc 100644 --- a/cibuildwheel/resources/constraints-python312.txt +++ b/cibuildwheel/resources/constraints-python312.txt @@ -2,11 +2,11 @@ # nox -s update_constraints altgraph==0.17.4 # via macholib -build==1.1.1 +build==1.2.1 delocate==0.11.0 distlib==0.3.8 # via virtualenv -filelock==3.13.1 +filelock==3.13.3 # via virtualenv macholib==1.16.3 # via delocate @@ -19,6 +19,6 @@ platformdirs==4.2.0 # via virtualenv pyproject-hooks==1.0.0 # via build -typing-extensions==4.10.0 +typing-extensions==4.11.0 # via delocate virtualenv==20.25.1 diff --git a/cibuildwheel/resources/constraints-python38.txt b/cibuildwheel/resources/constraints-python38.txt index 9907af01d..c4af2efe4 100644 --- a/cibuildwheel/resources/constraints-python38.txt +++ b/cibuildwheel/resources/constraints-python38.txt @@ -2,11 +2,11 @@ # nox -s update_constraints altgraph==0.17.4 # via macholib -build==1.1.1 +build==1.2.1 delocate==0.11.0 distlib==0.3.8 # via virtualenv -filelock==3.13.1 +filelock==3.13.3 # via virtualenv importlib-metadata==7.1.0 # via build @@ -25,7 +25,7 @@ tomli==2.0.1 # via # build # pyproject-hooks -typing-extensions==4.10.0 +typing-extensions==4.11.0 # via delocate virtualenv==20.25.1 zipp==3.18.1 diff --git a/cibuildwheel/resources/constraints-python39.txt b/cibuildwheel/resources/constraints-python39.txt index 9907af01d..c4af2efe4 100644 --- a/cibuildwheel/resources/constraints-python39.txt +++ b/cibuildwheel/resources/constraints-python39.txt @@ -2,11 +2,11 @@ # nox -s update_constraints altgraph==0.17.4 # via macholib -build==1.1.1 +build==1.2.1 delocate==0.11.0 distlib==0.3.8 # via virtualenv -filelock==3.13.1 +filelock==3.13.3 # via virtualenv importlib-metadata==7.1.0 # via build @@ -25,7 +25,7 @@ tomli==2.0.1 # via # build # pyproject-hooks -typing-extensions==4.10.0 +typing-extensions==4.11.0 # via delocate virtualenv==20.25.1 zipp==3.18.1 diff --git a/cibuildwheel/resources/constraints.txt b/cibuildwheel/resources/constraints.txt index 5c0ba2a19..d943b36bc 100644 --- a/cibuildwheel/resources/constraints.txt +++ b/cibuildwheel/resources/constraints.txt @@ -2,11 +2,11 @@ # nox -s update_constraints altgraph==0.17.4 # via macholib -build==1.1.1 +build==1.2.1 delocate==0.11.0 distlib==0.3.8 # via virtualenv -filelock==3.13.1 +filelock==3.13.3 # via virtualenv macholib==1.16.3 # via delocate @@ -19,6 +19,6 @@ platformdirs==4.2.0 # via virtualenv pyproject-hooks==1.0.0 # via build -typing-extensions==4.10.0 +typing-extensions==4.11.0 # via delocate virtualenv==20.25.1 diff --git a/cibuildwheel/resources/pinned_docker_images.cfg b/cibuildwheel/resources/pinned_docker_images.cfg index 1086db8fd..83321ad18 100644 --- a/cibuildwheel/resources/pinned_docker_images.cfg +++ b/cibuildwheel/resources/pinned_docker_images.cfg @@ -1,54 +1,54 @@ [x86_64] -manylinux1 = quay.io/pypa/manylinux1_x86_64:2024-03-10-b85029d +manylinux1 = quay.io/pypa/manylinux1_x86_64:2024-03-25-69f3367 manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-03-18-314a21e +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-04-02-96b33b9 manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-03-18-314a21e -musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024-03-18-314a21e -musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024-03-18-314a21e +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-04-02-96b33b9 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024-04-02-96b33b9 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024-04-02-96b33b9 [i686] -manylinux1 = quay.io/pypa/manylinux1_i686:2024-03-10-b85029d +manylinux1 = quay.io/pypa/manylinux1_i686:2024-03-25-69f3367 manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-03-18-314a21e +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-04-02-96b33b9 manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024-03-18-314a21e -musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024-03-18-314a21e +musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024-04-02-96b33b9 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024-04-02-96b33b9 [pypy_x86_64] manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-03-18-314a21e +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-04-02-96b33b9 manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-03-18-314a21e +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-04-02-96b33b9 [pypy_i686] manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-03-18-314a21e +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-04-02-96b33b9 manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 [aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-03-18-314a21e +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-04-02-96b33b9 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-03-18-314a21e -musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024-03-18-314a21e -musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024-03-18-314a21e +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-04-02-96b33b9 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024-04-02-96b33b9 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024-04-02-96b33b9 [ppc64le] -manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024-03-18-314a21e +manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024-04-02-96b33b9 manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024-03-18-314a21e -musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024-03-18-314a21e -musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024-03-18-314a21e +manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024-04-02-96b33b9 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024-04-02-96b33b9 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024-04-02-96b33b9 [s390x] -manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024-03-18-314a21e +manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024-04-02-96b33b9 manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024-03-18-314a21e -musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024-03-18-314a21e -musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024-03-18-314a21e +manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024-04-02-96b33b9 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024-04-02-96b33b9 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024-04-02-96b33b9 [pypy_aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-03-18-314a21e +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-04-02-96b33b9 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-03-18-314a21e +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-04-02-96b33b9 diff --git a/docs/working-examples.md b/docs/working-examples.md index 053f46439..58b00d413 100644 --- a/docs/working-examples.md +++ b/docs/working-examples.md @@ -63,8 +63,8 @@ title: Working examples | [OpenTimelineIO][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Open Source API and interchange format for editorial timeline information. | | [PyTables][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python package to manage extremely large amounts of data | | [Parselmouth][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python interface to the Praat software package, using pybind11, C++17 and CMake, with the core Praat static library built only once and shared between wheels. | -| [google neuroglancer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | WebGL-based viewer for volumetric data | | [DeepForest][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | An Efficient, Scalable and Optimized Python Framework for Deep Forest (2021.2.1) | +| [google neuroglancer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | WebGL-based viewer for volumetric data | | [AutoPy][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. | | [H3-py][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Python bindings for H3, a hierarchical hexagonal geospatial indexing system | | [mosec][] | ![github icon][] | ![linux icon][] ![apple icon][] | A machine learning model serving framework powered by Rust | @@ -90,15 +90,15 @@ title: Working examples | [PyGLM][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Fast OpenGL Mathematics (GLM) for Python | | [pillow-heif][] | ![github icon][] ![cirrusci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Bindings to libheif library with third party dependencies. Fully automated CI for tests and publishing including Apple Silicon builds. | | [TgCrypto][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. | -| [bx-python][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | A library that includes Cython extensions. | | [iDynTree][] | ![github icon][] | ![linux icon][] | Uses manylinux_2_24 | +| [bx-python][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | A library that includes Cython extensions. | | [boost-histogram][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Supports full range of wheels, including PyPy and alternate archs. | | [Python-WebRTC][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | a Python extension that provides bindings to WebRTC M92 | | [pybase64][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast Base64 encoding/decoding in Python | | [power-grid-model][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python/C++ library for distribution power system analysis | | [fathon][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | python package for DFA (Detrended Fluctuation Analysis) and related algorithms | -| [Arbor][] | ![github icon][] | ![apple icon][] ![linux icon][] | Arbor is a multi-compartment neuron simulation library; compatible with next-generation accelerators; best-practices applied to research software; focused on community-driven development. Includes a [small script](https://github.com/arbor-sim/arbor/blob/master/scripts/patchwheel.py) patching `rpath` in bundled libraries. | | [Imagecodecs (fork)][] | ![azurepipelines icon][] | ![apple icon][] ![linux icon][] | Over 20 external dependencies in compiled libraries, custom docker image, `libomp`, `openblas` and `install_name_tool` for macOS. | +| [Arbor][] | ![github icon][] | ![apple icon][] ![linux icon][] | Arbor is a multi-compartment neuron simulation library; compatible with next-generation accelerators; best-practices applied to research software; focused on community-driven development. Includes a [small script](https://github.com/arbor-sim/arbor/blob/master/scripts/patchwheel.py) patching `rpath` in bundled libraries. | | [pybind11 scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | An example combining scikit-build and pybind11 | | [polaroid][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Full range of wheels for setuptools rust, with auto release and PyPI deploy. | | [etebase-py][] | ![travisci icon][] | ![linux icon][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. | @@ -172,8 +172,8 @@ title: Working examples [OpenTimelineIO]: https://github.com/PixarAnimationStudios/OpenTimelineIO [PyTables]: https://github.com/PyTables/PyTables [Parselmouth]: https://github.com/YannickJadoul/Parselmouth -[google neuroglancer]: https://github.com/google/neuroglancer [DeepForest]: https://github.com/LAMDA-NJU/Deep-Forest +[google neuroglancer]: https://github.com/google/neuroglancer [AutoPy]: https://github.com/autopilot-rs/autopy [H3-py]: https://github.com/uber/h3-py [mosec]: https://github.com/mosecorg/mosec @@ -199,15 +199,15 @@ title: Working examples [PyGLM]: https://github.com/Zuzu-Typ/PyGLM [pillow-heif]: https://github.com/bigcat88/pillow_heif [TgCrypto]: https://github.com/pyrogram/tgcrypto -[bx-python]: https://github.com/bxlab/bx-python [iDynTree]: https://github.com/robotology/idyntree +[bx-python]: https://github.com/bxlab/bx-python [boost-histogram]: https://github.com/scikit-hep/boost-histogram [Python-WebRTC]: https://github.com/MarshalX/python-webrtc [pybase64]: https://github.com/mayeut/pybase64 [power-grid-model]: https://github.com/alliander-opensource/power-grid-model [fathon]: https://github.com/stfbnc/fathon -[Arbor]: https://github.com/arbor-sim/arbor [Imagecodecs (fork)]: https://github.com/czaki/imagecodecs_build +[Arbor]: https://github.com/arbor-sim/arbor [pybind11 scikit_build_example]: https://github.com/pybind/scikit_build_example [polaroid]: https://github.com/daggy1234/polaroid [etebase-py]: https://github.com/etesync/etebase-py From 9cf99e78bc06d33fb2947de5820be96ad9c7152c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 9 Apr 2024 11:33:31 -0400 Subject: [PATCH 14/44] [pre-commit.ci] pre-commit autoupdate (#1801) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/pre-commit-hooks: v4.5.0 β†’ v4.6.0](https://github.com/pre-commit/pre-commit-hooks/compare/v4.5.0...v4.6.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5377a8926..90b965c2a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.5.0 + rev: v4.6.0 hooks: - id: check-case-conflict - id: check-merge-conflict From 208ca32050747ab3ea0585e9ea33768de825826f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:22:12 -0400 Subject: [PATCH 15/44] chore(deps): bump wntrblm/nox from 2024.03.02 to 2024.04.15 in the actions group (#1810) chore(deps): bump wntrblm/nox in the actions group Bumps the actions group with 1 update: [wntrblm/nox](https://github.com/wntrblm/nox). Updates `wntrblm/nox` from 2024.03.02 to 2024.04.15 - [Release notes](https://github.com/wntrblm/nox/releases) - [Changelog](https://github.com/wntrblm/nox/blob/main/CHANGELOG.md) - [Commits](https://github.com/wntrblm/nox/compare/2024.03.02...2024.04.15) --- updated-dependencies: - dependency-name: wntrblm/nox dependency-type: direct:production dependency-group: actions ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/update-dependencies.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-dependencies.yml b/.github/workflows/update-dependencies.yml index d80935343..832ed2ec9 100644 --- a/.github/workflows/update-dependencies.yml +++ b/.github/workflows/update-dependencies.yml @@ -22,7 +22,7 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: wntrblm/nox@2024.03.02 + - uses: wntrblm/nox@2024.04.15 with: python-versions: "3.7, 3.8, 3.9, 3.10, 3.11, 3.12" From 8a0d1d59c72a52688bcc48be051bffaf224dd649 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:22:22 -0400 Subject: [PATCH 16/44] [pre-commit.ci] pre-commit autoupdate (#1807) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.3.5 β†’ v0.4.1](https://github.com/astral-sh/ruff-pre-commit/compare/v0.3.5...v0.4.1) - [github.com/python-jsonschema/check-jsonschema: 0.28.1 β†’ 0.28.2](https://github.com/python-jsonschema/check-jsonschema/compare/0.28.1...0.28.2) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 90b965c2a..66af454ea 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,7 +14,7 @@ repos: - id: trailing-whitespace - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.3.5 + rev: v0.4.1 hooks: - id: ruff args: ["--fix", "--show-fixes"] @@ -82,7 +82,7 @@ repos: - repo: https://github.com/python-jsonschema/check-jsonschema - rev: 0.28.1 + rev: 0.28.2 hooks: - id: check-dependabot - id: check-github-actions From d24ebf41257afbc1cde61ac93b0eedfa4d1b7d12 Mon Sep 17 00:00:00 2001 From: "cibuildwheel-bot[bot]" <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:22:31 -0400 Subject: [PATCH 17/44] [Bot] Update dependencies (#1805) Update dependencies Co-authored-by: cibuildwheel-bot[bot] <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> --- cibuildwheel/resources/build-platforms.toml | 12 ++--- .../resources/constraints-python310.txt | 4 +- .../resources/constraints-python311.txt | 4 +- .../resources/constraints-python312.txt | 4 +- .../resources/constraints-python37.txt | 2 +- .../resources/constraints-python38.txt | 4 +- .../resources/constraints-python39.txt | 4 +- cibuildwheel/resources/constraints.txt | 4 +- .../resources/pinned_docker_images.cfg | 52 +++++++++---------- docs/working-examples.md | 12 ++--- 10 files changed, 51 insertions(+), 51 deletions(-) diff --git a/cibuildwheel/resources/build-platforms.toml b/cibuildwheel/resources/build-platforms.toml index 9eb61f81c..c0a3f65c7 100644 --- a/cibuildwheel/resources/build-platforms.toml +++ b/cibuildwheel/resources/build-platforms.toml @@ -100,9 +100,9 @@ python_configurations = [ { identifier = "cp311-macosx_x86_64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.9/python-3.11.9-macos11.pkg" }, { identifier = "cp311-macosx_arm64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.9/python-3.11.9-macos11.pkg" }, { identifier = "cp311-macosx_universal2", version = "3.11", url = "https://www.python.org/ftp/python/3.11.9/python-3.11.9-macos11.pkg" }, - { identifier = "cp312-macosx_x86_64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.2/python-3.12.2-macos11.pkg" }, - { identifier = "cp312-macosx_arm64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.2/python-3.12.2-macos11.pkg" }, - { identifier = "cp312-macosx_universal2", version = "3.12", url = "https://www.python.org/ftp/python/3.12.2/python-3.12.2-macos11.pkg" }, + { identifier = "cp312-macosx_x86_64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.3/python-3.12.3-macos11.pkg" }, + { identifier = "cp312-macosx_arm64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.3/python-3.12.3-macos11.pkg" }, + { identifier = "cp312-macosx_universal2", version = "3.12", url = "https://www.python.org/ftp/python/3.12.3/python-3.12.3-macos11.pkg" }, { identifier = "pp37-macosx_x86_64", version = "3.7", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-osx64.tar.bz2" }, { identifier = "pp38-macosx_x86_64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_x86_64.tar.bz2" }, { identifier = "pp38-macosx_arm64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_arm64.tar.bz2" }, @@ -126,12 +126,12 @@ python_configurations = [ { identifier = "cp310-win_amd64", version = "3.10.11", arch = "64" }, { identifier = "cp311-win32", version = "3.11.9", arch = "32" }, { identifier = "cp311-win_amd64", version = "3.11.9", arch = "64" }, - { identifier = "cp312-win32", version = "3.12.2", arch = "32" }, - { identifier = "cp312-win_amd64", version = "3.12.2", arch = "64" }, + { identifier = "cp312-win32", version = "3.12.3", arch = "32" }, + { identifier = "cp312-win_amd64", version = "3.12.3", arch = "64" }, { identifier = "cp39-win_arm64", version = "3.9.10", arch = "ARM64" }, { identifier = "cp310-win_arm64", version = "3.10.11", arch = "ARM64" }, { identifier = "cp311-win_arm64", version = "3.11.9", arch = "ARM64" }, - { identifier = "cp312-win_arm64", version = "3.12.2", arch = "ARM64" }, + { identifier = "cp312-win_arm64", version = "3.12.3", arch = "ARM64" }, { identifier = "pp37-win_amd64", version = "3.7", arch = "64", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-win64.zip" }, { identifier = "pp38-win_amd64", version = "3.8", arch = "64", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-win64.zip" }, { identifier = "pp39-win_amd64", version = "3.9", arch = "64", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.15-win64.zip" }, diff --git a/cibuildwheel/resources/constraints-python310.txt b/cibuildwheel/resources/constraints-python310.txt index c4af2efe4..1bdd7a271 100644 --- a/cibuildwheel/resources/constraints-python310.txt +++ b/cibuildwheel/resources/constraints-python310.txt @@ -6,7 +6,7 @@ build==1.2.1 delocate==0.11.0 distlib==0.3.8 # via virtualenv -filelock==3.13.3 +filelock==3.13.4 # via virtualenv importlib-metadata==7.1.0 # via build @@ -27,6 +27,6 @@ tomli==2.0.1 # pyproject-hooks typing-extensions==4.11.0 # via delocate -virtualenv==20.25.1 +virtualenv==20.25.3 zipp==3.18.1 # via importlib-metadata diff --git a/cibuildwheel/resources/constraints-python311.txt b/cibuildwheel/resources/constraints-python311.txt index d943b36bc..cbcc429fa 100644 --- a/cibuildwheel/resources/constraints-python311.txt +++ b/cibuildwheel/resources/constraints-python311.txt @@ -6,7 +6,7 @@ build==1.2.1 delocate==0.11.0 distlib==0.3.8 # via virtualenv -filelock==3.13.3 +filelock==3.13.4 # via virtualenv macholib==1.16.3 # via delocate @@ -21,4 +21,4 @@ pyproject-hooks==1.0.0 # via build typing-extensions==4.11.0 # via delocate -virtualenv==20.25.1 +virtualenv==20.25.3 diff --git a/cibuildwheel/resources/constraints-python312.txt b/cibuildwheel/resources/constraints-python312.txt index d943b36bc..cbcc429fa 100644 --- a/cibuildwheel/resources/constraints-python312.txt +++ b/cibuildwheel/resources/constraints-python312.txt @@ -6,7 +6,7 @@ build==1.2.1 delocate==0.11.0 distlib==0.3.8 # via virtualenv -filelock==3.13.3 +filelock==3.13.4 # via virtualenv macholib==1.16.3 # via delocate @@ -21,4 +21,4 @@ pyproject-hooks==1.0.0 # via build typing-extensions==4.11.0 # via delocate -virtualenv==20.25.1 +virtualenv==20.25.3 diff --git a/cibuildwheel/resources/constraints-python37.txt b/cibuildwheel/resources/constraints-python37.txt index 39829fed0..946012293 100644 --- a/cibuildwheel/resources/constraints-python37.txt +++ b/cibuildwheel/resources/constraints-python37.txt @@ -32,6 +32,6 @@ typing-extensions==4.7.1 # delocate # importlib-metadata # platformdirs -virtualenv==20.25.1 +virtualenv==20.25.3 zipp==3.15.0 # via importlib-metadata diff --git a/cibuildwheel/resources/constraints-python38.txt b/cibuildwheel/resources/constraints-python38.txt index c4af2efe4..1bdd7a271 100644 --- a/cibuildwheel/resources/constraints-python38.txt +++ b/cibuildwheel/resources/constraints-python38.txt @@ -6,7 +6,7 @@ build==1.2.1 delocate==0.11.0 distlib==0.3.8 # via virtualenv -filelock==3.13.3 +filelock==3.13.4 # via virtualenv importlib-metadata==7.1.0 # via build @@ -27,6 +27,6 @@ tomli==2.0.1 # pyproject-hooks typing-extensions==4.11.0 # via delocate -virtualenv==20.25.1 +virtualenv==20.25.3 zipp==3.18.1 # via importlib-metadata diff --git a/cibuildwheel/resources/constraints-python39.txt b/cibuildwheel/resources/constraints-python39.txt index c4af2efe4..1bdd7a271 100644 --- a/cibuildwheel/resources/constraints-python39.txt +++ b/cibuildwheel/resources/constraints-python39.txt @@ -6,7 +6,7 @@ build==1.2.1 delocate==0.11.0 distlib==0.3.8 # via virtualenv -filelock==3.13.3 +filelock==3.13.4 # via virtualenv importlib-metadata==7.1.0 # via build @@ -27,6 +27,6 @@ tomli==2.0.1 # pyproject-hooks typing-extensions==4.11.0 # via delocate -virtualenv==20.25.1 +virtualenv==20.25.3 zipp==3.18.1 # via importlib-metadata diff --git a/cibuildwheel/resources/constraints.txt b/cibuildwheel/resources/constraints.txt index d943b36bc..cbcc429fa 100644 --- a/cibuildwheel/resources/constraints.txt +++ b/cibuildwheel/resources/constraints.txt @@ -6,7 +6,7 @@ build==1.2.1 delocate==0.11.0 distlib==0.3.8 # via virtualenv -filelock==3.13.3 +filelock==3.13.4 # via virtualenv macholib==1.16.3 # via delocate @@ -21,4 +21,4 @@ pyproject-hooks==1.0.0 # via build typing-extensions==4.11.0 # via delocate -virtualenv==20.25.1 +virtualenv==20.25.3 diff --git a/cibuildwheel/resources/pinned_docker_images.cfg b/cibuildwheel/resources/pinned_docker_images.cfg index 83321ad18..44523c747 100644 --- a/cibuildwheel/resources/pinned_docker_images.cfg +++ b/cibuildwheel/resources/pinned_docker_images.cfg @@ -1,54 +1,54 @@ [x86_64] -manylinux1 = quay.io/pypa/manylinux1_x86_64:2024-03-25-69f3367 +manylinux1 = quay.io/pypa/manylinux1_x86_64:2024-04-14-979f9bc manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-04-02-96b33b9 +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-04-21-6ae659e manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-04-02-96b33b9 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024-04-02-96b33b9 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024-04-02-96b33b9 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-04-21-6ae659e +musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024-04-21-6ae659e +musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024-04-21-6ae659e [i686] -manylinux1 = quay.io/pypa/manylinux1_i686:2024-03-25-69f3367 +manylinux1 = quay.io/pypa/manylinux1_i686:2024-04-14-979f9bc manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-04-02-96b33b9 +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-04-21-6ae659e manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024-04-02-96b33b9 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024-04-02-96b33b9 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024-04-21-6ae659e +musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024-04-21-6ae659e [pypy_x86_64] manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-04-02-96b33b9 +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-04-21-6ae659e manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-04-02-96b33b9 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-04-21-6ae659e [pypy_i686] manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-04-02-96b33b9 +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-04-21-6ae659e manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 [aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-04-02-96b33b9 +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-04-21-6ae659e manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-04-02-96b33b9 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024-04-02-96b33b9 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024-04-02-96b33b9 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-04-21-6ae659e +musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024-04-21-6ae659e +musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024-04-21-6ae659e [ppc64le] -manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024-04-02-96b33b9 +manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024-04-21-6ae659e manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024-04-02-96b33b9 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024-04-02-96b33b9 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024-04-02-96b33b9 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024-04-21-6ae659e +musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024-04-21-6ae659e +musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024-04-21-6ae659e [s390x] -manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024-04-02-96b33b9 +manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024-04-21-6ae659e manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024-04-02-96b33b9 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024-04-02-96b33b9 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024-04-02-96b33b9 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024-04-21-6ae659e +musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024-04-21-6ae659e +musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024-04-21-6ae659e [pypy_aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-04-02-96b33b9 +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-04-21-6ae659e manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-04-02-96b33b9 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-04-21-6ae659e diff --git a/docs/working-examples.md b/docs/working-examples.md index 58b00d413..0994da655 100644 --- a/docs/working-examples.md +++ b/docs/working-examples.md @@ -58,13 +58,13 @@ title: Working examples | [OpenColorIO][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A color management framework for visual effects and animation. | | [SimpleJSON][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | simplejson is a simple, fast, extensible JSON encoder/decoder for Python | | [aioquic][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | QUIC and HTTP/3 implementation in Python | -| [ruptures][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Extensive Cython + NumPy [pyproject.toml](https://github.com/deepcharles/ruptures/blob/master/pyproject.toml) example. | | [Psycopg 3][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A modern implementation of a PostgreSQL adapter for Python | +| [ruptures][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Extensive Cython + NumPy [pyproject.toml](https://github.com/deepcharles/ruptures/blob/master/pyproject.toml) example. | | [OpenTimelineIO][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Open Source API and interchange format for editorial timeline information. | | [PyTables][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python package to manage extremely large amounts of data | | [Parselmouth][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python interface to the Praat software package, using pybind11, C++17 and CMake, with the core Praat static library built only once and shared between wheels. | -| [DeepForest][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | An Efficient, Scalable and Optimized Python Framework for Deep Forest (2021.2.1) | | [google neuroglancer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | WebGL-based viewer for volumetric data | +| [DeepForest][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | An Efficient, Scalable and Optimized Python Framework for Deep Forest (2021.2.1) | | [AutoPy][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. | | [H3-py][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Python bindings for H3, a hierarchical hexagonal geospatial indexing system | | [mosec][] | ![github icon][] | ![linux icon][] ![apple icon][] | A machine learning model serving framework powered by Rust | @@ -94,8 +94,8 @@ title: Working examples | [bx-python][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | A library that includes Cython extensions. | | [boost-histogram][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Supports full range of wheels, including PyPy and alternate archs. | | [Python-WebRTC][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | a Python extension that provides bindings to WebRTC M92 | -| [pybase64][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast Base64 encoding/decoding in Python | | [power-grid-model][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python/C++ library for distribution power system analysis | +| [pybase64][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast Base64 encoding/decoding in Python | | [fathon][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | python package for DFA (Detrended Fluctuation Analysis) and related algorithms | | [Imagecodecs (fork)][] | ![azurepipelines icon][] | ![apple icon][] ![linux icon][] | Over 20 external dependencies in compiled libraries, custom docker image, `libomp`, `openblas` and `install_name_tool` for macOS. | | [Arbor][] | ![github icon][] | ![apple icon][] ![linux icon][] | Arbor is a multi-compartment neuron simulation library; compatible with next-generation accelerators; best-practices applied to research software; focused on community-driven development. Includes a [small script](https://github.com/arbor-sim/arbor/blob/master/scripts/patchwheel.py) patching `rpath` in bundled libraries. | @@ -167,13 +167,13 @@ title: Working examples [OpenColorIO]: https://github.com/AcademySoftwareFoundation/OpenColorIO [SimpleJSON]: https://github.com/simplejson/simplejson [aioquic]: https://github.com/aiortc/aioquic -[ruptures]: https://github.com/deepcharles/ruptures [Psycopg 3]: https://github.com/psycopg/psycopg +[ruptures]: https://github.com/deepcharles/ruptures [OpenTimelineIO]: https://github.com/PixarAnimationStudios/OpenTimelineIO [PyTables]: https://github.com/PyTables/PyTables [Parselmouth]: https://github.com/YannickJadoul/Parselmouth -[DeepForest]: https://github.com/LAMDA-NJU/Deep-Forest [google neuroglancer]: https://github.com/google/neuroglancer +[DeepForest]: https://github.com/LAMDA-NJU/Deep-Forest [AutoPy]: https://github.com/autopilot-rs/autopy [H3-py]: https://github.com/uber/h3-py [mosec]: https://github.com/mosecorg/mosec @@ -203,8 +203,8 @@ title: Working examples [bx-python]: https://github.com/bxlab/bx-python [boost-histogram]: https://github.com/scikit-hep/boost-histogram [Python-WebRTC]: https://github.com/MarshalX/python-webrtc -[pybase64]: https://github.com/mayeut/pybase64 [power-grid-model]: https://github.com/alliander-opensource/power-grid-model +[pybase64]: https://github.com/mayeut/pybase64 [fathon]: https://github.com/stfbnc/fathon [Imagecodecs (fork)]: https://github.com/czaki/imagecodecs_build [Arbor]: https://github.com/arbor-sim/arbor From 950fbd0a609da1ed58e9c090acd5cf8a229f7820 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Thu, 25 Apr 2024 09:43:01 +1000 Subject: [PATCH 18/44] Updated actions/setup-python in docs --- README.md | 2 +- docs/setup.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 118a75861..332831453 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,7 @@ jobs: - uses: actions/checkout@v4 # Used to host cibuildwheel - - uses: actions/setup-python@v3 + - uses: actions/setup-python@v5 - name: Install cibuildwheel run: python -m pip install cibuildwheel==2.17.0 diff --git a/docs/setup.md b/docs/setup.md index 3ecf5c136..211411368 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -188,7 +188,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/ - uses: actions/checkout@v4 # Used to host cibuildwheel - - uses: actions/setup-python@v3 + - uses: actions/setup-python@v5 - name: Install cibuildwheel run: python -m pip install cibuildwheel==2.17.0 From 988d512fb3dfde407a9e2da943902d6227e34fa0 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 7 May 2024 17:29:40 -0400 Subject: [PATCH 19/44] [pre-commit.ci] pre-commit autoupdate (#1813) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.4.1 β†’ v0.4.3](https://github.com/astral-sh/ruff-pre-commit/compare/v0.4.1...v0.4.3) - [github.com/pre-commit/mirrors-mypy: v1.9.0 β†’ v1.10.0](https://github.com/pre-commit/mirrors-mypy/compare/v1.9.0...v1.10.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 66af454ea..aae22cad7 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,7 +14,7 @@ repos: - id: trailing-whitespace - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.4.1 + rev: v0.4.3 hooks: - id: ruff args: ["--fix", "--show-fixes"] @@ -27,7 +27,7 @@ repos: args: [--include-version-classifiers, --min-py-version=3.8, --max-py-version=3.12] - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.9.0 + rev: v1.10.0 hooks: - id: mypy name: mypy 3.8 on cibuildwheel/ From 30a0decb47aff80ee8909c918eb89b75ff422643 Mon Sep 17 00:00:00 2001 From: "cibuildwheel-bot[bot]" <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> Date: Tue, 7 May 2024 17:29:50 -0400 Subject: [PATCH 20/44] [Bot] Update dependencies (#1812) Update dependencies Co-authored-by: cibuildwheel-bot[bot] <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> --- cibuildwheel/resources/build-platforms.toml | 12 ++--- .../resources/constraints-python310.txt | 12 ++--- .../resources/constraints-python311.txt | 8 +-- .../resources/constraints-python312.txt | 8 +-- .../resources/constraints-python37.txt | 8 ++- .../resources/constraints-python38.txt | 12 ++--- .../resources/constraints-python39.txt | 12 ++--- cibuildwheel/resources/constraints.txt | 8 +-- .../resources/pinned_docker_images.cfg | 52 +++++++++---------- docs/working-examples.md | 12 ++--- 10 files changed, 68 insertions(+), 76 deletions(-) diff --git a/cibuildwheel/resources/build-platforms.toml b/cibuildwheel/resources/build-platforms.toml index c0a3f65c7..a102fac1e 100644 --- a/cibuildwheel/resources/build-platforms.toml +++ b/cibuildwheel/resources/build-platforms.toml @@ -106,10 +106,10 @@ python_configurations = [ { identifier = "pp37-macosx_x86_64", version = "3.7", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-osx64.tar.bz2" }, { identifier = "pp38-macosx_x86_64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_x86_64.tar.bz2" }, { identifier = "pp38-macosx_arm64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_arm64.tar.bz2" }, - { identifier = "pp39-macosx_x86_64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.15-macos_x86_64.tar.bz2" }, - { identifier = "pp39-macosx_arm64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.15-macos_arm64.tar.bz2" }, - { identifier = "pp310-macosx_x86_64", version = "3.10", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.15-macos_x86_64.tar.bz2" }, - { identifier = "pp310-macosx_arm64", version = "3.10", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.15-macos_arm64.tar.bz2" }, + { identifier = "pp39-macosx_x86_64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-macos_x86_64.tar.bz2" }, + { identifier = "pp39-macosx_arm64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-macos_arm64.tar.bz2" }, + { identifier = "pp310-macosx_x86_64", version = "3.10", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.16-macos_x86_64.tar.bz2" }, + { identifier = "pp310-macosx_arm64", version = "3.10", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.16-macos_arm64.tar.bz2" }, ] [windows] @@ -134,6 +134,6 @@ python_configurations = [ { identifier = "cp312-win_arm64", version = "3.12.3", arch = "ARM64" }, { identifier = "pp37-win_amd64", version = "3.7", arch = "64", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-win64.zip" }, { identifier = "pp38-win_amd64", version = "3.8", arch = "64", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-win64.zip" }, - { identifier = "pp39-win_amd64", version = "3.9", arch = "64", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.15-win64.zip" }, - { identifier = "pp310-win_amd64", version = "3.10", arch = "64", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.15-win64.zip" }, + { identifier = "pp39-win_amd64", version = "3.9", arch = "64", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-win64.zip" }, + { identifier = "pp310-win_amd64", version = "3.10", arch = "64", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.16-win64.zip" }, ] diff --git a/cibuildwheel/resources/constraints-python310.txt b/cibuildwheel/resources/constraints-python310.txt index 1bdd7a271..b2ecb3977 100644 --- a/cibuildwheel/resources/constraints-python310.txt +++ b/cibuildwheel/resources/constraints-python310.txt @@ -6,7 +6,7 @@ build==1.2.1 delocate==0.11.0 distlib==0.3.8 # via virtualenv -filelock==3.13.4 +filelock==3.14.0 # via virtualenv importlib-metadata==7.1.0 # via build @@ -17,16 +17,14 @@ packaging==24.0 # build # delocate pip==24.0 -platformdirs==4.2.0 +platformdirs==4.2.1 # via virtualenv -pyproject-hooks==1.0.0 +pyproject-hooks==1.1.0 # via build tomli==2.0.1 - # via - # build - # pyproject-hooks + # via build typing-extensions==4.11.0 # via delocate -virtualenv==20.25.3 +virtualenv==20.26.1 zipp==3.18.1 # via importlib-metadata diff --git a/cibuildwheel/resources/constraints-python311.txt b/cibuildwheel/resources/constraints-python311.txt index cbcc429fa..f9325ba0a 100644 --- a/cibuildwheel/resources/constraints-python311.txt +++ b/cibuildwheel/resources/constraints-python311.txt @@ -6,7 +6,7 @@ build==1.2.1 delocate==0.11.0 distlib==0.3.8 # via virtualenv -filelock==3.13.4 +filelock==3.14.0 # via virtualenv macholib==1.16.3 # via delocate @@ -15,10 +15,10 @@ packaging==24.0 # build # delocate pip==24.0 -platformdirs==4.2.0 +platformdirs==4.2.1 # via virtualenv -pyproject-hooks==1.0.0 +pyproject-hooks==1.1.0 # via build typing-extensions==4.11.0 # via delocate -virtualenv==20.25.3 +virtualenv==20.26.1 diff --git a/cibuildwheel/resources/constraints-python312.txt b/cibuildwheel/resources/constraints-python312.txt index cbcc429fa..f9325ba0a 100644 --- a/cibuildwheel/resources/constraints-python312.txt +++ b/cibuildwheel/resources/constraints-python312.txt @@ -6,7 +6,7 @@ build==1.2.1 delocate==0.11.0 distlib==0.3.8 # via virtualenv -filelock==3.13.4 +filelock==3.14.0 # via virtualenv macholib==1.16.3 # via delocate @@ -15,10 +15,10 @@ packaging==24.0 # build # delocate pip==24.0 -platformdirs==4.2.0 +platformdirs==4.2.1 # via virtualenv -pyproject-hooks==1.0.0 +pyproject-hooks==1.1.0 # via build typing-extensions==4.11.0 # via delocate -virtualenv==20.25.3 +virtualenv==20.26.1 diff --git a/cibuildwheel/resources/constraints-python37.txt b/cibuildwheel/resources/constraints-python37.txt index 946012293..a675ef132 100644 --- a/cibuildwheel/resources/constraints-python37.txt +++ b/cibuildwheel/resources/constraints-python37.txt @@ -21,17 +21,15 @@ packaging==24.0 pip==24.0 platformdirs==4.0.0 # via virtualenv -pyproject-hooks==1.0.0 +pyproject-hooks==1.1.0 # via build tomli==2.0.1 - # via - # build - # pyproject-hooks + # via build typing-extensions==4.7.1 # via # delocate # importlib-metadata # platformdirs -virtualenv==20.25.3 +virtualenv==20.26.1 zipp==3.15.0 # via importlib-metadata diff --git a/cibuildwheel/resources/constraints-python38.txt b/cibuildwheel/resources/constraints-python38.txt index 1bdd7a271..b2ecb3977 100644 --- a/cibuildwheel/resources/constraints-python38.txt +++ b/cibuildwheel/resources/constraints-python38.txt @@ -6,7 +6,7 @@ build==1.2.1 delocate==0.11.0 distlib==0.3.8 # via virtualenv -filelock==3.13.4 +filelock==3.14.0 # via virtualenv importlib-metadata==7.1.0 # via build @@ -17,16 +17,14 @@ packaging==24.0 # build # delocate pip==24.0 -platformdirs==4.2.0 +platformdirs==4.2.1 # via virtualenv -pyproject-hooks==1.0.0 +pyproject-hooks==1.1.0 # via build tomli==2.0.1 - # via - # build - # pyproject-hooks + # via build typing-extensions==4.11.0 # via delocate -virtualenv==20.25.3 +virtualenv==20.26.1 zipp==3.18.1 # via importlib-metadata diff --git a/cibuildwheel/resources/constraints-python39.txt b/cibuildwheel/resources/constraints-python39.txt index 1bdd7a271..b2ecb3977 100644 --- a/cibuildwheel/resources/constraints-python39.txt +++ b/cibuildwheel/resources/constraints-python39.txt @@ -6,7 +6,7 @@ build==1.2.1 delocate==0.11.0 distlib==0.3.8 # via virtualenv -filelock==3.13.4 +filelock==3.14.0 # via virtualenv importlib-metadata==7.1.0 # via build @@ -17,16 +17,14 @@ packaging==24.0 # build # delocate pip==24.0 -platformdirs==4.2.0 +platformdirs==4.2.1 # via virtualenv -pyproject-hooks==1.0.0 +pyproject-hooks==1.1.0 # via build tomli==2.0.1 - # via - # build - # pyproject-hooks + # via build typing-extensions==4.11.0 # via delocate -virtualenv==20.25.3 +virtualenv==20.26.1 zipp==3.18.1 # via importlib-metadata diff --git a/cibuildwheel/resources/constraints.txt b/cibuildwheel/resources/constraints.txt index cbcc429fa..f9325ba0a 100644 --- a/cibuildwheel/resources/constraints.txt +++ b/cibuildwheel/resources/constraints.txt @@ -6,7 +6,7 @@ build==1.2.1 delocate==0.11.0 distlib==0.3.8 # via virtualenv -filelock==3.13.4 +filelock==3.14.0 # via virtualenv macholib==1.16.3 # via delocate @@ -15,10 +15,10 @@ packaging==24.0 # build # delocate pip==24.0 -platformdirs==4.2.0 +platformdirs==4.2.1 # via virtualenv -pyproject-hooks==1.0.0 +pyproject-hooks==1.1.0 # via build typing-extensions==4.11.0 # via delocate -virtualenv==20.25.3 +virtualenv==20.26.1 diff --git a/cibuildwheel/resources/pinned_docker_images.cfg b/cibuildwheel/resources/pinned_docker_images.cfg index 44523c747..afccc87d1 100644 --- a/cibuildwheel/resources/pinned_docker_images.cfg +++ b/cibuildwheel/resources/pinned_docker_images.cfg @@ -1,54 +1,54 @@ [x86_64] -manylinux1 = quay.io/pypa/manylinux1_x86_64:2024-04-14-979f9bc +manylinux1 = quay.io/pypa/manylinux1_x86_64:2024-04-29-76807b8 manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-04-21-6ae659e +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-04-29-07d05a0 manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-04-21-6ae659e -musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024-04-21-6ae659e -musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024-04-21-6ae659e +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-04-29-07d05a0 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024-04-29-07d05a0 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024-04-29-07d05a0 [i686] -manylinux1 = quay.io/pypa/manylinux1_i686:2024-04-14-979f9bc +manylinux1 = quay.io/pypa/manylinux1_i686:2024-04-29-76807b8 manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-04-21-6ae659e +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-04-29-07d05a0 manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024-04-21-6ae659e -musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024-04-21-6ae659e +musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024-04-29-07d05a0 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024-04-29-07d05a0 [pypy_x86_64] manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-04-21-6ae659e +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-04-29-07d05a0 manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-04-21-6ae659e +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-04-29-07d05a0 [pypy_i686] manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-04-21-6ae659e +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-04-29-07d05a0 manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 [aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-04-21-6ae659e +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-04-29-07d05a0 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-04-21-6ae659e -musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024-04-21-6ae659e -musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024-04-21-6ae659e +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-04-29-07d05a0 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024-04-29-07d05a0 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024-04-29-07d05a0 [ppc64le] -manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024-04-21-6ae659e +manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024-04-29-07d05a0 manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024-04-21-6ae659e -musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024-04-21-6ae659e -musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024-04-21-6ae659e +manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024-04-29-07d05a0 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024-04-29-07d05a0 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024-04-29-07d05a0 [s390x] -manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024-04-21-6ae659e +manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024-04-29-07d05a0 manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024-04-21-6ae659e -musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024-04-21-6ae659e -musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024-04-21-6ae659e +manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024-04-29-07d05a0 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024-04-29-07d05a0 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024-04-29-07d05a0 [pypy_aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-04-21-6ae659e +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-04-29-07d05a0 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-04-21-6ae659e +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-04-29-07d05a0 diff --git a/docs/working-examples.md b/docs/working-examples.md index 0994da655..6460c6055 100644 --- a/docs/working-examples.md +++ b/docs/working-examples.md @@ -74,8 +74,8 @@ title: Working examples | [Rtree][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Rtree: spatial index for Python GIS | | [pybind11 cmake_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a CMake-based build system | | [KDEpy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Kernel Density Estimation in Python | -| [python-rapidjson][] | ![travisci icon][] ![gitlab icon][] ![appveyor icon][] | ![windows icon][] ![linux icon][] | Python wrapper around rapidjson | | [dd-trace-py][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Uses custom alternate arch emulation on GitHub | +| [python-rapidjson][] | ![travisci icon][] ![gitlab icon][] ![appveyor icon][] | ![windows icon][] ![linux icon][] | Python wrapper around rapidjson | | [tgcalls][] | ![github icon][] | ![apple icon][] ![windows icon][] | Python `pybind11` binding to Telegram's WebRTC library with third party dependencies like `OpenSSL`, `MozJPEG`, `FFmpeg`, etc. | | [python-snappy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Python bindings for the snappy google library | | [pybind11 python_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a Python-based build system | @@ -101,8 +101,8 @@ title: Working examples | [Arbor][] | ![github icon][] | ![apple icon][] ![linux icon][] | Arbor is a multi-compartment neuron simulation library; compatible with next-generation accelerators; best-practices applied to research software; focused on community-driven development. Includes a [small script](https://github.com/arbor-sim/arbor/blob/master/scripts/patchwheel.py) patching `rpath` in bundled libraries. | | [pybind11 scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | An example combining scikit-build and pybind11 | | [polaroid][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Full range of wheels for setuptools rust, with auto release and PyPI deploy. | -| [etebase-py][] | ![travisci icon][] | ![linux icon][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. | | [clang-format][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Scikit-build wrapper around LLVM's CMake, all platforms, generic wheels. | +| [etebase-py][] | ![travisci icon][] | ![linux icon][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. | | [cf-units][] | ![github icon][] | ![apple icon][] ![linux icon][] | Units of measure as required by the Climate and Forecast (CF) Metadata Conventions | | [ninja][] | ![github icon][] ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Multitagged binary builds for all supported platforms, using cibw 2 config configuration. | | [numpythia][] | ![github icon][] | ![apple icon][] ![linux icon][] | The interface between PYTHIA and NumPy | @@ -111,8 +111,8 @@ title: Working examples | [GSD][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Cython and NumPy project with 64-bit wheels. | | [SiPM][] | ![github icon][] | ![apple icon][] ![linux icon][] | High performance library for SiPM detectors simulation using C++17, OpenMP and AVX2 intrinsics. | | [CorrectionLib][] | ![github icon][] | ![apple icon][] ![linux icon][] | Structured JSON powered correction library for HEP, designed for the CMS experiment at CERN. | -| [xmlstarlet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python 3.6+ CFFI bindings with true MSVC build. | | [aalink][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Async Python interface for Ableton Link. | +| [xmlstarlet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python 3.6+ CFFI bindings with true MSVC build. | | [pyinstrument_cext][] | ![travisci icon][] ![appveyor icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A simple C extension, without external dependencies | | [werpy][] | ![github icon][] | ![windows icon][] ![linux icon][] ![apple icon][] | An ultra-fast python package using optimized dynamic programming to compute the Word Error Rate (WER). | | [pybind11 cross build example][] | ![github icon][] ![gitlab icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Same as pybind11 cmake_example but used to demo Linux ARM + Windows + macOS builds on GitLab | @@ -183,8 +183,8 @@ title: Working examples [Rtree]: https://github.com/Toblerity/rtree [pybind11 cmake_example]: https://github.com/pybind/cmake_example [KDEpy]: https://github.com/tommyod/KDEpy -[python-rapidjson]: https://github.com/python-rapidjson/python-rapidjson [dd-trace-py]: https://github.com/DataDog/dd-trace-py +[python-rapidjson]: https://github.com/python-rapidjson/python-rapidjson [tgcalls]: https://github.com/MarshalX/tgcalls [python-snappy]: https://github.com/andrix/python-snappy [pybind11 python_example]: https://github.com/pybind/python_example @@ -210,8 +210,8 @@ title: Working examples [Arbor]: https://github.com/arbor-sim/arbor [pybind11 scikit_build_example]: https://github.com/pybind/scikit_build_example [polaroid]: https://github.com/daggy1234/polaroid -[etebase-py]: https://github.com/etesync/etebase-py [clang-format]: https://github.com/ssciwr/clang-format-wheel +[etebase-py]: https://github.com/etesync/etebase-py [cf-units]: https://github.com/SciTools/cf-units [ninja]: https://github.com/scikit-build/ninja-python-distributions [numpythia]: https://github.com/scikit-hep/numpythia @@ -220,8 +220,8 @@ title: Working examples [GSD]: https://github.com/glotzerlab/gsd [SiPM]: https://github.com/EdoPro98/SimSiPM [CorrectionLib]: https://github.com/cms-nanoAOD/correctionlib -[xmlstarlet]: https://github.com/dimitern/xmlstarlet [aalink]: https://github.com/artfwo/aalink +[xmlstarlet]: https://github.com/dimitern/xmlstarlet [pyinstrument_cext]: https://github.com/joerick/pyinstrument_cext [werpy]: https://github.com/analyticsinmotion/werpy [pybind11 cross build example]: https://github.com/wbarnha/pybind_cmake_example_crossbuild From 3ea0a6c2f0219d97ff8387b87bd2448dcfb7452c Mon Sep 17 00:00:00 2001 From: Matthieu Darbois Date: Fri, 10 May 2024 21:33:56 +0200 Subject: [PATCH 21/44] fix: respect constraints when building with pip (#1818) When building a project that has a `pyproject.toml`, constraints are not respected when building with the `pip` frontend. This commit fixes this by using the same tricks as for the `build` frontend. --- cibuildwheel/macos.py | 27 ++++++------- cibuildwheel/windows.py | 68 ++++++++++++++++---------------- test/test_dependency_versions.py | 49 ++++++++--------------- 3 files changed, 63 insertions(+), 81 deletions(-) diff --git a/cibuildwheel/macos.py b/cibuildwheel/macos.py index d72d50427..44f9ecf0e 100644 --- a/cibuildwheel/macos.py +++ b/cibuildwheel/macos.py @@ -381,6 +381,18 @@ def build(options: Options, tmp_path: Path) -> None: ) extra_flags += build_frontend.args + build_env = env.copy() + build_env["VIRTUALENV_PIP"] = get_pip_version(env) + if build_options.dependency_constraints: + constraint_path = build_options.dependency_constraints.get_for_python_version( + config.version + ) + user_constraints = build_env.get("PIP_CONSTRAINT") + our_constraints = constraint_path.as_uri() + build_env["PIP_CONSTRAINT"] = " ".join( + c for c in [user_constraints, our_constraints] if c + ) + if build_frontend.name == "pip": extra_flags += get_build_verbosity_extra_flags(build_options.build_verbosity) # Path.resolve() is needed. Without it pip wheel may try to fetch package from pypi.org @@ -394,25 +406,12 @@ def build(options: Options, tmp_path: Path) -> None: f"--wheel-dir={built_wheel_dir}", "--no-deps", *extra_flags, - env=env, + env=build_env, ) elif build_frontend.name == "build": if not 0 <= build_options.build_verbosity < 2: msg = f"build_verbosity {build_options.build_verbosity} is not supported for build frontend. Ignoring." log.warning(msg) - build_env = env.copy() - if build_options.dependency_constraints: - constraint_path = ( - build_options.dependency_constraints.get_for_python_version( - config.version - ) - ) - user_constraints = build_env.get("PIP_CONSTRAINT") - our_constraints = constraint_path.as_uri() - build_env["PIP_CONSTRAINT"] = " ".join( - c for c in [user_constraints, our_constraints] if c - ) - build_env["VIRTUALENV_PIP"] = get_pip_version(env) call( "python", "-m", diff --git a/cibuildwheel/windows.py b/cibuildwheel/windows.py index d2be65783..13d3a1857 100644 --- a/cibuildwheel/windows.py +++ b/cibuildwheel/windows.py @@ -407,6 +407,28 @@ def build(options: Options, tmp_path: Path) -> None: ) extra_flags += build_frontend.args + build_env = env.copy() + build_env["VIRTUALENV_PIP"] = get_pip_version(env) + if build_options.dependency_constraints: + constraints_path = build_options.dependency_constraints.get_for_python_version( + config.version + ) + # Bug in pip <= 21.1.3 - we can't have a space in the + # constraints file, and pip doesn't support drive letters + # in uhi. After probably pip 21.2, we can use uri. For + # now, use a temporary file. + if " " in str(constraints_path): + assert " " not in str(identifier_tmp_dir) + tmp_file = identifier_tmp_dir / "constraints.txt" + tmp_file.write_bytes(constraints_path.read_bytes()) + constraints_path = tmp_file + + our_constraints = str(constraints_path) + user_constraints = build_env.get("PIP_CONSTRAINT") + build_env["PIP_CONSTRAINT"] = " ".join( + c for c in [our_constraints, user_constraints] if c + ) + if build_frontend.name == "pip": extra_flags += get_build_verbosity_extra_flags(build_options.build_verbosity) # Path.resolve() is needed. Without it pip wheel may try to fetch package from pypi.org @@ -420,46 +442,22 @@ def build(options: Options, tmp_path: Path) -> None: f"--wheel-dir={built_wheel_dir}", "--no-deps", *extra_flags, - env=env, + env=build_env, ) elif build_frontend.name == "build": if not 0 <= build_options.build_verbosity < 2: msg = f"build_verbosity {build_options.build_verbosity} is not supported for build frontend. Ignoring." log.warning(msg) - build_env = env.copy() - if build_options.dependency_constraints: - constraints_path = ( - build_options.dependency_constraints.get_for_python_version( - config.version - ) - ) - # Bug in pip <= 21.1.3 - we can't have a space in the - # constraints file, and pip doesn't support drive letters - # in uhi. After probably pip 21.2, we can use uri. For - # now, use a temporary file. - if " " in str(constraints_path): - assert " " not in str(identifier_tmp_dir) - tmp_file = identifier_tmp_dir / "constraints.txt" - tmp_file.write_bytes(constraints_path.read_bytes()) - constraints_path = tmp_file - - our_constraints = str(constraints_path) - user_constraints = build_env.get("PIP_CONSTRAINT") - build_env["PIP_CONSTRAINT"] = " ".join( - c for c in [our_constraints, user_constraints] if c - ) - - build_env["VIRTUALENV_PIP"] = get_pip_version(env) - call( - "python", - "-m", - "build", - build_options.package_dir, - "--wheel", - f"--outdir={built_wheel_dir}", - *extra_flags, - env=build_env, - ) + call( + "python", + "-m", + "build", + build_options.package_dir, + "--wheel", + f"--outdir={built_wheel_dir}", + *extra_flags, + env=build_env, + ) else: assert_never(build_frontend) diff --git a/test/test_dependency_versions.py b/test/test_dependency_versions.py index 739e8d0ac..760675d74 100644 --- a/test/test_dependency_versions.py +++ b/test/test_dependency_versions.py @@ -15,9 +15,10 @@ r""" import subprocess import os + import sys versions_output_text = subprocess.check_output( - ['pip', 'freeze', '--all', '-qq'], + [sys.executable, '-m', 'pip', 'freeze', '--all', '-qq'], universal_newlines=True, ) versions = versions_output_text.strip().splitlines() @@ -36,6 +37,11 @@ ) ) +project_with_expected_version_checks.files["pyproject.toml"] = r""" +[build-system] +requires = ["setuptools", "pip"] +build-backend = "setuptools.build_meta" +""" VERSION_REGEX = r"([\w-]+)==([^\s]+)" @@ -50,27 +56,16 @@ def get_versions_from_constraint_file(constraint_file): def test_pinned_versions(tmp_path, python_version, build_frontend_env): if utils.platform == "linux": pytest.skip("linux doesn't pin individual tool versions, it pins manylinux images instead") + if python_version == "3.6" and utils.platform == "macos" and platform.machine() == "arm64": + pytest.skip("macOS arm64 does not support Python 3.6") project_dir = tmp_path / "project" project_with_expected_version_checks.generate(project_dir) + version_no_dot = python_version.replace(".", "") build_environment = {} - - if python_version == "3.6": - if utils.platform == "macos" and platform.machine() == "arm64": - pytest.skip("macOS arm64 does not support Python 3.6") - constraint_filename = "constraints-python36.txt" - build_pattern = "[cp]p36-*" - elif python_version == "3.7": - constraint_filename = "constraints-python37.txt" - build_pattern = "[cp]p37-*" - elif python_version == "3.8": - constraint_filename = "constraints-python38.txt" - build_pattern = "[cp]p38-*" - else: - constraint_filename = "constraints-python310.txt" - build_pattern = "[cp]p310-*" - + build_pattern = f"[cp]p{version_no_dot}-*" + constraint_filename = f"constraints-python{version_no_dot}.txt" constraint_file = cibuildwheel.util.resources_dir / constraint_filename constraint_versions = get_versions_from_constraint_file(constraint_file) @@ -89,21 +84,11 @@ def test_pinned_versions(tmp_path, python_version, build_frontend_env): ) # also check that we got the right wheels - if python_version == "3.6": - expected_wheels = [ - w for w in utils.expected_wheels("spam", "0.1.0") if "-cp36" in w or "-pp36" in w - ] - elif python_version == "3.8": - expected_wheels = [ - w for w in utils.expected_wheels("spam", "0.1.0") if "-cp38" in w or "-pp38" in w - ] - elif python_version == "3.10": - expected_wheels = [ - w for w in utils.expected_wheels("spam", "0.1.0") if "-cp310" in w or "-pp310" in w - ] - else: - msg = "unhandled python version" - raise ValueError(msg) + expected_wheels = [ + w + for w in utils.expected_wheels("spam", "0.1.0") + if f"-cp{version_no_dot}" in w or f"-pp{version_no_dot}" in w + ] assert set(actual_wheels) == set(expected_wheels) From cf18014fce969628c72a266396f72ef672e9a8d4 Mon Sep 17 00:00:00 2001 From: Matthieu Darbois Date: Sat, 11 May 2024 22:24:01 +0200 Subject: [PATCH 22/44] fix: do not pre-seed setuptools / wheel in virtual environment (#1819) --- .../resources/constraints-python36.txt | 2 ++ cibuildwheel/util.py | 19 ++++++++++++++----- test/test_abi_variants.py | 10 ++++++++++ 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/cibuildwheel/resources/constraints-python36.txt b/cibuildwheel/resources/constraints-python36.txt index ff4e8609d..409e75c10 100644 --- a/cibuildwheel/resources/constraints-python36.txt +++ b/cibuildwheel/resources/constraints-python36.txt @@ -48,3 +48,5 @@ zipp==3.6.0 # The following packages are considered to be unsafe in a requirements file: pip==21.3.1 # via -r cibuildwheel/resources/constraints.in +setuptools==59.6.0 + # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/util.py b/cibuildwheel/util.py index fb334257f..a225575b8 100644 --- a/cibuildwheel/util.py +++ b/cibuildwheel/util.py @@ -540,6 +540,7 @@ def _ensure_virtualenv() -> Path: def _parse_constraints_for_virtualenv( + seed_packages: list[str], dependency_constraint_flags: Sequence[PathOrStr], ) -> dict[str, str]: """ @@ -552,8 +553,8 @@ def _parse_constraints_for_virtualenv( {macos|windows}.setup_python function. """ assert len(dependency_constraint_flags) in {0, 2} - packages = ["pip", "setuptools", "wheel"] - constraints_dict = {package: "embed" for package in packages} + # only seed pip if other seed packages do not appear in a constraint file + constraints_dict = {"pip": "embed"} if len(dependency_constraint_flags) == 2: assert dependency_constraint_flags[0] == "-c" constraint_path = Path(dependency_constraint_flags[1]) @@ -569,7 +570,7 @@ def _parse_constraints_for_virtualenv( requirement = Requirement(line) package = requirement.name if ( - package not in packages + package not in seed_packages or requirement.url is not None or requirement.marker is not None or len(requirement.extras) != 0 @@ -590,8 +591,16 @@ def virtualenv( ) -> dict[str, str]: assert python.exists() virtualenv_app = _ensure_virtualenv() - constraints = _parse_constraints_for_virtualenv(dependency_constraint_flags) - additional_flags = [f"--{package}={version}" for package, version in constraints.items()] + allowed_seed_packages = ["pip", "setuptools", "wheel"] + constraints = _parse_constraints_for_virtualenv( + allowed_seed_packages, dependency_constraint_flags + ) + additional_flags: list[str] = [] + for package in allowed_seed_packages: + if package in constraints: + additional_flags.append(f"--{package}={constraints[package]}") + else: + additional_flags.append(f"--no-{package}") # Using symlinks to pre-installed seed packages is really the fastest way to get a virtual # environment. The initial cost is a bit higher but reusing is much faster. diff --git a/test/test_abi_variants.py b/test/test_abi_variants.py index 131b1ee9f..d203c06fe 100644 --- a/test/test_abi_variants.py +++ b/test/test_abi_variants.py @@ -4,6 +4,12 @@ from . import test_projects, utils +pyproject_toml = r""" +[build-system] +requires = ["setuptools", "wheel"] +build-backend = "setuptools.build_meta" +""" + limited_api_project = test_projects.new_c_project( setup_py_add=textwrap.dedent( r""" @@ -30,6 +36,8 @@ def get_tag(self): setup_py_setup_args_add="cmdclass=cmdclass", ) +limited_api_project.files["pyproject.toml"] = pyproject_toml + def test_abi3(tmp_path): project_dir = tmp_path / "project" @@ -155,6 +163,8 @@ def test(): """ ) +ctypes_project.files["pyproject.toml"] = pyproject_toml + def test_abi_none(tmp_path, capfd): project_dir = tmp_path / "project" From c0217440e839c9fe641b7c841016c4325bf99875 Mon Sep 17 00:00:00 2001 From: Matthieu Darbois Date: Sat, 11 May 2024 22:24:48 +0200 Subject: [PATCH 23/44] feat: move default `musllinux` build to `musllinux_1_2` (#1817) --- cibuildwheel/options.py | 2 +- cibuildwheel/resources/defaults.toml | 10 ++-- .../resources/pinned_docker_images.cfg | 48 +++++++++---------- docs/faq.md | 2 +- docs/options.md | 20 +++++--- test/utils.py | 2 +- unit_test/option_prepare_test.py | 6 +-- 7 files changed, 49 insertions(+), 41 deletions(-) diff --git a/cibuildwheel/options.py b/cibuildwheel/options.py index 519917d87..0a733bb23 100644 --- a/cibuildwheel/options.py +++ b/cibuildwheel/options.py @@ -669,7 +669,7 @@ def build_options(self, identifier: str | None) -> BuildOptions: config_value = self.reader.get(f"musllinux-{build_platform}-image") if not config_value: - image = pinned_images["musllinux_1_1"] + image = pinned_images["musllinux_1_2"] elif config_value in pinned_images: image = pinned_images[config_value] else: diff --git a/cibuildwheel/resources/defaults.toml b/cibuildwheel/resources/defaults.toml index cf748c629..b3ddeb95a 100644 --- a/cibuildwheel/resources/defaults.toml +++ b/cibuildwheel/resources/defaults.toml @@ -31,11 +31,11 @@ manylinux-pypy_x86_64-image = "manylinux2014" manylinux-pypy_i686-image = "manylinux2014" manylinux-pypy_aarch64-image = "manylinux2014" -musllinux-x86_64-image = "musllinux_1_1" -musllinux-i686-image = "musllinux_1_1" -musllinux-aarch64-image = "musllinux_1_1" -musllinux-ppc64le-image = "musllinux_1_1" -musllinux-s390x-image = "musllinux_1_1" +musllinux-x86_64-image = "musllinux_1_2" +musllinux-i686-image = "musllinux_1_2" +musllinux-aarch64-image = "musllinux_1_2" +musllinux-ppc64le-image = "musllinux_1_2" +musllinux-s390x-image = "musllinux_1_2" [tool.cibuildwheel.linux] diff --git a/cibuildwheel/resources/pinned_docker_images.cfg b/cibuildwheel/resources/pinned_docker_images.cfg index afccc87d1..d32d9eef1 100644 --- a/cibuildwheel/resources/pinned_docker_images.cfg +++ b/cibuildwheel/resources/pinned_docker_images.cfg @@ -1,54 +1,54 @@ [x86_64] manylinux1 = quay.io/pypa/manylinux1_x86_64:2024-04-29-76807b8 manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-04-29-07d05a0 +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-05-10-7415d48 manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-04-29-07d05a0 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024-04-29-07d05a0 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024-04-29-07d05a0 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-05-10-7415d48 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024-05-10-7415d48 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024-05-10-7415d48 [i686] manylinux1 = quay.io/pypa/manylinux1_i686:2024-04-29-76807b8 manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-04-29-07d05a0 +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-05-10-7415d48 manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024-04-29-07d05a0 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024-04-29-07d05a0 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024-05-10-7415d48 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024-05-10-7415d48 [pypy_x86_64] manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-04-29-07d05a0 +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-05-10-7415d48 manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-04-29-07d05a0 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-05-10-7415d48 [pypy_i686] manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-04-29-07d05a0 +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-05-10-7415d48 manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 [aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-04-29-07d05a0 +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-05-10-7415d48 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-04-29-07d05a0 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024-04-29-07d05a0 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024-04-29-07d05a0 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-05-10-7415d48 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024-05-10-7415d48 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024-05-10-7415d48 [ppc64le] -manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024-04-29-07d05a0 +manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024-05-10-7415d48 manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024-04-29-07d05a0 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024-04-29-07d05a0 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024-04-29-07d05a0 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024-05-10-7415d48 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024-05-10-7415d48 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024-05-10-7415d48 [s390x] -manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024-04-29-07d05a0 +manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024-05-10-7415d48 manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024-04-29-07d05a0 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024-04-29-07d05a0 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024-04-29-07d05a0 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024-05-10-7415d48 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024-05-10-7415d48 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024-05-10-7415d48 [pypy_aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-04-29-07d05a0 +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-05-10-7415d48 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-04-29-07d05a0 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-05-10-7415d48 diff --git a/docs/faq.md b/docs/faq.md index b50f40b8e..5571b36a5 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -10,7 +10,7 @@ title: Tips and tricks Linux wheels are built in [`manylinux`/`musllinux` containers](https://github.com/pypa/manylinux) to provide binary compatible wheels on Linux, according to [PEP 600](https://www.python.org/dev/peps/pep-0600/) / [PEP 656](https://www.python.org/dev/peps/pep-0656/). Because of this, when building with `cibuildwheel` on Linux, a few things should be taken into account: -- Programs and libraries are not installed on the CI runner host, but rather should be installed inside the container - using `yum` for `manylinux2010` or `manylinux2014`, `apt-get` for `manylinux_2_24` and `apk` for `musllinux_1_1`, or manually. The same goes for environment variables that are potentially needed to customize the wheel building. +- Programs and libraries are not installed on the CI runner host, but rather should be installed inside the container - using `yum` for `manylinux2010` or `manylinux2014`, `apt-get` for `manylinux_2_24`, `dnf` for `manylinux_2_28` and `apk` for `musllinux_1_1` or `musllinux_1_2`, or manually. The same goes for environment variables that are potentially needed to customize the wheel building. `cibuildwheel` supports this by providing the [`CIBW_ENVIRONMENT`](options.md#environment) and [`CIBW_BEFORE_ALL`](options.md#before-all) options to setup the build environment inside the running container. diff --git a/docs/options.md b/docs/options.md index bda438406..c7d9d3b0b 100644 --- a/docs/options.md +++ b/docs/options.md @@ -1056,11 +1056,11 @@ The available options are (default value): - `CIBW_MANYLINUX_S390X_IMAGE` ([`quay.io/pypa/manylinux2014_s390x`](https://quay.io/pypa/manylinux2014_s390x)) - `CIBW_MANYLINUX_PYPY_AARCH64_IMAGE` ([`quay.io/pypa/manylinux2014_aarch64`](https://quay.io/pypa/manylinux2014_aarch64)) - `CIBW_MANYLINUX_PYPY_I686_IMAGE` ([`quay.io/pypa/manylinux2014_i686`](https://quay.io/pypa/manylinux2014_i686)) -- `CIBW_MUSLLINUX_X86_64_IMAGE` ([`quay.io/pypa/musllinux_1_1_x86_64`](https://quay.io/pypa/musllinux_1_1_x86_64)) -- `CIBW_MUSLLINUX_I686_IMAGE` ([`quay.io/pypa/musllinux_1_1_i686`](https://quay.io/pypa/musllinux_1_1_i686)) -- `CIBW_MUSLLINUX_AARCH64_IMAGE` ([`quay.io/pypa/musllinux_1_1_aarch64`](https://quay.io/pypa/musllinux_1_1_aarch64)) -- `CIBW_MUSLLINUX_PPC64LE_IMAGE` ([`quay.io/pypa/musllinux_1_1_ppc64le`](https://quay.io/pypa/musllinux_1_1_ppc64le)) -- `CIBW_MUSLLINUX_S390X_IMAGE` ([`quay.io/pypa/musllinux_1_1_s390x`](https://quay.io/pypa/musllinux_1_1_s390x)) +- `CIBW_MUSLLINUX_X86_64_IMAGE` ([`quay.io/pypa/musllinux_1_2_x86_64`](https://quay.io/pypa/musllinux_1_2_x86_64)) +- `CIBW_MUSLLINUX_I686_IMAGE` ([`quay.io/pypa/musllinux_1_2_i686`](https://quay.io/pypa/musllinux_1_2_i686)) +- `CIBW_MUSLLINUX_AARCH64_IMAGE` ([`quay.io/pypa/musllinux_1_2_aarch64`](https://quay.io/pypa/musllinux_1_2_aarch64)) +- `CIBW_MUSLLINUX_PPC64LE_IMAGE` ([`quay.io/pypa/musllinux_1_2_ppc64le`](https://quay.io/pypa/musllinux_1_2_ppc64le)) +- `CIBW_MUSLLINUX_S390X_IMAGE` ([`quay.io/pypa/musllinux_1_2_s390x`](https://quay.io/pypa/musllinux_1_2_s390x)) Set an alternative Docker image to be used for building [manylinux / musllinux](https://github.com/pypa/manylinux) wheels. @@ -1071,7 +1071,7 @@ For `CIBW_MUSLLINUX_*_IMAGE`, the value of this option can either be set to `mus If this option is blank, it will fall though to the next available definition (environment variable -> pyproject.toml -> default). -If setting a custom image, you'll need to make sure it can be used in the same way as the default images: all necessary Python and pip versions need to be present in `/opt/python/`, and the auditwheel tool needs to be present for cibuildwheel to work. Apart from that, the architecture and relevant shared system libraries need to be compatible to the relevant standard to produce valid manylinux1/manylinux2010/manylinux2014/manylinux_2_24/manylinux_2_28/musllinux_1_1 wheels (see [pypa/manylinux on GitHub](https://github.com/pypa/manylinux), [PEP 513](https://www.python.org/dev/peps/pep-0513/), [PEP 571](https://www.python.org/dev/peps/pep-0571/), [PEP 599](https://www.python.org/dev/peps/pep-0599/), [PEP 600](https://www.python.org/dev/peps/pep-0600/) and [PEP 656](https://www.python.org/dev/peps/pep-0656/) for more details). +If setting a custom image, you'll need to make sure it can be used in the same way as the default images: all necessary Python and pip versions need to be present in `/opt/python/`, and the auditwheel tool needs to be present for cibuildwheel to work. Apart from that, the architecture and relevant shared system libraries need to be compatible to the relevant standard to produce valid manylinux1/manylinux2010/manylinux2014/manylinux_2_24/manylinux_2_28/musllinux_1_1/musllinux_1_2 wheels (see [pypa/manylinux on GitHub](https://github.com/pypa/manylinux), [PEP 513](https://www.python.org/dev/peps/pep-0513/), [PEP 571](https://www.python.org/dev/peps/pep-0571/), [PEP 599](https://www.python.org/dev/peps/pep-0599/), [PEP 600](https://www.python.org/dev/peps/pep-0600/) and [PEP 656](https://www.python.org/dev/peps/pep-0656/) for more details). Auditwheel detects the version of the manylinux / musllinux standard in the image through the `AUDITWHEEL_PLAT` environment variable, as cibuildwheel has no way of detecting the correct `--plat` command line argument to pass to auditwheel for a custom image. If a custom image does not correctly set this `AUDITWHEEL_PLAT` environment variable, the `CIBW_ENVIRONMENT` option can be used to do so (e.g., `CIBW_ENVIRONMENT='AUDITWHEEL_PLAT="manylinux2010_$(uname -m)"'`). @@ -1102,6 +1102,10 @@ Auditwheel detects the version of the manylinux / musllinux standard in the imag # Build using a different image from the docker registry CIBW_MANYLINUX_X86_64_IMAGE: dockcross/manylinux-x64 CIBW_MANYLINUX_I686_IMAGE: dockcross/manylinux-x86 + + # Build musllinux wheels using the musllinux_1_1 image + CIBW_MUSLLINUX_X86_64_IMAGE: musllinux_1_1 + CIBW_MUSLLINUX_I686_IMAGE: musllinux_1_1 ``` !!! tab examples "pyproject.toml" @@ -1129,6 +1133,10 @@ Auditwheel detects the version of the manylinux / musllinux standard in the imag # Build using a different image from the docker registry manylinux-x86_64-image = "dockcross/manylinux-x64" manylinux-i686-image = "dockcross/manylinux-x86" + + # Build musllinux wheels using the musllinux_1_1 image + musllinux-x86_64-image = "musllinux_1_1" + musllinux-i686-image = "musllinux_1_1" ``` Like any other option, these can be placed in `[tool.cibuildwheel.linux]` diff --git a/test/utils.py b/test/utils.py index 9ddc528c8..28324a965 100644 --- a/test/utils.py +++ b/test/utils.py @@ -160,7 +160,7 @@ def expected_wheels( manylinux_versions = ["manylinux_2_17", "manylinux2014"] if musllinux_versions is None: - musllinux_versions = ["musllinux_1_1"] + musllinux_versions = ["musllinux_1_2"] if python_abi_tags is None: python_abi_tags = [ diff --git a/unit_test/option_prepare_test.py b/unit_test/option_prepare_test.py index 180ef015e..ce164012c 100644 --- a/unit_test/option_prepare_test.py +++ b/unit_test/option_prepare_test.py @@ -86,7 +86,7 @@ def test_build_default_launches(monkeypatch): assert identifiers == {f"{x}-manylinux_i686" for x in ALL_IDS} kwargs = build_in_container.call_args_list[2][1] - assert "quay.io/pypa/musllinux_1_1_x86_64" in kwargs["container"]["image"] + assert "quay.io/pypa/musllinux_1_2_x86_64" in kwargs["container"]["image"] assert kwargs["container"]["cwd"] == PurePosixPath("/project") assert not kwargs["container"]["enforce_32_bit"] @@ -96,7 +96,7 @@ def test_build_default_launches(monkeypatch): } kwargs = build_in_container.call_args_list[3][1] - assert "quay.io/pypa/musllinux_1_1_i686" in kwargs["container"]["image"] + assert "quay.io/pypa/musllinux_1_2_i686" in kwargs["container"]["image"] assert kwargs["container"]["cwd"] == PurePosixPath("/project") assert kwargs["container"]["enforce_32_bit"] @@ -197,7 +197,7 @@ def test_build_with_override_launches(monkeypatch, tmp_path): } kwargs = build_in_container.call_args_list[6][1] - assert "quay.io/pypa/musllinux_1_1_i686" in kwargs["container"]["image"] + assert "quay.io/pypa/musllinux_1_2_i686" in kwargs["container"]["image"] assert kwargs["container"]["cwd"] == PurePosixPath("/project") assert kwargs["container"]["enforce_32_bit"] From 44c47424775673b9416a4f1f4f8f6efed5e8dea9 Mon Sep 17 00:00:00 2001 From: Matthieu Darbois Date: Sun, 12 May 2024 02:26:18 +0200 Subject: [PATCH 24/44] feat: add Python 3.13 beta 1 (#1815) --- .github/workflows/test.yml | 2 +- .github/workflows/update-dependencies.yml | 2 +- README.md | 6 +++-- cibuildwheel/resources/build-platforms.toml | 16 +++++++++++++ .../resources/constraints-python313.txt | 24 +++++++++++++++++++ cibuildwheel/util.py | 2 +- docs/options.md | 1 + noxfile.py | 2 +- test/test_manylinuxXXXX_only.py | 16 +++++++++---- test/utils.py | 2 ++ unit_test/build_selector_test.py | 6 +++-- 11 files changed, 67 insertions(+), 12 deletions(-) create mode 100644 cibuildwheel/resources/constraints-python313.txt diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0db222414..af3e6be36 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -33,7 +33,7 @@ jobs: pipx run nox -s pylint test: - name: Test cibuildwheel on ${{ matrix.os }} + name: Test cibuildwheel on ${{ matrix.os }} (${{ matrix.python_version }}) needs: lint runs-on: ${{ matrix.os }} strategy: diff --git a/.github/workflows/update-dependencies.yml b/.github/workflows/update-dependencies.yml index 832ed2ec9..52fc21803 100644 --- a/.github/workflows/update-dependencies.yml +++ b/.github/workflows/update-dependencies.yml @@ -24,7 +24,7 @@ jobs: - uses: wntrblm/nox@2024.04.15 with: - python-versions: "3.7, 3.8, 3.9, 3.10, 3.11, 3.12" + python-versions: "3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13" - name: "Run update: dependencies" run: nox --force-color -s update_constraints diff --git a/README.md b/README.md index 332831453..cf738fe03 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Python wheels are great. Building them across **Mac, Linux, Windows**, on **mult What does it do? ---------------- -| | macOS Intel | macOS Apple Silicon | Windows 64bit | Windows 32bit | Windows Arm64 | manylinux
musllinux x86_64 | manylinux
musllinux i686 | manylinux
musllinux aarch64 | manylinux
musllinux ppc64le | manylinux
musllinux s390x | +| | macOS Intel | macOS Apple Silicon | Windows 64bit | Windows 32bit | Windows Arm64 | manylinux
musllinux x86_64 | manylinux
musllinux i686 | manylinux
musllinux aarch64 | manylinux
musllinux ppc64le | manylinux
musllinux s390x | |----------------|----|-----|-----|-----|-----|----|-----|----|-----|-----| | CPythonΒ 3.6 | βœ… | N/A | βœ… | βœ… | N/A | βœ… | βœ… | βœ… | βœ… | βœ… | | CPythonΒ 3.7 | βœ… | N/A | βœ… | βœ… | N/A | βœ… | βœ… | βœ… | βœ… | βœ… | @@ -30,7 +30,8 @@ What does it do? | CPythonΒ 3.9 | βœ… | βœ… | βœ… | βœ… | βœ…Β² | βœ… | βœ… | βœ… | βœ… | βœ… | | CPythonΒ 3.10 | βœ… | βœ… | βœ… | βœ… | βœ…Β² | βœ… | βœ… | βœ… | βœ… | βœ… | | CPythonΒ 3.11 | βœ… | βœ… | βœ… | βœ… | βœ…Β² | βœ… | βœ… | βœ… | βœ… | βœ… | -| CPythonΒ 3.12 | βœ… | βœ… | βœ… | βœ… | βœ…Β² | βœ… | βœ… | βœ… | βœ… | βœ… | +| CPythonΒ 3.12 | βœ… | βœ… | βœ… | βœ… | βœ…Β² | βœ… | βœ… | βœ… | βœ… | βœ… | +| CPythonΒ 3.13Β³ | βœ… | βœ… | βœ… | βœ… | βœ…Β² | βœ… | βœ… | βœ… | βœ… | βœ… | | PyPyΒ 3.7 v7.3 | βœ… | N/A | βœ… | N/A | N/A | βœ…ΒΉ | βœ…ΒΉ | βœ…ΒΉ | N/A | N/A | | PyPyΒ 3.8 v7.3 | βœ… | βœ… | βœ… | N/A | N/A | βœ…ΒΉ | βœ…ΒΉ | βœ…ΒΉ | N/A | N/A | | PyPyΒ 3.9 v7.3 | βœ… | βœ… | βœ… | N/A | N/A | βœ…ΒΉ | βœ…ΒΉ | βœ…ΒΉ | N/A | N/A | @@ -38,6 +39,7 @@ What does it do? ΒΉ PyPy is only supported for manylinux wheels.
Β² Windows arm64 support is experimental.
+Β³ CPython 3.13 is available using the [CIBW_PRERELEASE_PYTHONS](https://cibuildwheel.pypa.io/en/stable/options/#prerelease-pythons) option.
- Builds manylinux, musllinux, macOS 10.9+, and Windows wheels for CPython and PyPy - Works on GitHub Actions, Azure Pipelines, Travis CI, AppVeyor, CircleCI, GitLab CI, and Cirrus CI diff --git a/cibuildwheel/resources/build-platforms.toml b/cibuildwheel/resources/build-platforms.toml index a102fac1e..f95d329cc 100644 --- a/cibuildwheel/resources/build-platforms.toml +++ b/cibuildwheel/resources/build-platforms.toml @@ -7,6 +7,7 @@ python_configurations = [ { identifier = "cp310-manylinux_x86_64", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-manylinux_x86_64", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-manylinux_x86_64", version = "3.12", path_str = "/opt/python/cp312-cp312" }, + { identifier = "cp313-manylinux_x86_64", version = "3.13", path_str = "/opt/python/cp313-cp313" }, { identifier = "cp36-manylinux_i686", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-manylinux_i686", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-manylinux_i686", version = "3.8", path_str = "/opt/python/cp38-cp38" }, @@ -14,6 +15,7 @@ python_configurations = [ { identifier = "cp310-manylinux_i686", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-manylinux_i686", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-manylinux_i686", version = "3.12", path_str = "/opt/python/cp312-cp312" }, + { identifier = "cp313-manylinux_i686", version = "3.13", path_str = "/opt/python/cp313-cp313" }, { identifier = "pp37-manylinux_x86_64", version = "3.7", path_str = "/opt/python/pp37-pypy37_pp73" }, { identifier = "pp38-manylinux_x86_64", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" }, { identifier = "pp39-manylinux_x86_64", version = "3.9", path_str = "/opt/python/pp39-pypy39_pp73" }, @@ -25,6 +27,7 @@ python_configurations = [ { identifier = "cp310-manylinux_aarch64", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-manylinux_aarch64", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-manylinux_aarch64", version = "3.12", path_str = "/opt/python/cp312-cp312" }, + { identifier = "cp313-manylinux_aarch64", version = "3.13", path_str = "/opt/python/cp313-cp313" }, { identifier = "cp36-manylinux_ppc64le", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-manylinux_ppc64le", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-manylinux_ppc64le", version = "3.8", path_str = "/opt/python/cp38-cp38" }, @@ -32,6 +35,7 @@ python_configurations = [ { identifier = "cp310-manylinux_ppc64le", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-manylinux_ppc64le", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-manylinux_ppc64le", version = "3.12", path_str = "/opt/python/cp312-cp312" }, + { identifier = "cp313-manylinux_ppc64le", version = "3.13", path_str = "/opt/python/cp313-cp313" }, { identifier = "cp36-manylinux_s390x", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-manylinux_s390x", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-manylinux_s390x", version = "3.8", path_str = "/opt/python/cp38-cp38" }, @@ -39,6 +43,7 @@ python_configurations = [ { identifier = "cp310-manylinux_s390x", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-manylinux_s390x", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-manylinux_s390x", version = "3.12", path_str = "/opt/python/cp312-cp312" }, + { identifier = "cp313-manylinux_s390x", version = "3.13", path_str = "/opt/python/cp313-cp313" }, { identifier = "pp37-manylinux_aarch64", version = "3.7", path_str = "/opt/python/pp37-pypy37_pp73" }, { identifier = "pp38-manylinux_aarch64", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" }, { identifier = "pp39-manylinux_aarch64", version = "3.9", path_str = "/opt/python/pp39-pypy39_pp73" }, @@ -54,6 +59,7 @@ python_configurations = [ { identifier = "cp310-musllinux_x86_64", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-musllinux_x86_64", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-musllinux_x86_64", version = "3.12", path_str = "/opt/python/cp312-cp312" }, + { identifier = "cp313-musllinux_x86_64", version = "3.13", path_str = "/opt/python/cp313-cp313" }, { identifier = "cp36-musllinux_i686", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-musllinux_i686", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-musllinux_i686", version = "3.8", path_str = "/opt/python/cp38-cp38" }, @@ -61,6 +67,7 @@ python_configurations = [ { identifier = "cp310-musllinux_i686", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-musllinux_i686", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-musllinux_i686", version = "3.12", path_str = "/opt/python/cp312-cp312" }, + { identifier = "cp313-musllinux_i686", version = "3.13", path_str = "/opt/python/cp313-cp313" }, { identifier = "cp36-musllinux_aarch64", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-musllinux_aarch64", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-musllinux_aarch64", version = "3.8", path_str = "/opt/python/cp38-cp38" }, @@ -68,6 +75,7 @@ python_configurations = [ { identifier = "cp310-musllinux_aarch64", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-musllinux_aarch64", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-musllinux_aarch64", version = "3.12", path_str = "/opt/python/cp312-cp312" }, + { identifier = "cp313-musllinux_aarch64", version = "3.13", path_str = "/opt/python/cp313-cp313" }, { identifier = "cp36-musllinux_ppc64le", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-musllinux_ppc64le", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-musllinux_ppc64le", version = "3.8", path_str = "/opt/python/cp38-cp38" }, @@ -75,6 +83,7 @@ python_configurations = [ { identifier = "cp310-musllinux_ppc64le", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-musllinux_ppc64le", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-musllinux_ppc64le", version = "3.12", path_str = "/opt/python/cp312-cp312" }, + { identifier = "cp313-musllinux_ppc64le", version = "3.13", path_str = "/opt/python/cp313-cp313" }, { identifier = "cp36-musllinux_s390x", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-musllinux_s390x", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-musllinux_s390x", version = "3.8", path_str = "/opt/python/cp38-cp38" }, @@ -82,6 +91,7 @@ python_configurations = [ { identifier = "cp310-musllinux_s390x", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-musllinux_s390x", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-musllinux_s390x", version = "3.12", path_str = "/opt/python/cp312-cp312" }, + { identifier = "cp313-musllinux_s390x", version = "3.13", path_str = "/opt/python/cp313-cp313" }, ] [macos] @@ -103,6 +113,9 @@ python_configurations = [ { identifier = "cp312-macosx_x86_64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.3/python-3.12.3-macos11.pkg" }, { identifier = "cp312-macosx_arm64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.3/python-3.12.3-macos11.pkg" }, { identifier = "cp312-macosx_universal2", version = "3.12", url = "https://www.python.org/ftp/python/3.12.3/python-3.12.3-macos11.pkg" }, + { identifier = "cp313-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0b1-macos11.pkg" }, + { identifier = "cp313-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0b1-macos11.pkg" }, + { identifier = "cp313-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0b1-macos11.pkg" }, { identifier = "pp37-macosx_x86_64", version = "3.7", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-osx64.tar.bz2" }, { identifier = "pp38-macosx_x86_64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_x86_64.tar.bz2" }, { identifier = "pp38-macosx_arm64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_arm64.tar.bz2" }, @@ -128,10 +141,13 @@ python_configurations = [ { identifier = "cp311-win_amd64", version = "3.11.9", arch = "64" }, { identifier = "cp312-win32", version = "3.12.3", arch = "32" }, { identifier = "cp312-win_amd64", version = "3.12.3", arch = "64" }, + { identifier = "cp313-win32", version = "3.13.0-b1", arch = "32" }, + { identifier = "cp313-win_amd64", version = "3.13.0-b1", arch = "64" }, { identifier = "cp39-win_arm64", version = "3.9.10", arch = "ARM64" }, { identifier = "cp310-win_arm64", version = "3.10.11", arch = "ARM64" }, { identifier = "cp311-win_arm64", version = "3.11.9", arch = "ARM64" }, { identifier = "cp312-win_arm64", version = "3.12.3", arch = "ARM64" }, + { identifier = "cp313-win_arm64", version = "3.13.0-b1", arch = "ARM64" }, { identifier = "pp37-win_amd64", version = "3.7", arch = "64", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-win64.zip" }, { identifier = "pp38-win_amd64", version = "3.8", arch = "64", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-win64.zip" }, { identifier = "pp39-win_amd64", version = "3.9", arch = "64", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-win64.zip" }, diff --git a/cibuildwheel/resources/constraints-python313.txt b/cibuildwheel/resources/constraints-python313.txt new file mode 100644 index 000000000..f9325ba0a --- /dev/null +++ b/cibuildwheel/resources/constraints-python313.txt @@ -0,0 +1,24 @@ +# This file was autogenerated by uv via the following command: +# nox -s update_constraints +altgraph==0.17.4 + # via macholib +build==1.2.1 +delocate==0.11.0 +distlib==0.3.8 + # via virtualenv +filelock==3.14.0 + # via virtualenv +macholib==1.16.3 + # via delocate +packaging==24.0 + # via + # build + # delocate +pip==24.0 +platformdirs==4.2.1 + # via virtualenv +pyproject-hooks==1.1.0 + # via build +typing-extensions==4.11.0 + # via delocate +virtualenv==20.26.1 diff --git a/cibuildwheel/util.py b/cibuildwheel/util.py index a225575b8..410b1c02a 100644 --- a/cibuildwheel/util.py +++ b/cibuildwheel/util.py @@ -238,7 +238,7 @@ class BuildSelector: requires_python: SpecifierSet | None = None # a pattern that skips prerelease versions, when include_prereleases is False. - PRERELEASE_SKIP: ClassVar[str] = "" + PRERELEASE_SKIP: ClassVar[str] = "cp313-*" prerelease_pythons: bool = False def __call__(self, build_id: str) -> bool: diff --git a/docs/options.md b/docs/options.md index c7d9d3b0b..75ac6b9be 100644 --- a/docs/options.md +++ b/docs/options.md @@ -296,6 +296,7 @@ When setting the options, you can use shell-style globbing syntax, as per [fnmat | Python 3.10 | cp310-macosx_x86_64
cp310-macosx_universal2
cp310-macosx_arm64 | cp310-win_amd64
cp310-win32
cp310-win_arm64 | cp310-manylinux_x86_64
cp310-manylinux_i686
cp310-musllinux_x86_64
cp310-musllinux_i686 | cp310-manylinux_aarch64
cp310-manylinux_ppc64le
cp310-manylinux_s390x
cp310-musllinux_aarch64
cp310-musllinux_ppc64le
cp310-musllinux_s390x | | Python 3.11 | cp311-macosx_x86_64
cp311-macosx_universal2
cp311-macosx_arm64 | cp311-win_amd64
cp311-win32
cp311-win_arm64 | cp311-manylinux_x86_64
cp311-manylinux_i686
cp311-musllinux_x86_64
cp311-musllinux_i686 | cp311-manylinux_aarch64
cp311-manylinux_ppc64le
cp311-manylinux_s390x
cp311-musllinux_aarch64
cp311-musllinux_ppc64le
cp311-musllinux_s390x | | Python 3.12 | cp312-macosx_x86_64
cp312-macosx_universal2
cp312-macosx_arm64 | cp312-win_amd64
cp312-win32
cp312-win_arm64 | cp312-manylinux_x86_64
cp312-manylinux_i686
cp312-musllinux_x86_64
cp312-musllinux_i686 | cp312-manylinux_aarch64
cp312-manylinux_ppc64le
cp312-manylinux_s390x
cp312-musllinux_aarch64
cp312-musllinux_ppc64le
cp312-musllinux_s390x | +| Python 3.13 | cp313-macosx_x86_64
cp313-macosx_universal2
cp313-macosx_arm64 | cp313-win_amd64
cp313-win32
cp313-win_arm64 | cp313-manylinux_x86_64
cp313-manylinux_i686
cp313-musllinux_x86_64
cp313-musllinux_i686 | cp313-manylinux_aarch64
cp313-manylinux_ppc64le
cp313-manylinux_s390x
cp313-musllinux_aarch64
cp313-musllinux_ppc64le
cp313-musllinux_s390x | | PyPy3.7 v7.3 | pp37-macosx_x86_64 | pp37-win_amd64 | pp37-manylinux_x86_64
pp37-manylinux_i686 | pp37-manylinux_aarch64 | | PyPy3.8 v7.3 | pp38-macosx_x86_64
pp38-macosx_arm64 | pp38-win_amd64 | pp38-manylinux_x86_64
pp38-manylinux_i686 | pp38-manylinux_aarch64 | | PyPy3.9 v7.3 | pp39-macosx_x86_64
pp39-macosx_arm64 | pp39-win_amd64 | pp39-manylinux_x86_64
pp39-manylinux_i686 | pp39-manylinux_aarch64 | diff --git a/noxfile.py b/noxfile.py index 19dbed42b..8529e6002 100644 --- a/noxfile.py +++ b/noxfile.py @@ -68,7 +68,7 @@ def update_constraints(session: nox.Session) -> None: if getattr(session.virtualenv, "venv_backend", "") != "uv": session.install("uv>=0.1.23") - for minor_version in range(7, 13): + for minor_version in range(7, 14): python_version = f"3.{minor_version}" env = os.environ.copy() # CUSTOM_COMPILE_COMMAND is a pip-compile option that tells users how to diff --git a/test/test_manylinuxXXXX_only.py b/test/test_manylinuxXXXX_only.py index 06082a7bb..3bc6820fa 100644 --- a/test/test_manylinuxXXXX_only.py +++ b/test/test_manylinuxXXXX_only.py @@ -86,10 +86,10 @@ def test(manylinux_image, tmp_path): add_env["CIBW_SKIP"] = "pp* cp31*" if manylinux_image in {"manylinux2010"}: # We don't have a manylinux2010 image for PyPy 3.9+, CPython 3.11+ - add_env["CIBW_SKIP"] = "pp39* pp31* cp311* cp312*" + add_env["CIBW_SKIP"] = "pp39* pp31* cp311* cp312* cp313*" if manylinux_image in {"manylinux_2_24"}: # We don't have a manylinux_2_24 image for PyPy 3.10+, CPython 3.12+ - add_env["CIBW_SKIP"] = "pp31* cp312*" + add_env["CIBW_SKIP"] = "pp31* cp312* cp313*" if manylinux_image == "manylinux_2_28" and platform.machine() == "x86_64": # We don't have a manylinux_2_28 image for i686 add_env["CIBW_ARCHS"] = "x86_64" @@ -116,12 +116,20 @@ def test(manylinux_image, tmp_path): expected_wheels = [ w for w in expected_wheels - if "-pp39" not in w and "-pp31" not in w and "-cp311" not in w and "-cp312" not in w + if "-pp39" not in w + and "-pp31" not in w + and "-cp311" not in w + and "-cp312" not in w + and "-cp313" not in w ] if manylinux_image in {"manylinux_2_24"}: # remove PyPy 3.10+ & CPython 3.11 and above - expected_wheels = [w for w in expected_wheels if "-pp31" not in w and "-cp312" not in w] + expected_wheels = [ + w + for w in expected_wheels + if "-pp31" not in w and "-cp312" not in w and "-cp313" not in w + ] if manylinux_image == "manylinux_2_28" and platform.machine() == "x86_64": # We don't have a manylinux_2_28 image for i686 diff --git a/test/utils.py b/test/utils.py index 28324a965..522db18b6 100644 --- a/test/utils.py +++ b/test/utils.py @@ -171,6 +171,7 @@ def expected_wheels( "cp310-cp310", "cp311-cp311", "cp312-cp312", + "cp313-cp313", ] if machine_arch in ["x86_64", "AMD64", "x86", "aarch64"]: @@ -189,6 +190,7 @@ def expected_wheels( "cp310-cp310", "cp311-cp311", "cp312-cp312", + "cp313-cp313", "pp38-pypy38_pp73", "pp39-pypy39_pp73", "pp310-pypy310_pp73", diff --git a/unit_test/build_selector_test.py b/unit_test/build_selector_test.py index 9fa7eabda..7d7eeb5fb 100644 --- a/unit_test/build_selector_test.py +++ b/unit_test/build_selector_test.py @@ -13,6 +13,7 @@ def test_build(): assert build_selector("cp310-manylinux_x86_64") assert build_selector("cp311-manylinux_x86_64") assert build_selector("cp312-manylinux_x86_64") + assert not build_selector("cp313-manylinux_x86_64") assert build_selector("pp36-manylinux_x86_64") assert build_selector("pp37-manylinux_x86_64") assert build_selector("cp36-manylinux_i686") @@ -33,6 +34,7 @@ def test_build(): assert build_selector("cp310-win_amd64") assert build_selector("cp311-win_amd64") assert build_selector("cp312-win_amd64") + assert not build_selector("cp313-win_amd64") assert not build_selector("pp36-win_amd64") assert not build_selector("pp37-win_amd64") @@ -45,9 +47,9 @@ def test_build_filter_pre(): ) assert build_selector("cp37-manylinux_x86_64") - assert build_selector("cp312-manylinux_x86_64") + assert build_selector("cp313-manylinux_x86_64") assert build_selector("cp37-win_amd64") - assert build_selector("cp312-win_amd64") + assert build_selector("cp313-win_amd64") def test_skip(): From 6dd4f15a0ee07ba6f2b7cb51e5a14827e46a1261 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Sat, 11 May 2024 20:26:35 -0400 Subject: [PATCH 25/44] docs: rust (#1816) * docs: add FAQ entry on Rust Signed-off-by: Henry Schreiner * ci: make readthedocs faster Signed-off-by: Henry Schreiner * Update docs/faq.md * Update docs/faq.md * Update faq.md * Update docs/faq.md * Update docs/faq.md Co-authored-by: Matthieu Darbois * Apply suggestions from code review --------- Signed-off-by: Henry Schreiner Co-authored-by: Matthieu Darbois --- .readthedocs.yml | 19 ++++++++----------- README.md | 2 +- docs/faq.md | 21 +++++++++++++++++++++ 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index 7b94bd1fa..23af5dd29 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -5,14 +5,11 @@ version: 2 build: os: ubuntu-22.04 tools: - python: "3.11" - -python: - install: - - method: pip - path: . - extra_requirements: - - docs - -mkdocs: - configuration: mkdocs.yml + python: "3.12" + commands: + - asdf plugin add uv + - asdf install uv latest + - asdf global uv latest + - uv venv + - uv pip install .[docs] + - .venv/bin/python -m mkdocs build --site-dir $READTHEDOCS_OUTPUT/html diff --git a/README.md b/README.md index cf738fe03..111b54afb 100644 --- a/README.md +++ b/README.md @@ -307,4 +307,4 @@ See also Another very similar tool to consider is [matthew-brett/multibuild](http://github.com/matthew-brett/multibuild). `multibuild` is a shell script toolbox for building a wheel on various platforms. It is used as a basis to build some of the big data science tools, like SciPy. -If you are building Rust wheels, you can get by without some of the tricks required to make GLIBC work via manylinux; this is especially relevant for cross-compiling, which is easy with Rust. See [maturin-action](https://github.com/messense/maturin-action) for a tool that is optimized for building Rust wheels and cross-compiling. +If you are building Rust wheels, you can get by without some of the tricks required to make GLIBC work via manylinux; this is especially relevant for cross-compiling, which is easy with Rust. See [maturin-action](https://github.com/PyO3/maturin-action) for a tool that is optimized for building Rust wheels and cross-compiling. diff --git a/docs/faq.md b/docs/faq.md index 5571b36a5..352402187 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -282,6 +282,27 @@ For these reasons, it's strongly recommended to not use brew for native library [Homebrew]: https://brew.sh/ [delocate]: https://github.com/matthew-brett/delocate +### Building Rust wheels + +If you build Rust wheels, you need to download the Rust compilers in manylinux. +If you support 32-bit Windows, you need to add this as a potential target. You +can do this on GitHub Actions, for example, with: + +```yaml +CIBW_BEFORE_ALL_LINUX: curl -sSf https://sh.rustup.rs | sh -s -- -y +CIBW_BEFORE_ALL_WINDOWS: rustup target add i686-pc-windows-msvc +CIBW_ENVIRONMENT_LINUX: "PATH=$HOME/.cargo/bin:$PATH" +``` + +Rust does not provide Cargo for musllinux 32-bit, so that needs to be skipped: + +```toml +[tool.cibuildwheel] +skip = ["*-musllinux_i686"] +``` + +Also see [maturin-action](https://github.com/PyO3/maturin-action) which is optimized for Rust wheels, builds the non-Python Rust modules once, and can cross-compile (and can build 32-bit musl, for example). + ### macOS: ModuleNotFoundError Calling cibuildwheel from a python3 script and getting a `ModuleNotFoundError`? Due to a (fixed) [bug](https://bugs.python.org/issue22490) in CPython, you'll need to [unset the `__PYVENV_LAUNCHER__` variable](https://github.com/pypa/cibuildwheel/issues/133#issuecomment-478288597) before activating a venv. From 3873a1edf81e0a3ae89431bbb07801fd6fe63cf6 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Sat, 11 May 2024 23:38:45 -0400 Subject: [PATCH 26/44] chore: update bump_version script Signed-off-by: Henry Schreiner --- bin/bump_version.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/bin/bump_version.py b/bin/bump_version.py index a0ced2b19..00b0fc1e4 100755 --- a/bin/bump_version.py +++ b/bin/bump_version.py @@ -1,8 +1,13 @@ #!/usr/bin/env python3 +# /// script +# dependencies = ["click", "packaging"] +# /// + from __future__ import annotations +import configparser import glob import os import subprocess @@ -13,8 +18,6 @@ import click from packaging.version import InvalidVersion, Version -import cibuildwheel - config = [ # file path, version find/replace format ("README.md", "cibuildwheel=={}"), @@ -34,7 +37,10 @@ @click.command() def bump_version() -> None: - current_version = cibuildwheel.__version__ + # Update if moving setup.cfg to pyproject.toml + cfg = configparser.ConfigParser() + cfg.read("setup.cfg") + current_version = cfg["metadata"]["version"] try: commit_date_str = subprocess.run( From 711a3d017d0729f3edde18545fee967f03d65f65 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Sun, 12 May 2024 00:13:12 -0400 Subject: [PATCH 27/44] Bump version: v2.18.0 --- README.md | 30 +++++++++++++++----------- cibuildwheel/__init__.py | 2 +- docs/changelog.md | 17 +++++++++++++++ docs/faq.md | 6 +++--- docs/setup.md | 4 ++-- examples/appveyor-minimal.yml | 2 +- examples/azure-pipelines-minimal.yml | 6 +++--- examples/circleci-minimal.yml | 6 +++--- examples/cirrus-ci-intel-mac.yml | 2 +- examples/cirrus-ci-minimal.yml | 2 +- examples/github-deploy.yml | 2 +- examples/github-minimal.yml | 2 +- examples/github-with-qemu.yml | 2 +- examples/gitlab-minimal.yml | 4 ++-- examples/gitlab-with-qemu.yml | 2 +- examples/travis-ci-deploy.yml | 2 +- examples/travis-ci-minimal.yml | 2 +- examples/travis-ci-test-and-deploy.yml | 4 ++-- setup.cfg | 2 +- 19 files changed, 61 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index 111b54afb..9ebea0695 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ jobs: - uses: actions/setup-python@v5 - name: Install cibuildwheel - run: python -m pip install cibuildwheel==2.17.0 + run: python -m pip install cibuildwheel==2.18.0 - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse @@ -210,6 +210,23 @@ Changelog +### v2.18.0 + +_12 May 2024_ + +- ✨ Adds CPython 3.13 support, under the prerelease flag [CIBW_PRERELEASE_PYTHONS](https://cibuildwheel.pypa.io/en/stable/options/#prerelease-pythons). This version of cibuildwheel uses 3.13.0b1. Free-threading mode is not available yet, waiting on official binaries (planned for beta 2) and pip support. + + While CPython is in beta, the ABI can change, so your wheels might not be compatible with the final release. For this reason, we don't recommend distributing wheels until RC1, at which point 3.13 will be available in cibuildwheel without the flag. (#1816) +- ✨ Musllinux now defaults to `musllinux_1_2`. You can set the older `manylinux_1_1` via config if needed. (#1817) +- πŸ›  No longer pre-seed setuptools/wheel in virtual environments (#1819) +- πŸ›  Respect the constraints file when building with pip, matching build (#1818) +- πŸ›  Use uv to compile our pinned dependencies, 10x faster and doesn't require special setup (#1778) +- πŸ› Fix an issue with the schema (#1788) +- πŸ“š Document the new delocate error checking macOS versions (#1766) +- πŸ“š Document Rust builds (#1816) +- πŸ“š Speed up our readthedocs builds with uv, 26 seconds -> 6 seconds to install dependencies (#1816) + + ### v2.17.0 _11 March 2024_ @@ -248,17 +265,6 @@ _26 January 2024_ - πŸ›  Adds the ability to disable mounting the host filesystem in containers to `/host`, through the `disable_host_mount` suboption on [`CIBW_CONTAINER_ENGINE`](https://cibuildwheel.pypa.io/en/stable/options/#container-engine). - πŸ“š A lot of docs improvements! (#1708, #1705, #1686, #1679, #1667, #1665) -### v2.16.2 - -_3 October 2023_ - -- πŸ›  Updates CPython 3.12 version to 3.12.0, final release (#1635) -- ✨ Adds a debug option [`CIBW_DEBUG_KEEP_CONTAINER`](https://cibuildwheel.pypa.io/en/stable/options/#cibw_debug_keep_container) to stop cibuildwheel deleting build containers after the build finishes. (#1620) -- πŸ“š Adds support for `[tool.cibuildwheel]` checking by adding a schema compatible with the [validate-pyproject](https://github.com/abravalheri/validate-pyproject/) tool (#1622, #1628, #1629) -- πŸ› Fix parsing of `CIBW_CONTAINER_ENGINE` and `CIBW_BUILD_FRONTEND` options to not break arguments on `:` characters (#1621) -- πŸ› Fix the evaluation order of `CIBW_ENVIRONMENT` and `CIBW_ENVIRONMENT_PASS` so that `CIBW_ENVIRONMENT` assignments can reference environment variables passed through from the host machine. (#1617) -- πŸ›  Supports manylinux images' deferred installation of interpreters through the `manylinux-interpreters` tool (#1630) - --- diff --git a/cibuildwheel/__init__.py b/cibuildwheel/__init__.py index 51c2ab1c9..faf466151 100644 --- a/cibuildwheel/__init__.py +++ b/cibuildwheel/__init__.py @@ -1,3 +1,3 @@ from __future__ import annotations -__version__ = "2.17.0" +__version__ = "2.18.0" diff --git a/docs/changelog.md b/docs/changelog.md index 8b9b53e7e..86e2aaa6c 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -4,6 +4,23 @@ title: Changelog # Changelog +### v2.18.0 + +_12 May 2024_ + +- ✨ Adds CPython 3.13 support, under the prerelease flag [CIBW_PRERELEASE_PYTHONS](https://cibuildwheel.pypa.io/en/stable/options/#prerelease-pythons). This version of cibuildwheel uses 3.13.0b1. Free-threading mode is not available yet, waiting on official binaries (planned for beta 2) and pip support. + + While CPython is in beta, the ABI can change, so your wheels might not be compatible with the final release. For this reason, we don't recommend distributing wheels until RC1, at which point 3.13 will be available in cibuildwheel without the flag. (#1816) +- ✨ Musllinux now defaults to `musllinux_1_2`. You can set the older `manylinux_1_1` via config if needed. (#1817) +- πŸ›  No longer pre-seed setuptools/wheel in virtual environments (#1819) +- πŸ›  Respect the constraints file when building with pip, matching build (#1818) +- πŸ›  Use uv to compile our pinned dependencies, 10x faster and doesn't require special setup (#1778) +- πŸ› Fix an issue with the schema (#1788) +- πŸ“š Document the new delocate error checking macOS versions (#1766) +- πŸ“š Document Rust builds (#1816) +- πŸ“š Speed up our readthedocs builds with uv, 26 seconds -> 6 seconds to install dependencies (#1816) + + ### v2.17.0 _11 March 2024_ diff --git a/docs/faq.md b/docs/faq.md index 352402187..fccf237c5 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -142,7 +142,7 @@ There are two suggested methods for keeping cibuildwheel up to date that instead If you use GitHub Actions for builds, you can use cibuildwheel as an action: ```yaml -uses: pypa/cibuildwheel@v2.17.0 +uses: pypa/cibuildwheel@v2.18.0 ``` This is a composite step that just runs cibuildwheel using pipx. You can set command-line options as `with:` parameters, and use `env:` as normal. @@ -164,7 +164,7 @@ The second option, and the only one that supports other CI systems, is using a ` ```bash # requirements-cibw.txt -cibuildwheel==2.17.0 +cibuildwheel==2.18.0 ``` Then your install step would have `python -m pip install -r requirements-cibw.txt` in it. Your `.github/dependabot.yml` file could look like this: @@ -328,7 +328,7 @@ Solutions to this vary, but the simplest is to use pipx: # most runners have pipx preinstalled, but in case you don't python3 -m pip install pipx -pipx run cibuildwheel==2.17.0 --output-dir wheelhouse +pipx run cibuildwheel==2.18.0 --output-dir wheelhouse pipx run twine upload wheelhouse/*.whl ``` diff --git a/docs/setup.md b/docs/setup.md index 211411368..28c389af2 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -154,7 +154,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/ - uses: actions/checkout@v4 - name: Build wheels - run: pipx run cibuildwheel==2.17.0 + run: pipx run cibuildwheel==2.18.0 - uses: actions/upload-artifact@v4 with: @@ -191,7 +191,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/ - uses: actions/setup-python@v5 - name: Install cibuildwheel - run: python -m pip install cibuildwheel==2.17.0 + run: python -m pip install cibuildwheel==2.18.0 - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse diff --git a/examples/appveyor-minimal.yml b/examples/appveyor-minimal.yml index 91f3de3c1..5a1f59386 100644 --- a/examples/appveyor-minimal.yml +++ b/examples/appveyor-minimal.yml @@ -12,7 +12,7 @@ stack: python 3.7 init: - cmd: set PATH=C:\Python37;C:\Python37\Scripts;%PATH% -install: python -m pip install cibuildwheel==2.17.0 +install: python -m pip install cibuildwheel==2.18.0 build_script: python -m cibuildwheel --output-dir wheelhouse diff --git a/examples/azure-pipelines-minimal.yml b/examples/azure-pipelines-minimal.yml index 8698d1d79..b42943427 100644 --- a/examples/azure-pipelines-minimal.yml +++ b/examples/azure-pipelines-minimal.yml @@ -6,7 +6,7 @@ jobs: - bash: | set -o errexit python3 -m pip install --upgrade pip - pip3 install cibuildwheel==2.17.0 + pip3 install cibuildwheel==2.18.0 displayName: Install dependencies - bash: cibuildwheel --output-dir wheelhouse . displayName: Build wheels @@ -20,7 +20,7 @@ jobs: - bash: | set -o errexit python3 -m pip install --upgrade pip - python3 -m pip install cibuildwheel==2.17.0 + python3 -m pip install cibuildwheel==2.18.0 displayName: Install dependencies - bash: cibuildwheel --output-dir wheelhouse . displayName: Build wheels @@ -34,7 +34,7 @@ jobs: - bash: | set -o errexit python -m pip install --upgrade pip - pip install cibuildwheel==2.17.0 + pip install cibuildwheel==2.18.0 displayName: Install dependencies - bash: cibuildwheel --output-dir wheelhouse . displayName: Build wheels diff --git a/examples/circleci-minimal.yml b/examples/circleci-minimal.yml index 039a18ac3..f6784ed9a 100644 --- a/examples/circleci-minimal.yml +++ b/examples/circleci-minimal.yml @@ -11,7 +11,7 @@ jobs: - run: name: Build the Linux wheels. command: | - pip3 install --user cibuildwheel==2.17.0 + pip3 install --user cibuildwheel==2.18.0 cibuildwheel --output-dir wheelhouse - store_artifacts: path: wheelhouse/ @@ -28,7 +28,7 @@ jobs: - run: name: Build the Linux aarch64 wheels. command: | - python3 -m pip install --user cibuildwheel==2.17.0 + python3 -m pip install --user cibuildwheel==2.18.0 python3 -m cibuildwheel --output-dir wheelhouse - store_artifacts: path: wheelhouse/ @@ -42,7 +42,7 @@ jobs: - run: name: Build the OS X wheels. command: | - pip3 install cibuildwheel==2.17.0 + pip3 install cibuildwheel==2.18.0 cibuildwheel --output-dir wheelhouse - store_artifacts: path: wheelhouse/ diff --git a/examples/cirrus-ci-intel-mac.yml b/examples/cirrus-ci-intel-mac.yml index cf936282f..e30f02fca 100644 --- a/examples/cirrus-ci-intel-mac.yml +++ b/examples/cirrus-ci-intel-mac.yml @@ -1,6 +1,6 @@ build_and_store_wheels: &BUILD_AND_STORE_WHEELS install_cibuildwheel_script: - - python -m pip install cibuildwheel==2.17.0 + - python -m pip install cibuildwheel==2.18.0 run_cibuildwheel_script: - cibuildwheel wheels_artifacts: diff --git a/examples/cirrus-ci-minimal.yml b/examples/cirrus-ci-minimal.yml index 9470c3981..e2fdf237d 100644 --- a/examples/cirrus-ci-minimal.yml +++ b/examples/cirrus-ci-minimal.yml @@ -1,6 +1,6 @@ build_and_store_wheels: &BUILD_AND_STORE_WHEELS install_cibuildwheel_script: - - python -m pip install cibuildwheel==2.17.0 + - python -m pip install cibuildwheel==2.18.0 run_cibuildwheel_script: - cibuildwheel wheels_artifacts: diff --git a/examples/github-deploy.yml b/examples/github-deploy.yml index 3562d7437..5e089def9 100644 --- a/examples/github-deploy.yml +++ b/examples/github-deploy.yml @@ -23,7 +23,7 @@ jobs: - uses: actions/checkout@v4 - name: Build wheels - uses: pypa/cibuildwheel@v2.17.0 + uses: pypa/cibuildwheel@v2.18.0 - uses: actions/upload-artifact@v4 with: diff --git a/examples/github-minimal.yml b/examples/github-minimal.yml index 72eb71be4..8c01d8446 100644 --- a/examples/github-minimal.yml +++ b/examples/github-minimal.yml @@ -15,7 +15,7 @@ jobs: - uses: actions/checkout@v4 - name: Build wheels - uses: pypa/cibuildwheel@v2.17.0 + uses: pypa/cibuildwheel@v2.18.0 # env: # CIBW_SOME_OPTION: value # ... diff --git a/examples/github-with-qemu.yml b/examples/github-with-qemu.yml index 54fa4856f..517d86703 100644 --- a/examples/github-with-qemu.yml +++ b/examples/github-with-qemu.yml @@ -21,7 +21,7 @@ jobs: platforms: all - name: Build wheels - uses: pypa/cibuildwheel@v2.17.0 + uses: pypa/cibuildwheel@v2.18.0 env: # configure cibuildwheel to build native archs ('auto'), and some # emulated ones diff --git a/examples/gitlab-minimal.yml b/examples/gitlab-minimal.yml index 90d20fb6a..d4fb6f4df 100644 --- a/examples/gitlab-minimal.yml +++ b/examples/gitlab-minimal.yml @@ -12,7 +12,7 @@ linux: DOCKER_TLS_CERTDIR: "" script: - curl -sSL https://get.docker.com/ | sh - - python -m pip install cibuildwheel==2.17.0 + - python -m pip install cibuildwheel==2.18.0 - cibuildwheel --output-dir wheelhouse artifacts: paths: @@ -23,7 +23,7 @@ windows: before_script: - choco install python -y --version 3.8.6 - choco install git.install -y - - py -m pip install cibuildwheel==2.17.0 + - py -m pip install cibuildwheel==2.18.0 script: - py -m cibuildwheel --output-dir wheelhouse --platform windows artifacts: diff --git a/examples/gitlab-with-qemu.yml b/examples/gitlab-with-qemu.yml index 6bcf0b484..7de05582a 100644 --- a/examples/gitlab-with-qemu.yml +++ b/examples/gitlab-with-qemu.yml @@ -14,7 +14,7 @@ linux: - curl -sSL https://get.docker.com/ | sh # Warning: This is extremely slow, be careful with how many wheels you build - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - - python -m pip install cibuildwheel==2.17.0 + - python -m pip install cibuildwheel==2.18.0 # Assuming your CI runner's default architecture is x86_64... - cibuildwheel --output-dir wheelhouse --platform linux --archs aarch64 artifacts: diff --git a/examples/travis-ci-deploy.yml b/examples/travis-ci-deploy.yml index a75bf79ed..74c082dd8 100644 --- a/examples/travis-ci-deploy.yml +++ b/examples/travis-ci-deploy.yml @@ -20,7 +20,7 @@ jobs: - ln -s /c/Python38/python.exe /c/Python38/python3.exe install: - - python3 -m pip install cibuildwheel==2.17.0 + - python3 -m pip install cibuildwheel==2.18.0 script: # build the wheels, put them into './dist' diff --git a/examples/travis-ci-minimal.yml b/examples/travis-ci-minimal.yml index df4babfdd..de0ea6913 100644 --- a/examples/travis-ci-minimal.yml +++ b/examples/travis-ci-minimal.yml @@ -26,7 +26,7 @@ jobs: - ln -s /c/Python38/python.exe /c/Python38/python3.exe install: - - python3 -m pip install cibuildwheel==2.17.0 + - python3 -m pip install cibuildwheel==2.18.0 script: # build the wheels, put them into './wheelhouse' diff --git a/examples/travis-ci-test-and-deploy.yml b/examples/travis-ci-test-and-deploy.yml index 8d77a9eff..23d0d1fec 100644 --- a/examples/travis-ci-test-and-deploy.yml +++ b/examples/travis-ci-test-and-deploy.yml @@ -54,7 +54,7 @@ jobs: - stage: deploy name: Build and deploy Linux wheels services: docker - install: python3 -m pip install cibuildwheel==2.17.0 twine + install: python3 -m pip install cibuildwheel==2.18.0 twine script: python3 -m cibuildwheel --output-dir wheelhouse after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl # Deploy on windows @@ -62,7 +62,7 @@ jobs: name: Build and deploy Windows wheels os: windows language: shell - install: python3 -m pip install cibuildwheel==2.17.0 twine + install: python3 -m pip install cibuildwheel==2.18.0 twine script: python3 -m cibuildwheel --output-dir wheelhouse after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl diff --git a/setup.cfg b/setup.cfg index 5a8196198..bb62533b0 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = cibuildwheel -version = 2.17.0 +version = 2.18.0 description = Build Python wheels on CI with minimal configuration. long_description = file: README.md long_description_content_type = text/markdown From 63daa02352cd048ebd2414ce9d1c2bb5db7ff2bc Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Sun, 12 May 2024 00:51:20 -0400 Subject: [PATCH 28/44] docs: fix options page (#1821) Signed-off-by: Henry Schreiner --- .readthedocs.yml | 4 ++-- mkdocs.yml | 2 ++ noxfile.py | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index 23af5dd29..6f1f070a1 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -11,5 +11,5 @@ build: - asdf install uv latest - asdf global uv latest - uv venv - - uv pip install .[docs] - - .venv/bin/python -m mkdocs build --site-dir $READTHEDOCS_OUTPUT/html + - uv pip install -e.[docs] + - . .venv/bin/activate && mkdocs build --strict --verbose --site-dir $READTHEDOCS_OUTPUT/html diff --git a/mkdocs.yml b/mkdocs.yml index 510db9498..6749726dc 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -49,3 +49,5 @@ plugins: module_name: docs/main j2_variable_start_string: Β« j2_variable_end_string: Β» + on_error_fail: true + on_undefined: strict diff --git a/noxfile.py b/noxfile.py index 8529e6002..b54dcc0bd 100644 --- a/noxfile.py +++ b/noxfile.py @@ -133,7 +133,7 @@ def docs(session: nox.Session) -> None: Build the docs. Will serve unless --non-interactive """ session.install("-e.[docs]") - session.run("mkdocs", "serve" if session.interactive else "build") + session.run("mkdocs", "serve" if session.interactive else "build", "--strict", *session.posargs) @nox.session From ced16da65f07b7079ffc3ab7d7dd8ae574102fef Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Sun, 12 May 2024 01:06:26 -0400 Subject: [PATCH 29/44] ci: minor cleanup for readthedocs Signed-off-by: Henry Schreiner --- .readthedocs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index 6f1f070a1..e4b1e4284 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -12,4 +12,4 @@ build: - asdf global uv latest - uv venv - uv pip install -e.[docs] - - . .venv/bin/activate && mkdocs build --strict --verbose --site-dir $READTHEDOCS_OUTPUT/html + - . .venv/bin/activate && NO_COLOR=1 mkdocs build --strict --site-dir $READTHEDOCS_OUTPUT/html From e82b1bfc44afad6a48a2c83435543de2d65187a2 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Sun, 12 May 2024 02:37:46 -0400 Subject: [PATCH 30/44] docs: fix formatting on changelog (#1822) Signed-off-by: Henry Schreiner --- README.md | 11 ++++++----- docs/changelog.md | 13 +++++++------ 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 9ebea0695..6fbf81af5 100644 --- a/README.md +++ b/README.md @@ -216,7 +216,8 @@ _12 May 2024_ - ✨ Adds CPython 3.13 support, under the prerelease flag [CIBW_PRERELEASE_PYTHONS](https://cibuildwheel.pypa.io/en/stable/options/#prerelease-pythons). This version of cibuildwheel uses 3.13.0b1. Free-threading mode is not available yet, waiting on official binaries (planned for beta 2) and pip support. - While CPython is in beta, the ABI can change, so your wheels might not be compatible with the final release. For this reason, we don't recommend distributing wheels until RC1, at which point 3.13 will be available in cibuildwheel without the flag. (#1816) + _While CPython is in beta, the ABI can change, so your wheels might not be compatible with the final release. For this reason, we don't recommend distributing wheels until RC1, at which point 3.13 will be available in cibuildwheel without the flag._ (#1816) + - ✨ Musllinux now defaults to `musllinux_1_2`. You can set the older `manylinux_1_1` via config if needed. (#1817) - πŸ›  No longer pre-seed setuptools/wheel in virtual environments (#1819) - πŸ›  Respect the constraints file when building with pip, matching build (#1818) @@ -232,14 +233,14 @@ _12 May 2024_ _11 March 2024_ - 🌟 Adds the ability to inherit configuration in TOML overrides. This makes certain configurations much simpler. If you're overriding an option like `before-build` or `environment`, and you just want to add an extra command or environment variable, you can just append (or prepend) to the previous config. See [the docs](https://cibuildwheel.pypa.io/en/stable/options/#inherit) for more information. (#1730) -- 🌟 Adds official support for native arm64 macOS GitHub runners. To use them, just specify `macos-14` as an `os` of your job in your workflow file. You can also keep `macos-13` in your build matrix to build x86_64. Check out the new [GitHub Actions example config](https://cibuildwheel.pypa.io/en/stable/setup/#github-actions). +- 🌟 Adds official support for native `arm64` macOS GitHub runners. To use them, just specify `macos-14` as an `os` of your job in your workflow file. You can also keep `macos-13` in your build matrix to build `x86_64`. Check out the new [GitHub Actions example config](https://cibuildwheel.pypa.io/en/stable/setup/#github-actions). - ✨ You no longer need to specify `--platform` to run cibuildwheel locally! Instead it will detect your platform automatically. This was a safety feature, no longer necessary. (#1727) - πŸ›  Removed setuptools and wheel pinned versions. This only affects old-style projects without a `pyproject.toml`, projects with `pyproject.toml` are already getting fresh versions of their `build-system.requires` installed into an isolated environment. (#1725) - πŸ›  Improve how the GitHub Action passes arguments (#1757) - πŸ›  Remove a system-wide install of pipx in the GitHub Action (#1745) -- πŸ› No longer will cibuildwheel override the PIP_CONSTRAINT environment variable when using the `build` frontend. Instead it will be extended. (#1675) -- πŸ› Fix a bug where building and testing both x86_86 and arm64 wheels on the same runner caused the wrong architectures in the test environment (#1750) -- πŸ› Fix a bug that prevented testing a CPython 3.8 wheel targeting macOS 11+ on x86_64 (#1768) +- πŸ› No longer will cibuildwheel override the `PIP_CONSTRAINT` environment variable when using the `build` frontend. Instead it will be extended. (#1675) +- πŸ› Fix a bug where building and testing both `x86_86` and `arm64` wheels on the same runner caused the wrong architectures in the test environment (#1750) +- πŸ› Fix a bug that prevented testing a CPython 3.8 wheel targeting macOS 11+ on `x86_64` (#1768) - πŸ“š Moved the docs onto the official PyPA domain - they're now available at https://cibuildwheel.pypa.io . (#1775) - πŸ“š Docs and examples improvements (#1762, #1734) diff --git a/docs/changelog.md b/docs/changelog.md index 86e2aaa6c..573d1ca67 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -10,7 +10,8 @@ _12 May 2024_ - ✨ Adds CPython 3.13 support, under the prerelease flag [CIBW_PRERELEASE_PYTHONS](https://cibuildwheel.pypa.io/en/stable/options/#prerelease-pythons). This version of cibuildwheel uses 3.13.0b1. Free-threading mode is not available yet, waiting on official binaries (planned for beta 2) and pip support. - While CPython is in beta, the ABI can change, so your wheels might not be compatible with the final release. For this reason, we don't recommend distributing wheels until RC1, at which point 3.13 will be available in cibuildwheel without the flag. (#1816) + _While CPython is in beta, the ABI can change, so your wheels might not be compatible with the final release. For this reason, we don't recommend distributing wheels until RC1, at which point 3.13 will be available in cibuildwheel without the flag._ (#1816) + - ✨ Musllinux now defaults to `musllinux_1_2`. You can set the older `manylinux_1_1` via config if needed. (#1817) - πŸ›  No longer pre-seed setuptools/wheel in virtual environments (#1819) - πŸ›  Respect the constraints file when building with pip, matching build (#1818) @@ -26,14 +27,14 @@ _12 May 2024_ _11 March 2024_ - 🌟 Adds the ability to inherit configuration in TOML overrides. This makes certain configurations much simpler. If you're overriding an option like `before-build` or `environment`, and you just want to add an extra command or environment variable, you can just append (or prepend) to the previous config. See [the docs](https://cibuildwheel.pypa.io/en/stable/options/#inherit) for more information. (#1730) -- 🌟 Adds official support for native arm64 macOS GitHub runners. To use them, just specify `macos-14` as an `os` of your job in your workflow file. You can also keep `macos-13` in your build matrix to build x86_64. Check out the new [GitHub Actions example config](https://cibuildwheel.pypa.io/en/stable/setup/#github-actions). +- 🌟 Adds official support for native `arm64` macOS GitHub runners. To use them, just specify `macos-14` as an `os` of your job in your workflow file. You can also keep `macos-13` in your build matrix to build `x86_64`. Check out the new [GitHub Actions example config](https://cibuildwheel.pypa.io/en/stable/setup/#github-actions). - ✨ You no longer need to specify `--platform` to run cibuildwheel locally! Instead it will detect your platform automatically. This was a safety feature, no longer necessary. (#1727) - πŸ›  Removed setuptools and wheel pinned versions. This only affects old-style projects without a `pyproject.toml`, projects with `pyproject.toml` are already getting fresh versions of their `build-system.requires` installed into an isolated environment. (#1725) - πŸ›  Improve how the GitHub Action passes arguments (#1757) - πŸ›  Remove a system-wide install of pipx in the GitHub Action (#1745) -- πŸ› No longer will cibuildwheel override the PIP_CONSTRAINT environment variable when using the `build` frontend. Instead it will be extended. (#1675) -- πŸ› Fix a bug where building and testing both x86_86 and arm64 wheels on the same runner caused the wrong architectures in the test environment (#1750) -- πŸ› Fix a bug that prevented testing a CPython 3.8 wheel targeting macOS 11+ on x86_64 (#1768) +- πŸ› No longer will cibuildwheel override the `PIP_CONSTRAINT` environment variable when using the `build` frontend. Instead it will be extended. (#1675) +- πŸ› Fix a bug where building and testing both `x86_86` and `arm64` wheels on the same runner caused the wrong architectures in the test environment (#1750) +- πŸ› Fix a bug that prevented testing a CPython 3.8 wheel targeting macOS 11+ on `x86_64` (#1768) - πŸ“š Moved the docs onto the official PyPA domain - they're now available at https://cibuildwheel.pypa.io . (#1775) - πŸ“š Docs and examples improvements (#1762, #1734) @@ -110,7 +111,7 @@ _10 July 2023_ - πŸ›  Updates the prerelease CPython 3.12 version to 3.12.0b3. - ✨ Allow the use of the `{wheel}` placeholder in CIBW_TEST_COMMAND (#1533) - πŸ“š Docs & examples updates (#1532, #1416) -- ⚠️ Removed support for running cibuildwheel in Python 3.7. Python 3.7 is EOL. However, cibuildwheel continues to build Python 3.7 wheels for the moment. (#1175) +- ⚠️ Removed support for running cibuildwheel in Python 3.7. Python 3.7 is EOL. However, cibuildwheel continues to build Python 3.7 wheels for the moment. (#1175) ### v2.13.1 From 678ef2164797f2e285e7fbdc7e446427f5857b96 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Mon, 13 May 2024 23:40:34 -0400 Subject: [PATCH 31/44] chore: more modern nox (#1823) * chore: more modern nox Signed-off-by: Henry Schreiner * docs: fix running from unsourced venv Signed-off-by: Henry Schreiner * docs: minor typo fix Signed-off-by: Henry Schreiner * docs: fix wrong link #1825 Signed-off-by: Henry Schreiner --------- Signed-off-by: Henry Schreiner --- .readthedocs.yml | 2 +- README.md | 12 ++++++------ bin/generate_schema.py | 4 ++++ bin/projects.py | 8 ++++++++ docs/changelog.md | 6 +++--- docs/data/projects.yml | 14 +++++++------- docs/main.py | 9 ++++++--- docs/working-examples.md | 18 +++++++++--------- noxfile.py | 39 +++++++++++++++++++++++++-------------- 9 files changed, 69 insertions(+), 43 deletions(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index e4b1e4284..30a381ecc 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -12,4 +12,4 @@ build: - asdf global uv latest - uv venv - uv pip install -e.[docs] - - . .venv/bin/activate && NO_COLOR=1 mkdocs build --strict --site-dir $READTHEDOCS_OUTPUT/html + - NO_COLOR=1 .venv/bin/mkdocs build --strict --site-dir $READTHEDOCS_OUTPUT/html diff --git a/README.md b/README.md index 6fbf81af5..c98487363 100644 --- a/README.md +++ b/README.md @@ -165,19 +165,19 @@ Here are some repos that use cibuildwheel. | [NCNN][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | ncnn is a high-performance neural network inference framework optimized for the mobile platform | | [Prophet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Tool for producing high quality forecasts for time series data that has multiple seasonality with linear or non-linear growth. | | [MyPy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | The compiled version of MyPy using MyPyC. | -| [Kivy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Open source UI framework written in Python, running on Windows, Linux, macOS, Android and iOS | | [duckdb][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | DuckDB is an in-process SQL OLAP Database Management System | +| [Kivy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Open source UI framework written in Python, running on Windows, Linux, macOS, Android and iOS | [scikit-learn]: https://github.com/scikit-learn/scikit-learn -[pytorch-fairseq]: https://github.com/pytorch/fairseq +[pytorch-fairseq]: https://github.com/facebookresearch/fairseq [NumPy]: https://github.com/numpy/numpy [Tornado]: https://github.com/tornadoweb/tornado [Matplotlib]: https://github.com/matplotlib/matplotlib [NCNN]: https://github.com/Tencent/ncnn [Prophet]: https://github.com/facebook/prophet [MyPy]: https://github.com/mypyc/mypy_mypyc-wheels -[Kivy]: https://github.com/kivy/kivy [duckdb]: https://github.com/duckdb/duckdb +[Kivy]: https://github.com/kivy/kivy [appveyor icon]: docs/data/readme_icons/appveyor.svg [github icon]: docs/data/readme_icons/github.svg @@ -214,11 +214,11 @@ Changelog _12 May 2024_ -- ✨ Adds CPython 3.13 support, under the prerelease flag [CIBW_PRERELEASE_PYTHONS](https://cibuildwheel.pypa.io/en/stable/options/#prerelease-pythons). This version of cibuildwheel uses 3.13.0b1. Free-threading mode is not available yet, waiting on official binaries (planned for beta 2) and pip support. +- ✨ Adds CPython 3.13 support, under the prerelease flag [CIBW_PRERELEASE_PYTHONS](https://cibuildwheel.pypa.io/en/stable/options/#prerelease-pythons). This version of cibuildwheel uses 3.13.0b1. Free-threading mode is not available yet (#1657), waiting on official binaries (planned for beta 2) and pip support. - _While CPython is in beta, the ABI can change, so your wheels might not be compatible with the final release. For this reason, we don't recommend distributing wheels until RC1, at which point 3.13 will be available in cibuildwheel without the flag._ (#1816) + _While CPython is in beta, the ABI can change, so your wheels might not be compatible with the final release. For this reason, we don't recommend distributing wheels until RC1, at which point 3.13 will be available in cibuildwheel without the flag._ (#1815) -- ✨ Musllinux now defaults to `musllinux_1_2`. You can set the older `manylinux_1_1` via config if needed. (#1817) +- ✨ Musllinux now defaults to `musllinux_1_2`. You can set the older `musllinux_1_1` via config if needed. (#1817) - πŸ›  No longer pre-seed setuptools/wheel in virtual environments (#1819) - πŸ›  Respect the constraints file when building with pip, matching build (#1818) - πŸ›  Use uv to compile our pinned dependencies, 10x faster and doesn't require special setup (#1778) diff --git a/bin/generate_schema.py b/bin/generate_schema.py index 7a9954a93..1ed1b58e9 100755 --- a/bin/generate_schema.py +++ b/bin/generate_schema.py @@ -1,5 +1,9 @@ #!/usr/bin/env python +# /// script +# dependencies = ["pyyaml"] +# /// + import argparse import copy import json diff --git a/bin/projects.py b/bin/projects.py index 546a10c82..3b39c3da4 100755 --- a/bin/projects.py +++ b/bin/projects.py @@ -1,5 +1,13 @@ #!/usr/bin/env python3 +# /// script +# dependencies = [ +# "click", +# "pyyaml", +# "pygithub", +# ] +# /// + """ Convert a yaml project list into a nice table. diff --git a/docs/changelog.md b/docs/changelog.md index 573d1ca67..f6ec6e589 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -8,11 +8,11 @@ title: Changelog _12 May 2024_ -- ✨ Adds CPython 3.13 support, under the prerelease flag [CIBW_PRERELEASE_PYTHONS](https://cibuildwheel.pypa.io/en/stable/options/#prerelease-pythons). This version of cibuildwheel uses 3.13.0b1. Free-threading mode is not available yet, waiting on official binaries (planned for beta 2) and pip support. +- ✨ Adds CPython 3.13 support, under the prerelease flag [CIBW_PRERELEASE_PYTHONS](https://cibuildwheel.pypa.io/en/stable/options/#prerelease-pythons). This version of cibuildwheel uses 3.13.0b1. Free-threading mode is not available yet (#1657), waiting on official binaries (planned for beta 2) and pip support. - _While CPython is in beta, the ABI can change, so your wheels might not be compatible with the final release. For this reason, we don't recommend distributing wheels until RC1, at which point 3.13 will be available in cibuildwheel without the flag._ (#1816) + _While CPython is in beta, the ABI can change, so your wheels might not be compatible with the final release. For this reason, we don't recommend distributing wheels until RC1, at which point 3.13 will be available in cibuildwheel without the flag._ (#1815) -- ✨ Musllinux now defaults to `musllinux_1_2`. You can set the older `manylinux_1_1` via config if needed. (#1817) +- ✨ Musllinux now defaults to `musllinux_1_2`. You can set the older `musllinux_1_1` via config if needed. (#1817) - πŸ›  No longer pre-seed setuptools/wheel in virtual environments (#1819) - πŸ›  Respect the constraints file when building with pip, matching build (#1818) - πŸ›  Use uv to compile our pinned dependencies, 10x faster and doesn't require special setup (#1778) diff --git a/docs/data/projects.yml b/docs/data/projects.yml index 9d71509a2..86e5ced6c 100644 --- a/docs/data/projects.yml +++ b/docs/data/projects.yml @@ -26,7 +26,7 @@ notes: A simple C extension, without external dependencies - name: websockets - gh: aaugustin/websockets + gh: python-websockets/websockets ci: [travisci] ci_config: .travis.yml os: [apple, linux] @@ -325,12 +325,12 @@ notes: Full range of wheels for setuptools rust, with auto release and PyPI deploy. - name: python-snappy - gh: andrix/python-snappy + gh: intake/python-snappy ci: [github] os: [apple, linux, windows] - name: sourmash - gh: dib-lab/sourmash + gh: sourmash-bio/sourmash ci: [github] os: [apple, linux, windows] @@ -418,7 +418,7 @@ notes: Tornado is a Python web framework and asynchronous networking library. Uses stable ABI for a small C extension. - name: pytorch-fairseq - gh: pytorch/fairseq + gh: facebookresearch/fairseq ci: [github] os: [apple, linux] @@ -475,7 +475,7 @@ os: [apple, linux, windows] - name: OpenSpiel - gh: deepmind/open_spiel + gh: google-deepmind/open_spiel ci: [github] os: [apple, linux] @@ -505,7 +505,7 @@ os: [apple, linux, windows] - name: OpenTimelineIO - gh: PixarAnimationStudios/OpenTimelineIO + gh: AcademySoftwareFoundation/OpenTimelineIO ci: [github] os: [apple, linux, windows] @@ -584,7 +584,7 @@ notes: Includes GPU support for linux wheels - name: power-grid-model - gh: alliander-opensource/power-grid-model + gh: PowerGridModel/power-grid-model ci: [github] os: [windows, apple, linux] notes: Python/C++ library for distribution power system analysis diff --git a/docs/main.py b/docs/main.py index acb0d49cd..106cbf241 100644 --- a/docs/main.py +++ b/docs/main.py @@ -1,10 +1,10 @@ from __future__ import annotations +import os import subprocess +import sysconfig from typing import Any -# Requires Python 3.7+ - def define_env(env: Any) -> None: "Hook function for mkdocs-macros" @@ -12,4 +12,7 @@ def define_env(env: Any) -> None: @env.macro def subprocess_run(*args: str) -> str: "Run a subprocess and return the stdout" - return subprocess.run(args, check=True, capture_output=True, text=True).stdout + env = os.environ.copy() + scripts = sysconfig.get_path("scripts") + env["PATH"] = f"{scripts}{os.pathsep}{env.get('PATH', '')}" + return subprocess.run(args, check=True, capture_output=True, text=True, env=env).stdout diff --git a/docs/working-examples.md b/docs/working-examples.md index 6460c6055..99878a50b 100644 --- a/docs/working-examples.md +++ b/docs/working-examples.md @@ -16,8 +16,8 @@ title: Working examples | [NCNN][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | ncnn is a high-performance neural network inference framework optimized for the mobile platform | | [Prophet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Tool for producing high quality forecasts for time series data that has multiple seasonality with linear or non-linear growth. | | [MyPy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | The compiled version of MyPy using MyPyC. | -| [Kivy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Open source UI framework written in Python, running on Windows, Linux, macOS, Android and iOS | | [duckdb][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | DuckDB is an in-process SQL OLAP Database Management System | +| [Kivy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Open source UI framework written in Python, running on Windows, Linux, macOS, Android and iOS | | [MemRay][] | ![github icon][] | ![linux icon][] | Memray is a memory profiler for Python | | [Triton][] | ![github icon][] | ![linux icon][] | Self hosted runners | | [uvloop][] | ![github icon][] | ![apple icon][] ![linux icon][] | Ultra fast asyncio event loop. | @@ -118,15 +118,15 @@ title: Working examples | [pybind11 cross build example][] | ![github icon][] ![gitlab icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Same as pybind11 cmake_example but used to demo Linux ARM + Windows + macOS builds on GitLab | [scikit-learn]: https://github.com/scikit-learn/scikit-learn -[pytorch-fairseq]: https://github.com/pytorch/fairseq +[pytorch-fairseq]: https://github.com/facebookresearch/fairseq [NumPy]: https://github.com/numpy/numpy [Tornado]: https://github.com/tornadoweb/tornado [Matplotlib]: https://github.com/matplotlib/matplotlib [NCNN]: https://github.com/Tencent/ncnn [Prophet]: https://github.com/facebook/prophet [MyPy]: https://github.com/mypyc/mypy_mypyc-wheels -[Kivy]: https://github.com/kivy/kivy [duckdb]: https://github.com/duckdb/duckdb +[Kivy]: https://github.com/kivy/kivy [MemRay]: https://github.com/bloomberg/memray [Triton]: https://github.com/openai/triton [uvloop]: https://github.com/MagicStack/uvloop @@ -141,11 +141,11 @@ title: Working examples [twisted-iocpsupport]: https://github.com/twisted/twisted-iocpsupport [PyOxidizer]: https://github.com/indygreg/PyOxidizer [cvxpy]: https://github.com/cvxpy/cvxpy -[websockets]: https://github.com/aaugustin/websockets +[websockets]: https://github.com/python-websockets/websockets [pedalboard]: https://github.com/spotify/pedalboard [River]: https://github.com/online-ml/river [UltraJSON]: https://github.com/ultrajson/ultrajson -[OpenSpiel]: https://github.com/deepmind/open_spiel +[OpenSpiel]: https://github.com/google-deepmind/open_spiel [aiortc]: https://github.com/aiortc/aiortc [Confluent client for Kafka]: https://github.com/confluentinc/confluent-kafka-python [Dependency Injector]: https://github.com/ets-labs/python-dependency-injector @@ -169,7 +169,7 @@ title: Working examples [aioquic]: https://github.com/aiortc/aioquic [Psycopg 3]: https://github.com/psycopg/psycopg [ruptures]: https://github.com/deepcharles/ruptures -[OpenTimelineIO]: https://github.com/PixarAnimationStudios/OpenTimelineIO +[OpenTimelineIO]: https://github.com/AcademySoftwareFoundation/OpenTimelineIO [PyTables]: https://github.com/PyTables/PyTables [Parselmouth]: https://github.com/YannickJadoul/Parselmouth [google neuroglancer]: https://github.com/google/neuroglancer @@ -186,9 +186,9 @@ title: Working examples [dd-trace-py]: https://github.com/DataDog/dd-trace-py [python-rapidjson]: https://github.com/python-rapidjson/python-rapidjson [tgcalls]: https://github.com/MarshalX/tgcalls -[python-snappy]: https://github.com/andrix/python-snappy +[python-snappy]: https://github.com/intake/python-snappy [pybind11 python_example]: https://github.com/pybind/python_example -[sourmash]: https://github.com/dib-lab/sourmash +[sourmash]: https://github.com/sourmash-bio/sourmash [abess]: https://github.com/abess-team/abess [cyvcf2]: https://github.com/brentp/cyvcf2 [matrixprofile]: https://github.com/matrix-profile-foundation/matrixprofile @@ -203,7 +203,7 @@ title: Working examples [bx-python]: https://github.com/bxlab/bx-python [boost-histogram]: https://github.com/scikit-hep/boost-histogram [Python-WebRTC]: https://github.com/MarshalX/python-webrtc -[power-grid-model]: https://github.com/alliander-opensource/power-grid-model +[power-grid-model]: https://github.com/PowerGridModel/power-grid-model [pybase64]: https://github.com/mayeut/pybase64 [fathon]: https://github.com/stfbnc/fathon [Imagecodecs (fork)]: https://github.com/czaki/imagecodecs_build diff --git a/noxfile.py b/noxfile.py index b54dcc0bd..3c289a677 100644 --- a/noxfile.py +++ b/noxfile.py @@ -4,15 +4,21 @@ import shutil import sys from pathlib import Path +from typing import Any import nox +nox.needs_version = ">=2024.4.15" nox.options.sessions = ["lint", "pylint", "check_manifest", "tests"] +nox.options.default_venv_backend = "uv|virtualenv" DIR = Path(__file__).parent.resolve() -if os.environ.get("CI", None): - nox.options.error_on_missing_interpreters = True + +def install_and_run(session: nox.Session, script: str, *args: str, **kwargs: Any) -> str | None: + deps = nox.project.load_toml(script)["dependencies"] + session.install(*deps) + return session.run("python", script, *args, **kwargs) @nox.session @@ -20,11 +26,11 @@ def tests(session: nox.Session) -> None: """ Run the unit and regular tests. """ - unit_test_args = ["--run-docker"] if sys.platform.startswith("linux") else [] session.install("-e.[test]") if session.posargs: session.run("pytest", *session.posargs) else: + unit_test_args = ["--run-docker"] if sys.platform.startswith("linux") else [] session.run("pytest", "unit_test", *unit_test_args) session.run("pytest", "test", "-x", "--durations", "0", "--timeout=2400", "test") @@ -44,8 +50,7 @@ def pylint(session: nox.Session) -> None: Run pylint. """ - name = "cibuildwheel @ ." if getattr(session.virtualenv, "venv_backend", "") == "uv" else "." - session.install("pylint", name) + session.install("pylint", ".") session.run("pylint", "cibuildwheel", *session.posargs) @@ -65,7 +70,7 @@ def update_constraints(session: nox.Session) -> None: Update the dependencies inplace. """ - if getattr(session.virtualenv, "venv_backend", "") != "uv": + if session.venv_backend != "uv": session.install("uv>=0.1.23") for minor_version in range(7, 14): @@ -96,20 +101,19 @@ def update_pins(session: nox.Session) -> None: """ Update the python, docker and virtualenv pins version inplace. """ - session.install("-e", ".[bin]") + session.install("-e.[bin]") session.run("python", "bin/update_pythons.py", "--force") session.run("python", "bin/update_docker.py") session.run("python", "bin/update_virtualenv.py", "--force") -@nox.session +@nox.session(reuse_venv=True) def update_proj(session: nox.Session) -> None: """ Update the README inplace. """ - session.install("-e.[bin]") - session.run( - "python", + install_and_run( + session, "bin/projects.py", "docs/data/projects.yml", *session.posargs, @@ -121,13 +125,20 @@ def generate_schema(session: nox.Session) -> None: """ Generate the cibuildwheel.schema.json file. """ - session.install("pyyaml") - output = session.run("python", "bin/generate_schema.py", silent=True) + output = install_and_run(session, "bin/generate_schema.py", silent=True) assert isinstance(output, str) DIR.joinpath("cibuildwheel/resources/cibuildwheel.schema.json").write_text(output) -@nox.session(python="3.9") +@nox.session(reuse_venv=True) +def bump_version(session: nox.Session) -> None: + """ + Bump cibuildwheel's version. Interactive. + """ + install_and_run(session, "bin/bump_version.py") + + +@nox.session(python="3.12") def docs(session: nox.Session) -> None: """ Build the docs. Will serve unless --non-interactive From 15447bd59178940c2329d157a954667e76ab3bd2 Mon Sep 17 00:00:00 2001 From: "cibuildwheel-bot[bot]" <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> Date: Mon, 13 May 2024 23:40:45 -0400 Subject: [PATCH 32/44] [Bot] Update dependencies (#1824) Update dependencies Co-authored-by: cibuildwheel-bot[bot] <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> --- .../resources/pinned_docker_images.cfg | 48 +++++++++---------- docs/working-examples.md | 4 +- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/cibuildwheel/resources/pinned_docker_images.cfg b/cibuildwheel/resources/pinned_docker_images.cfg index d32d9eef1..7283574c8 100644 --- a/cibuildwheel/resources/pinned_docker_images.cfg +++ b/cibuildwheel/resources/pinned_docker_images.cfg @@ -1,54 +1,54 @@ [x86_64] manylinux1 = quay.io/pypa/manylinux1_x86_64:2024-04-29-76807b8 manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-05-10-7415d48 +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-05-13-63a1ad4 manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-05-10-7415d48 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024-05-10-7415d48 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024-05-10-7415d48 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-05-13-63a1ad4 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024-05-13-63a1ad4 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024-05-13-63a1ad4 [i686] manylinux1 = quay.io/pypa/manylinux1_i686:2024-04-29-76807b8 manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-05-10-7415d48 +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-05-13-63a1ad4 manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024-05-10-7415d48 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024-05-10-7415d48 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024-05-13-63a1ad4 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024-05-13-63a1ad4 [pypy_x86_64] manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-05-10-7415d48 +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-05-13-63a1ad4 manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-05-10-7415d48 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-05-13-63a1ad4 [pypy_i686] manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-05-10-7415d48 +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-05-13-63a1ad4 manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 [aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-05-10-7415d48 +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-05-13-63a1ad4 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-05-10-7415d48 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024-05-10-7415d48 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024-05-10-7415d48 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-05-13-63a1ad4 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024-05-13-63a1ad4 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024-05-13-63a1ad4 [ppc64le] -manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024-05-10-7415d48 +manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024-05-13-63a1ad4 manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024-05-10-7415d48 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024-05-10-7415d48 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024-05-10-7415d48 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024-05-13-63a1ad4 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024-05-13-63a1ad4 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024-05-13-63a1ad4 [s390x] -manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024-05-10-7415d48 +manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024-05-13-63a1ad4 manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024-05-10-7415d48 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024-05-10-7415d48 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024-05-10-7415d48 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024-05-13-63a1ad4 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024-05-13-63a1ad4 +musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024-05-13-63a1ad4 [pypy_aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-05-10-7415d48 +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-05-13-63a1ad4 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-05-10-7415d48 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-05-13-63a1ad4 diff --git a/docs/working-examples.md b/docs/working-examples.md index 99878a50b..1468c3a06 100644 --- a/docs/working-examples.md +++ b/docs/working-examples.md @@ -44,8 +44,8 @@ title: Working examples | [Implicit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes GPU support for linux wheels | | [vispy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Main repository for Vispy | | [tinyobjloader][] | ![azurepipelines icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Tiny but powerful single file wavefront obj loader | -| [coverage.py][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The coverage tool for Python | | [CTranslate2][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes libraries from the [Intel oneAPI toolkit](https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit.html) and CUDA kernels compiled for multiple GPU architectures. | +| [coverage.py][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The coverage tool for Python | | [PyCryptodome][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A self-contained cryptographic library for Python | | [Line Profiler][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Line-by-line profiling for Python | | [PyYAML][] | ![github icon][] | ![apple icon][] | Canonical source repository for PyYAML | @@ -153,8 +153,8 @@ title: Working examples [Implicit]: https://github.com/benfred/implicit [vispy]: https://github.com/vispy/vispy [tinyobjloader]: https://github.com/tinyobjloader/tinyobjloader -[coverage.py]: https://github.com/nedbat/coveragepy [CTranslate2]: https://github.com/OpenNMT/CTranslate2 +[coverage.py]: https://github.com/nedbat/coveragepy [PyCryptodome]: https://github.com/Legrandin/pycryptodome [Line Profiler]: https://github.com/pyutils/line_profiler [PyYAML]: https://github.com/yaml/pyyaml From 666a2c3f1acbf7a082d1e769fc6b74d083c3aba5 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 13 May 2024 23:41:00 -0400 Subject: [PATCH 33/44] [pre-commit.ci] pre-commit autoupdate (#1826) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.4.3 β†’ v0.4.4](https://github.com/astral-sh/ruff-pre-commit/compare/v0.4.3...v0.4.4) - [github.com/python-jsonschema/check-jsonschema: 0.28.2 β†’ 0.28.3](https://github.com/python-jsonschema/check-jsonschema/compare/0.28.2...0.28.3) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index aae22cad7..31c1d7ed6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,7 +14,7 @@ repos: - id: trailing-whitespace - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.4.3 + rev: v0.4.4 hooks: - id: ruff args: ["--fix", "--show-fixes"] @@ -82,7 +82,7 @@ repos: - repo: https://github.com/python-jsonschema/check-jsonschema - rev: 0.28.2 + rev: 0.28.3 hooks: - id: check-dependabot - id: check-github-actions From f8894e67f57b0a170e9f4f5f72ccac17e8d2b9c5 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Wed, 15 May 2024 23:15:53 -0400 Subject: [PATCH 34/44] chore: use the new github actions reporter for pylint (#1827) Signed-off-by: Henry Schreiner --- .github/matchers/pylint.json | 32 -------------------------------- .github/workflows/test.yml | 4 +--- noxfile.py | 2 +- 3 files changed, 2 insertions(+), 36 deletions(-) delete mode 100644 .github/matchers/pylint.json diff --git a/.github/matchers/pylint.json b/.github/matchers/pylint.json deleted file mode 100644 index e3a6bd16b..000000000 --- a/.github/matchers/pylint.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "problemMatcher": [ - { - "severity": "warning", - "pattern": [ - { - "regexp": "^([^:]+):(\\d+):(\\d+): ([A-DF-Z]\\d+): \\033\\[[\\d;]+m([^\\033]+).*$", - "file": 1, - "line": 2, - "column": 3, - "code": 4, - "message": 5 - } - ], - "owner": "pylint-warning" - }, - { - "severity": "error", - "pattern": [ - { - "regexp": "^([^:]+):(\\d+):(\\d+): (E\\d+): \\033\\[[\\d;]+m([^\\033]+).*$", - "file": 1, - "line": 2, - "column": 3, - "code": 4, - "message": 5 - } - ], - "owner": "pylint-error" - } - ] -} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index af3e6be36..98df08c88 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -28,9 +28,7 @@ jobs: - name: Check manifest run: pipx run nox -s check_manifest - name: PyLint checks - run: | - echo "::add-matcher::$GITHUB_WORKSPACE/.github/matchers/pylint.json" - pipx run nox -s pylint + run: pipx run nox -s pylint -- --output-format=github test: name: Test cibuildwheel on ${{ matrix.os }} (${{ matrix.python_version }}) diff --git a/noxfile.py b/noxfile.py index 3c289a677..f12f50066 100644 --- a/noxfile.py +++ b/noxfile.py @@ -50,7 +50,7 @@ def pylint(session: nox.Session) -> None: Run pylint. """ - session.install("pylint", ".") + session.install("pylint>=3.2", "-e.") session.run("pylint", "cibuildwheel", *session.posargs) From 78bca57cb40bb6ccf69eb0c7763906d010920e48 Mon Sep 17 00:00:00 2001 From: Matthieu Darbois Date: Sat, 18 May 2024 18:34:39 +0200 Subject: [PATCH 35/44] fix(tests): linux tests from macOS/Windows arm64 (#1829) * fix(tests): linux tests from macOS/Windows arm64 When running on arm64, macOS reports machine as `arm64` and Windows as `ARM64`. We need to override this to `aarch64` when running linux tests. * fix(tests): fix tests when running with `--run-cp38-universal2` --- test/test_macos_archs.py | 4 +++- test/utils.py | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/test/test_macos_archs.py b/test/test_macos_archs.py index 0437778e4..3f7ceea53 100644 --- a/test/test_macos_archs.py +++ b/test/test_macos_archs.py @@ -202,13 +202,15 @@ def test_universal2_testing_on_arm64(tmp_path, capfd): assert set(actual_wheels) == set(expected_wheels) -def test_cp38_arm64_testing(tmp_path, capfd): +def test_cp38_arm64_testing(tmp_path, capfd, request): if utils.platform != "macos": pytest.skip("this test is only relevant to macos") if get_xcode_version() < (12, 2): pytest.skip("this test only works with Xcode 12.2 or greater") if platform.machine() != "arm64": pytest.skip("this test only works on arm64") + if request.config.getoption("--run-cp38-universal2"): + pytest.skip("--run-cp38-universal2 option skips this test") project_dir = tmp_path / "project" basic_project.generate(project_dir) diff --git a/test/utils.py b/test/utils.py index 522db18b6..f6f610c41 100644 --- a/test/utils.py +++ b/test/utils.py @@ -147,6 +147,9 @@ def expected_wheels( if machine_arch is None: machine_arch = pm.machine() + if platform == "linux" and machine_arch.lower() == "arm64": + # we're running linux tests from macOS/Windows arm64, override platform + machine_arch = "aarch64" if manylinux_versions is None: if machine_arch == "x86_64": From d1a4c9c07436ecbd2132842167071c25cf5295ca Mon Sep 17 00:00:00 2001 From: Matthieu Darbois Date: Mon, 20 May 2024 08:21:42 +0200 Subject: [PATCH 36/44] chore: un-pin virtualenv update (#1830) --- bin/update_virtualenv.py | 19 ++++++++++--------- cibuildwheel/macos.py | 4 +++- cibuildwheel/resources/virtualenv.toml | 4 ++-- cibuildwheel/util.py | 13 ++++++++----- cibuildwheel/windows.py | 4 +++- test/test_dependency_versions.py | 1 - 6 files changed, 26 insertions(+), 19 deletions(-) diff --git a/bin/update_virtualenv.py b/bin/update_virtualenv.py index a18c5f7db..fc69cf63d 100755 --- a/bin/update_virtualenv.py +++ b/bin/update_virtualenv.py @@ -53,10 +53,6 @@ def git_ls_remote_versions(url) -> list[VersionTuple]: if version.is_prerelease: log.info("Ignoring pre-release %r", str(version)) continue - # Do not upgrade past 20.22.0 to keep python 3.6 compat - if version >= Version("20.22.0"): - log.info("Ignoring %r which is not compatible with python 3.6", str(version)) - continue versions.append(VersionTuple(version, version_string)) except InvalidVersion: log.warning("Ignoring ref %r", ref) @@ -82,15 +78,20 @@ def update_virtualenv(force: bool, level: str) -> None: original_toml = toml_file_path.read_text() with toml_file_path.open("rb") as f: - loaded_file = tomllib.load(f) - version = str(loaded_file["version"]) + configurations = tomllib.load(f) + default = configurations.pop("default") + version = str(default["version"]) versions = git_ls_remote_versions(GET_VIRTUALENV_GITHUB) if versions[0].version > Version(version): version = versions[0].version_string - result_toml = ( - f'version = "{version}"\n' - f'url = "{GET_VIRTUALENV_URL_TEMPLATE.format(version=version)}"\n' + configurations["default"] = { + "version": version, + "url": GET_VIRTUALENV_URL_TEMPLATE.format(version=version), + } + result_toml = "".join( + f'{key} = {{ version = "{value["version"]}", url = "{value["url"]}" }}\n' + for key, value in configurations.items() ) rich.print() # spacer diff --git a/cibuildwheel/macos.py b/cibuildwheel/macos.py index 44f9ecf0e..6b219a102 100644 --- a/cibuildwheel/macos.py +++ b/cibuildwheel/macos.py @@ -181,7 +181,9 @@ def setup_python( log.step("Setting up build environment...") venv_path = tmp / "venv" - env = virtualenv(base_python, venv_path, dependency_constraint_flags) + env = virtualenv( + python_configuration.version, base_python, venv_path, dependency_constraint_flags + ) venv_bin_path = venv_path / "bin" assert venv_bin_path.exists() # Fix issue with site.py setting the wrong `sys.prefix`, `sys.exec_prefix`, diff --git a/cibuildwheel/resources/virtualenv.toml b/cibuildwheel/resources/virtualenv.toml index 446d0540e..8d89dc106 100644 --- a/cibuildwheel/resources/virtualenv.toml +++ b/cibuildwheel/resources/virtualenv.toml @@ -1,2 +1,2 @@ -version = "20.21.1" -url = "https://github.com/pypa/get-virtualenv/blob/20.21.1/public/virtualenv.pyz?raw=true" +py36 = { version = "20.21.1", url = "https://github.com/pypa/get-virtualenv/blob/20.21.1/public/virtualenv.pyz?raw=true" } +default = { version = "20.26.2", url = "https://github.com/pypa/get-virtualenv/blob/20.26.2/public/virtualenv.pyz?raw=true" } diff --git a/cibuildwheel/util.py b/cibuildwheel/util.py index 410b1c02a..66be99ca7 100644 --- a/cibuildwheel/util.py +++ b/cibuildwheel/util.py @@ -526,12 +526,15 @@ def get_pip_version(env: Mapping[str, str]) -> str: @lru_cache(maxsize=None) -def _ensure_virtualenv() -> Path: +def _ensure_virtualenv(version: str) -> Path: + version_parts = version.split(".") + key = f"py{version_parts[0]}{version_parts[1]}" input_file = resources_dir / "virtualenv.toml" with input_file.open("rb") as f: loaded_file = tomllib.load(f) - version = str(loaded_file["version"]) - url = str(loaded_file["url"]) + configuration = loaded_file.get(key, loaded_file["default"]) + version = str(configuration["version"]) + url = str(configuration["url"]) path = CIBW_CACHE_PATH / f"virtualenv-{version}.pyz" with FileLock(str(path) + ".lock"): if not path.exists(): @@ -587,10 +590,10 @@ def _parse_constraints_for_virtualenv( def virtualenv( - python: Path, venv_path: Path, dependency_constraint_flags: Sequence[PathOrStr] + version: str, python: Path, venv_path: Path, dependency_constraint_flags: Sequence[PathOrStr] ) -> dict[str, str]: assert python.exists() - virtualenv_app = _ensure_virtualenv() + virtualenv_app = _ensure_virtualenv(version) allowed_seed_packages = ["pip", "setuptools", "wheel"] constraints = _parse_constraints_for_virtualenv( allowed_seed_packages, dependency_constraint_flags diff --git a/cibuildwheel/windows.py b/cibuildwheel/windows.py index 13d3a1857..e661716d4 100644 --- a/cibuildwheel/windows.py +++ b/cibuildwheel/windows.py @@ -246,7 +246,9 @@ def setup_python( log.step("Setting up build environment...") venv_path = tmp / "venv" - env = virtualenv(base_python, venv_path, dependency_constraint_flags) + env = virtualenv( + python_configuration.version, base_python, venv_path, dependency_constraint_flags + ) # set up environment variables for run_with_env env["PYTHON_VERSION"] = python_configuration.version diff --git a/test/test_dependency_versions.py b/test/test_dependency_versions.py index 760675d74..17edd10f3 100644 --- a/test/test_dependency_versions.py +++ b/test/test_dependency_versions.py @@ -111,7 +111,6 @@ def test_dependency_constraints_file(tmp_path, build_frontend_env): """ pip=={pip} delocate=={delocate} - importlib-metadata<3,>=0.12; python_version < "3.8" """.format(**tool_versions) ) ) From 1b354cfa6382745855f4c47b84a151302f56cba8 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Mon, 20 May 2024 02:45:05 -0400 Subject: [PATCH 37/44] chore: move to hatchling (#1297) --- .circleci/prepare.sh | 4 +- .pre-commit-config.yaml | 6 --- MANIFEST.in | 6 --- bin/bump_version.py | 16 +++--- pyproject.toml | 107 +++++++++++++++++++++++++++++++++------- setup.cfg | 57 --------------------- setup.py | 38 -------------- 7 files changed, 101 insertions(+), 133 deletions(-) delete mode 100644 MANIFEST.in delete mode 100644 setup.cfg delete mode 100644 setup.py diff --git a/.circleci/prepare.sh b/.circleci/prepare.sh index 991f0202a..21a8dde60 100644 --- a/.circleci/prepare.sh +++ b/.circleci/prepare.sh @@ -4,7 +4,9 @@ set -o xtrace $PYTHON --version $PYTHON -m pip --version -$PYTHON -m virtualenv -p "$PYTHON" venv +$PYTHON -m virtualenv --version +$PYTHON -m virtualenv --no-setuptools --no-wheel -p "$PYTHON" venv +venv/bin/python -m pip install -U pip venv/bin/python -m pip install -e ".[dev]" venv/bin/python -m pip freeze venv/bin/python --version diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 31c1d7ed6..171d6e379 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -20,12 +20,6 @@ repos: args: ["--fix", "--show-fixes"] - id: ruff-format -- repo: https://github.com/asottile/setup-cfg-fmt - rev: v2.5.0 - hooks: - - id: setup-cfg-fmt - args: [--include-version-classifiers, --min-py-version=3.8, --max-py-version=3.12] - - repo: https://github.com/pre-commit/mirrors-mypy rev: v1.10.0 hooks: diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index 6fc0b3942..000000000 --- a/MANIFEST.in +++ /dev/null @@ -1,6 +0,0 @@ -recursive-include cibuildwheel *.cfg -recursive-include cibuildwheel *.in -recursive-include cibuildwheel *.py -recursive-include cibuildwheel *.toml -recursive-include cibuildwheel *.txt -recursive-include cibuildwheel *.typed diff --git a/bin/bump_version.py b/bin/bump_version.py index 00b0fc1e4..e28bdcb97 100755 --- a/bin/bump_version.py +++ b/bin/bump_version.py @@ -1,13 +1,12 @@ #!/usr/bin/env python3 # /// script -# dependencies = ["click", "packaging"] +# dependencies = ["click", "packaging", "tomli; python_version<'3.11'"] # /// from __future__ import annotations -import configparser import glob import os import subprocess @@ -18,8 +17,14 @@ import click from packaging.version import InvalidVersion, Version +if sys.version_info < (3, 11): + import tomli as tomllib +else: + import tomllib + config = [ # file path, version find/replace format + ("pyproject.toml", 'version = "{}"'), ("README.md", "cibuildwheel=={}"), ("cibuildwheel/__init__.py", '__version__ = "{}"'), ("docs/faq.md", "cibuildwheel=={}"), @@ -27,7 +32,6 @@ ("docs/setup.md", "cibuildwheel=={}"), ("examples/*", "cibuildwheel=={}"), ("examples/*", "cibuildwheel@v{}"), - ("setup.cfg", "version = {}"), ] RED = "\u001b[31m" @@ -37,10 +41,8 @@ @click.command() def bump_version() -> None: - # Update if moving setup.cfg to pyproject.toml - cfg = configparser.ConfigParser() - cfg.read("setup.cfg") - current_version = cfg["metadata"]["version"] + with open("pyproject.toml", "rb") as f: + current_version = tomllib.load(f)["project"]["version"] try: commit_date_str = subprocess.run( diff --git a/pyproject.toml b/pyproject.toml index ca0f39d9d..342394af1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,9 +1,94 @@ [build-system] -requires = [ - "setuptools>=42", +requires = ["hatchling"] +build-backend = "hatchling.build" + +[project] +name = "cibuildwheel" +version = "2.18.0" +description = "Build Python wheels on CI with minimal configuration." +readme = "README.md" +license = "BSD-2-Clause" +requires-python = ">=3.8" +authors = [ + { name = "Joe Rickerby", email = "joerick@mac.com" }, ] -build-backend = "setuptools.build_meta" +keywords = [ + "appveyor", + "ci", + "linux", + "macos", + "packaging", + "pypi", + "travis", + "wheel", + "windows", +] +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: BSD License", + "Natural Language :: English", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: Implementation :: CPython", + "Topic :: Software Development :: Build Tools", +] +dependencies = [ + "bashlex!=0.13", + "bracex", + "certifi", + "filelock", + "packaging>=20.9", + "platformdirs", + "tomli;python_version < '3.11'", + "typing-extensions>=4.1.0;python_version < '3.11'", +] + +[project.optional-dependencies] +bin = [ + "click", + "packaging>=21.0", + "pip-tools", + "pygithub", + "pyyaml", + "requests", + "rich>=9.6", +] +dev = [ + "cibuildwheel[test,bin]", +] +docs = [ + "jinja2>=3.1.2", + "mkdocs-include-markdown-plugin==2.8.0", + "mkdocs-macros-plugin", + "mkdocs==1.3.1", + "pymdown-extensions", +] +test = [ + "build", + "jinja2", + "pytest-timeout", + "pytest-xdist", + "pytest>=6", + "tomli_w", + "validate-pyproject", +] + +[project.scripts] +cibuildwheel = "cibuildwheel.__main__:main" +[project.entry-points."validate_pyproject.tool_schema"] +cibuildwheel = "cibuildwheel.schema:get_schema" + +[project.urls] +Changelog = "https://github.com/pypa/cibuildwheel#changelog" +Documentation = "https://cibuildwheel.pypa.io" +Homepage = "https://github.com/pypa/cibuildwheel" [tool.pytest.ini_options] minversion = "6.0" @@ -57,21 +142,6 @@ module = [ ignore_missing_imports = true -[tool.check-manifest] -ignore = [ - ".*", - ".circleci/**", - "test/**", - "unit_test/**", - "docs/**", - "examples/**", - "bin/**", - "*.yml", - "CI.md", # TODO: can change test/test_ssl and remove this - "requirements-dev.txt", - "noxfile.py", -] - [tool.pylint] py-version = "3.8" jobs = "0" @@ -162,6 +232,7 @@ flake8-unused-arguments.ignore-variadic-names = true [tool.ruff.lint.per-file-ignores] "unit_test/*" = ["PLC1901"] "cibuildwheel/_compat/**.py" = ["TID251"] +"bin/*" = ["TID251"] [tool.repo-review] ignore = ["PC170", "PP303"] diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index bb62533b0..000000000 --- a/setup.cfg +++ /dev/null @@ -1,57 +0,0 @@ -[metadata] -name = cibuildwheel -version = 2.18.0 -description = Build Python wheels on CI with minimal configuration. -long_description = file: README.md -long_description_content_type = text/markdown -url = https://github.com/pypa/cibuildwheel -author = Joe Rickerby -author_email = joerick@mac.com -license = BSD-2-Clause -license_files = LICENSE -classifiers = - Development Status :: 5 - Production/Stable - Intended Audience :: Developers - License :: OSI Approved :: BSD License - Natural Language :: English - Programming Language :: Python :: 3 - Programming Language :: Python :: 3 :: Only - Programming Language :: Python :: 3.8 - Programming Language :: Python :: 3.9 - Programming Language :: Python :: 3.10 - Programming Language :: Python :: 3.11 - Programming Language :: Python :: 3.12 - Programming Language :: Python :: Implementation :: CPython - Topic :: Software Development :: Build Tools -keywords = ci,wheel,packaging,pypi,travis,appveyor,macos,linux,windows -project_urls = - Changelog=https://github.com/pypa/cibuildwheel#changelog - Documentation=https://cibuildwheel.pypa.io/ - -[options] -packages = find: -install_requires = - bashlex!=0.13 - bracex - certifi - filelock - packaging>=20.9 - platformdirs - tomli;python_version < '3.11' - typing-extensions>=4.1.0;python_version < '3.11' -python_requires = >=3.8 -include_package_data = True -zip_safe = False - -[options.packages.find] -include = - cibuildwheel - -[options.entry_points] -console_scripts = - cibuildwheel = cibuildwheel.__main__:main -validate_pyproject.tool_schema = - cibuildwheel = cibuildwheel.schema:get_schema - -[options.package_data] -cibuildwheel = resources/* diff --git a/setup.py b/setup.py deleted file mode 100644 index 90f83feda..000000000 --- a/setup.py +++ /dev/null @@ -1,38 +0,0 @@ -from __future__ import annotations - -from setuptools import setup - -extras = { - "docs": [ - "mkdocs-include-markdown-plugin==2.8.0", - "mkdocs==1.3.1", - "jinja2>=3.1.2", - "pymdown-extensions", - "mkdocs-macros-plugin", - ], - "test": [ - "jinja2", - "pytest>=6", - "pytest-timeout", - "pytest-xdist", - "build", - "tomli_w", - "validate-pyproject", - ], - "bin": [ - "click", - "pip-tools", - "pygithub", - "pyyaml", - "requests", - "rich>=9.6", - "packaging>=21.0", - ], -} - -extras["dev"] = [ - *extras["test"], - *extras["bin"], -] - -setup(extras_require=extras) From 9d5f5e60b85cdf68c627f4531d3b9ab033378e2b Mon Sep 17 00:00:00 2001 From: Joe Rickerby Date: Mon, 20 May 2024 07:47:10 +0100 Subject: [PATCH 38/44] Make `container-engine` a build (non-global) option (#1792) --- bin/generate_schema.py | 2 +- cibuildwheel/linux.py | 70 ++++++++++--------- cibuildwheel/oci_container.py | 6 +- cibuildwheel/options.py | 30 ++++---- .../resources/cibuildwheel.schema.json | 6 ++ unit_test/linux_build_steps_test.py | 32 +++++++-- unit_test/oci_container_test.py | 16 ++--- unit_test/options_test.py | 18 ++--- unit_test/validate_schema_test.py | 30 +++++++- 9 files changed, 135 insertions(+), 75 deletions(-) diff --git a/bin/generate_schema.py b/bin/generate_schema.py index 1ed1b58e9..419418970 100755 --- a/bin/generate_schema.py +++ b/bin/generate_schema.py @@ -247,7 +247,6 @@ non_global_options = {k: {"$ref": f"#/properties/{k}"} for k in schema["properties"]} del non_global_options["build"] del non_global_options["skip"] -del non_global_options["container-engine"] del non_global_options["test-skip"] overrides["items"]["properties"]["select"]["oneOf"] = string_array @@ -258,6 +257,7 @@ not_linux = non_global_options.copy() del not_linux["environment-pass"] +del not_linux["container-engine"] for key in list(not_linux): if "linux-" in key: del not_linux[key] diff --git a/cibuildwheel/linux.py b/cibuildwheel/linux.py index 7b1a85af7..55e61f2d3 100644 --- a/cibuildwheel/linux.py +++ b/cibuildwheel/linux.py @@ -11,8 +11,8 @@ from ._compat.typing import assert_never from .architecture import Architecture from .logger import log -from .oci_container import OCIContainer -from .options import Options +from .oci_container import OCIContainer, OCIContainerEngineConfig +from .options import BuildOptions, Options from .typing import PathOrStr from .util import ( AlreadyBuiltWheelError, @@ -44,6 +44,7 @@ def path(self) -> PurePosixPath: class BuildStep: platform_configs: list[PythonConfiguration] platform_tag: str + container_engine: OCIContainerEngineConfig container_image: str @@ -65,8 +66,9 @@ def get_python_configurations( ] -def container_image_for_python_configuration(config: PythonConfiguration, options: Options) -> str: - build_options = options.build_options(config.identifier) +def container_image_for_python_configuration( + config: PythonConfiguration, build_options: BuildOptions +) -> str: # e.g # identifier is 'cp310-manylinux_x86_64' # platform_tag is 'manylinux_x86_64' @@ -91,15 +93,18 @@ def get_build_steps( Groups PythonConfigurations into BuildSteps. Each BuildStep represents a separate container instance. """ - steps = OrderedDict[Tuple[str, str, str], BuildStep]() + steps = OrderedDict[Tuple[str, str, str, OCIContainerEngineConfig], BuildStep]() for config in python_configurations: _, platform_tag = config.identifier.split("-", 1) - before_all = options.build_options(config.identifier).before_all - container_image = container_image_for_python_configuration(config, options) + build_options = options.build_options(config.identifier) + + before_all = build_options.before_all + container_image = container_image_for_python_configuration(config, build_options) + container_engine = build_options.container_engine - step_key = (platform_tag, container_image, before_all) + step_key = (platform_tag, container_image, before_all, container_engine) if step_key in steps: steps[step_key].platform_configs.append(config) @@ -107,6 +112,7 @@ def get_build_steps( steps[step_key] = BuildStep( platform_configs=[config], platform_tag=platform_tag, + container_engine=container_engine, container_image=container_image, ) @@ -388,29 +394,6 @@ def build_in_container( def build(options: Options, tmp_path: Path) -> None: # noqa: ARG001 - try: - # check the container engine is installed - subprocess.run( - [options.globals.container_engine.name, "--version"], - check=True, - stdout=subprocess.DEVNULL, - ) - except subprocess.CalledProcessError: - print( - unwrap( - f""" - cibuildwheel: {options.globals.container_engine} not found. An - OCI exe like Docker or Podman is required to run Linux builds. - If you're building on Travis CI, add `services: [docker]` to - your .travis.yml. If you're building on Circle CI in Linux, - add a `setup_remote_docker` step to your .circleci/config.yml. - If you're building on Cirrus CI, use `docker_builder` task. - """ - ), - file=sys.stderr, - ) - sys.exit(2) - python_configurations = get_python_configurations( options.globals.build_selector, options.globals.architectures ) @@ -425,6 +408,29 @@ def build(options: Options, tmp_path: Path) -> None: # noqa: ARG001 container_package_dir = container_project_path / abs_package_dir.relative_to(cwd) for build_step in get_build_steps(options, python_configurations): + try: + # check the container engine is installed + subprocess.run( + [build_step.container_engine.name, "--version"], + check=True, + stdout=subprocess.DEVNULL, + ) + except subprocess.CalledProcessError: + print( + unwrap( + f""" + cibuildwheel: {build_step.container_engine.name} not found. An + OCI exe like Docker or Podman is required to run Linux builds. + If you're building on Travis CI, add `services: [docker]` to + your .travis.yml. If you're building on Circle CI in Linux, + add a `setup_remote_docker` step to your .circleci/config.yml. + If you're building on Cirrus CI, use `docker_builder` task. + """ + ), + file=sys.stderr, + ) + sys.exit(2) + try: ids_to_build = [x.identifier for x in build_step.platform_configs] log.step(f"Starting container image {build_step.container_image}...") @@ -435,7 +441,7 @@ def build(options: Options, tmp_path: Path) -> None: # noqa: ARG001 image=build_step.container_image, enforce_32_bit=build_step.platform_tag.endswith("i686"), cwd=container_project_path, - engine=options.globals.container_engine, + engine=build_step.container_engine, ) as container: build_in_container( options=options, diff --git a/cibuildwheel/oci_container.py b/cibuildwheel/oci_container.py index ea21e8a29..0a5fa3250 100644 --- a/cibuildwheel/oci_container.py +++ b/cibuildwheel/oci_container.py @@ -11,7 +11,7 @@ import typing import uuid from collections.abc import Mapping, Sequence -from dataclasses import dataclass +from dataclasses import dataclass, field from pathlib import Path, PurePath, PurePosixPath from types import TracebackType from typing import IO, Dict, Literal @@ -32,7 +32,7 @@ @dataclass(frozen=True) class OCIContainerEngineConfig: name: ContainerEngineName - create_args: Sequence[str] = () + create_args: tuple[str, ...] = field(default_factory=tuple) disable_host_mount: bool = False @staticmethod @@ -58,7 +58,7 @@ def from_config_string(config_string: str) -> OCIContainerEngineConfig: ) return OCIContainerEngineConfig( - name=name, create_args=create_args, disable_host_mount=disable_host_mount + name=name, create_args=tuple(create_args), disable_host_mount=disable_host_mount ) def options_summary(self) -> str | dict[str, str]: diff --git a/cibuildwheel/options.py b/cibuildwheel/options.py index 0a733bb23..e5b4458e8 100644 --- a/cibuildwheel/options.py +++ b/cibuildwheel/options.py @@ -75,7 +75,6 @@ class GlobalOptions: build_selector: BuildSelector test_selector: TestSelector architectures: set[Architecture] - container_engine: OCIContainerEngineConfig @dataclasses.dataclass(frozen=True) @@ -95,6 +94,7 @@ class BuildOptions: build_verbosity: int build_frontend: BuildFrontendConfig | None config_settings: str + container_engine: OCIContainerEngineConfig @property def package_dir(self) -> Path: @@ -545,25 +545,12 @@ def globals(self) -> GlobalOptions: ) test_selector = TestSelector(skip_config=test_skip) - container_engine_str = self.reader.get( - "container-engine", - table_format={"item": "{k}:{v}", "sep": "; ", "quote": shlex.quote}, - ) - - try: - container_engine = OCIContainerEngineConfig.from_config_string(container_engine_str) - except ValueError as e: - msg = f"cibuildwheel: Failed to parse container config. {e}" - print(msg, file=sys.stderr) - sys.exit(2) - return GlobalOptions( package_dir=package_dir, output_dir=output_dir, build_selector=build_selector, test_selector=test_selector, architectures=architectures, - container_engine=container_engine, ) def build_options(self, identifier: str | None) -> BuildOptions: @@ -643,6 +630,8 @@ def build_options(self, identifier: str | None) -> BuildOptions: manylinux_images: dict[str, str] = {} musllinux_images: dict[str, str] = {} + container_engine: OCIContainerEngineConfig | None = None + if self.platform == "linux": all_pinned_container_images = _get_pinned_container_images() @@ -677,6 +666,18 @@ def build_options(self, identifier: str | None) -> BuildOptions: musllinux_images[build_platform] = image + container_engine_str = self.reader.get( + "container-engine", + table_format={"item": "{k}:{v}", "sep": "; ", "quote": shlex.quote}, + ) + + try: + container_engine = OCIContainerEngineConfig.from_config_string(container_engine_str) + except ValueError as e: + msg = f"cibuildwheel: Failed to parse container config. {e}" + print(msg, file=sys.stderr) + sys.exit(2) + return BuildOptions( globals=self.globals, test_command=test_command, @@ -693,6 +694,7 @@ def build_options(self, identifier: str | None) -> BuildOptions: musllinux_images=musllinux_images or None, build_frontend=build_frontend, config_settings=config_settings, + container_engine=container_engine, ) def check_for_invalid_configuration(self, identifiers: Iterable[str]) -> None: diff --git a/cibuildwheel/resources/cibuildwheel.schema.json b/cibuildwheel/resources/cibuildwheel.schema.json index 25cf64baa..2681aca5d 100644 --- a/cibuildwheel/resources/cibuildwheel.schema.json +++ b/cibuildwheel/resources/cibuildwheel.schema.json @@ -491,6 +491,9 @@ "config-settings": { "$ref": "#/properties/config-settings" }, + "container-engine": { + "$ref": "#/properties/container-engine" + }, "dependency-versions": { "$ref": "#/properties/dependency-versions" }, @@ -579,6 +582,9 @@ "config-settings": { "$ref": "#/properties/config-settings" }, + "container-engine": { + "$ref": "#/properties/container-engine" + }, "environment": { "$ref": "#/properties/environment" }, diff --git a/unit_test/linux_build_steps_test.py b/unit_test/linux_build_steps_test.py index 29ee25990..f285abec5 100644 --- a/unit_test/linux_build_steps_test.py +++ b/unit_test/linux_build_steps_test.py @@ -5,13 +5,13 @@ from pprint import pprint import cibuildwheel.linux -import cibuildwheel.oci_container +from cibuildwheel.oci_container import OCIContainerEngineConfig from cibuildwheel.options import CommandLineArguments, Options def test_linux_container_split(tmp_path: Path, monkeypatch): """ - Tests splitting linux builds by container image and before_all + Tests splitting linux builds by container image, container engine, and before_all """ args = CommandLineArguments.defaults() @@ -28,13 +28,17 @@ def test_linux_container_split(tmp_path: Path, monkeypatch): archs = "x86_64 i686" [[tool.cibuildwheel.overrides]] - select = "cp{38,39,310}-*" + select = "cp{37,38,39,310}-*" manylinux-x86_64-image = "other_container_image" manylinux-i686-image = "other_container_image" [[tool.cibuildwheel.overrides]] select = "cp39-*" before-all = "echo 'a cp39-only command'" + + [[tool.cibuildwheel.overrides]] + select = "cp310-*" + container-engine = "docker; create_args: --privileged" """ ) ) @@ -55,21 +59,35 @@ def identifiers(step): def before_alls(step): return [options.build_options(c.identifier).before_all for c in step.platform_configs] + def container_engines(step): + return [options.build_options(c.identifier).container_engine for c in step.platform_configs] + pprint(build_steps) + default_container_engine = OCIContainerEngineConfig(name="docker") + assert build_steps[0].container_image == "normal_container_image" assert identifiers(build_steps[0]) == [ "cp36-manylinux_x86_64", - "cp37-manylinux_x86_64", "cp311-manylinux_x86_64", "cp312-manylinux_x86_64", ] - assert before_alls(build_steps[0]) == ["", "", "", ""] + assert before_alls(build_steps[0]) == [""] * 3 + assert container_engines(build_steps[0]) == [default_container_engine] * 3 assert build_steps[1].container_image == "other_container_image" - assert identifiers(build_steps[1]) == ["cp38-manylinux_x86_64", "cp310-manylinux_x86_64"] - assert before_alls(build_steps[1]) == ["", ""] + assert identifiers(build_steps[1]) == ["cp37-manylinux_x86_64", "cp38-manylinux_x86_64"] + assert before_alls(build_steps[1]) == [""] * 2 + assert container_engines(build_steps[1]) == [default_container_engine] * 2 assert build_steps[2].container_image == "other_container_image" assert identifiers(build_steps[2]) == ["cp39-manylinux_x86_64"] assert before_alls(build_steps[2]) == ["echo 'a cp39-only command'"] + assert container_engines(build_steps[2]) == [default_container_engine] + + assert build_steps[3].container_image == "other_container_image" + assert identifiers(build_steps[3]) == ["cp310-manylinux_x86_64"] + assert before_alls(build_steps[3]) == [""] + assert container_engines(build_steps[3]) == [ + OCIContainerEngineConfig(name="docker", create_args=("--privileged",)) + ] diff --git a/unit_test/oci_container_test.py b/unit_test/oci_container_test.py index 161f8cfab..0ff2d363c 100644 --- a/unit_test/oci_container_test.py +++ b/unit_test/oci_container_test.py @@ -340,7 +340,7 @@ def test_create_args_volume(tmp_path: Path, container_engine): test_mount_dir.mkdir() (test_mount_dir / "test_file.txt").write_text("1234") container_engine = OCIContainerEngineConfig( - name="docker", create_args=[f"--volume={test_mount_dir}:/test_mount"] + name="docker", create_args=(f"--volume={test_mount_dir}:/test_mount",) ) with OCIContainer( @@ -356,37 +356,37 @@ def test_create_args_volume(tmp_path: Path, container_engine): ( "docker", "docker", - [], + (), ), ( "docker;create_args:", "docker", - [], + (), ), ( "docker;create_args:--abc --def", "docker", - ["--abc", "--def"], + ("--abc", "--def"), ), ( "docker; create_args: --abc --def", "docker", - ["--abc", "--def"], + ("--abc", "--def"), ), ( "name:docker; create_args: --abc --def", "docker", - ["--abc", "--def"], + ("--abc", "--def"), ), ( 'docker; create_args: --some-option="value with spaces"', "docker", - ["--some-option=value with spaces"], + ("--some-option=value with spaces",), ), ( 'docker; create_args: --some-option="value; with; semicolons" --another-option', "docker", - ["--some-option=value; with; semicolons", "--another-option"], + ("--some-option=value; with; semicolons", "--another-option"), ), ], ) diff --git a/unit_test/options_test.py b/unit_test/options_test.py index cf03f8548..288f95caa 100644 --- a/unit_test/options_test.py +++ b/unit_test/options_test.py @@ -206,49 +206,49 @@ def test_toml_environment_quoting(tmp_path: Path, toml_assignment, result_value) ( 'container-engine = "podman"', "podman", - [], + (), False, ), ( 'container-engine = {name = "podman"}', "podman", - [], + (), False, ), ( 'container-engine = "docker; create_args: --some-option"', "docker", - ["--some-option"], + ("--some-option",), False, ), ( 'container-engine = {name = "docker", create-args = ["--some-option"]}', "docker", - ["--some-option"], + ("--some-option",), False, ), ( 'container-engine = {name = "docker", create-args = ["--some-option", "value that contains spaces"]}', "docker", - ["--some-option", "value that contains spaces"], + ("--some-option", "value that contains spaces"), False, ), ( 'container-engine = {name = "docker", create-args = ["--some-option", "value;that;contains;semicolons"]}', "docker", - ["--some-option", "value;that;contains;semicolons"], + ("--some-option", "value;that;contains;semicolons"), False, ), ( 'container-engine = {name = "docker", disable-host-mount = true}', "docker", - [], + (), True, ), ( 'container-engine = {name = "docker", disable_host_mount = true}', "docker", - [], + (), True, ), ], @@ -269,7 +269,7 @@ def test_container_engine_option( ) options = Options(platform="linux", command_line_arguments=args, env={}) - parsed_container_engine = options.globals.container_engine + parsed_container_engine = options.build_options(None).container_engine assert parsed_container_engine.name == result_name assert parsed_container_engine.create_args == result_create_args diff --git a/unit_test/validate_schema_test.py b/unit_test/validate_schema_test.py index 581ac9a7b..698353990 100644 --- a/unit_test/validate_schema_test.py +++ b/unit_test/validate_schema_test.py @@ -20,11 +20,39 @@ def test_validate_default_schema(): assert validator(example) is not None -def test_validate_bad_container_engine(): +def test_validate_container_engine(): + """ + This test checks container engine can be overridden - it used to be a + global option but is now a build option. + """ + example = tomllib.loads( """ + [tool.cibuildwheel] + container-engine = "docker" + [tool.cibuildwheel.linux] container-engine = "docker" + + [[tool.cibuildwheel.overrides]] + select = "*_x86_64" + container-engine = "docker; create_args: --platform linux/arm64/v8" + """ + ) + + validator = validate_pyproject.api.Validator() + assert validator(example) is not None + + +@pytest.mark.parametrize("platform", ["macos", "windows"]) +def test_validate_bad_container_engine(platform: str): + """ + container-engine is not a valid option for macos or windows + """ + example = tomllib.loads( + f""" + [tool.cibuildwheel.{platform}] + container-engine = "docker" """ ) From 791e41cfece162323465328775c53443faf6390f Mon Sep 17 00:00:00 2001 From: "cibuildwheel-bot[bot]" <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> Date: Mon, 20 May 2024 10:08:57 +0200 Subject: [PATCH 39/44] [Bot] Update dependencies (#1832) Update dependencies Co-authored-by: cibuildwheel-bot[bot] <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> --- .../resources/constraints-python310.txt | 10 ++-- .../resources/constraints-python311.txt | 8 +++- .../resources/constraints-python312.txt | 8 +++- .../resources/constraints-python313.txt | 8 +++- .../resources/constraints-python37.txt | 6 ++- .../resources/constraints-python38.txt | 10 ++-- .../resources/constraints-python39.txt | 10 ++-- cibuildwheel/resources/constraints.txt | 8 +++- .../resources/pinned_docker_images.cfg | 48 +++++++++---------- docs/working-examples.md | 4 +- 10 files changed, 76 insertions(+), 44 deletions(-) diff --git a/cibuildwheel/resources/constraints-python310.txt b/cibuildwheel/resources/constraints-python310.txt index b2ecb3977..ce5b3ed72 100644 --- a/cibuildwheel/resources/constraints-python310.txt +++ b/cibuildwheel/resources/constraints-python310.txt @@ -3,7 +3,9 @@ altgraph==0.17.4 # via macholib build==1.2.1 + # via -r cibuildwheel/resources/constraints.in delocate==0.11.0 + # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv filelock==3.14.0 @@ -17,7 +19,8 @@ packaging==24.0 # build # delocate pip==24.0 -platformdirs==4.2.1 + # via -r cibuildwheel/resources/constraints.in +platformdirs==4.2.2 # via virtualenv pyproject-hooks==1.1.0 # via build @@ -25,6 +28,7 @@ tomli==2.0.1 # via build typing-extensions==4.11.0 # via delocate -virtualenv==20.26.1 -zipp==3.18.1 +virtualenv==20.26.2 + # via -r cibuildwheel/resources/constraints.in +zipp==3.18.2 # via importlib-metadata diff --git a/cibuildwheel/resources/constraints-python311.txt b/cibuildwheel/resources/constraints-python311.txt index f9325ba0a..474fa6de0 100644 --- a/cibuildwheel/resources/constraints-python311.txt +++ b/cibuildwheel/resources/constraints-python311.txt @@ -3,7 +3,9 @@ altgraph==0.17.4 # via macholib build==1.2.1 + # via -r cibuildwheel/resources/constraints.in delocate==0.11.0 + # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv filelock==3.14.0 @@ -15,10 +17,12 @@ packaging==24.0 # build # delocate pip==24.0 -platformdirs==4.2.1 + # via -r cibuildwheel/resources/constraints.in +platformdirs==4.2.2 # via virtualenv pyproject-hooks==1.1.0 # via build typing-extensions==4.11.0 # via delocate -virtualenv==20.26.1 +virtualenv==20.26.2 + # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python312.txt b/cibuildwheel/resources/constraints-python312.txt index f9325ba0a..474fa6de0 100644 --- a/cibuildwheel/resources/constraints-python312.txt +++ b/cibuildwheel/resources/constraints-python312.txt @@ -3,7 +3,9 @@ altgraph==0.17.4 # via macholib build==1.2.1 + # via -r cibuildwheel/resources/constraints.in delocate==0.11.0 + # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv filelock==3.14.0 @@ -15,10 +17,12 @@ packaging==24.0 # build # delocate pip==24.0 -platformdirs==4.2.1 + # via -r cibuildwheel/resources/constraints.in +platformdirs==4.2.2 # via virtualenv pyproject-hooks==1.1.0 # via build typing-extensions==4.11.0 # via delocate -virtualenv==20.26.1 +virtualenv==20.26.2 + # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python313.txt b/cibuildwheel/resources/constraints-python313.txt index f9325ba0a..474fa6de0 100644 --- a/cibuildwheel/resources/constraints-python313.txt +++ b/cibuildwheel/resources/constraints-python313.txt @@ -3,7 +3,9 @@ altgraph==0.17.4 # via macholib build==1.2.1 + # via -r cibuildwheel/resources/constraints.in delocate==0.11.0 + # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv filelock==3.14.0 @@ -15,10 +17,12 @@ packaging==24.0 # build # delocate pip==24.0 -platformdirs==4.2.1 + # via -r cibuildwheel/resources/constraints.in +platformdirs==4.2.2 # via virtualenv pyproject-hooks==1.1.0 # via build typing-extensions==4.11.0 # via delocate -virtualenv==20.26.1 +virtualenv==20.26.2 + # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python37.txt b/cibuildwheel/resources/constraints-python37.txt index a675ef132..23f3f1d36 100644 --- a/cibuildwheel/resources/constraints-python37.txt +++ b/cibuildwheel/resources/constraints-python37.txt @@ -3,7 +3,9 @@ altgraph==0.17.4 # via macholib build==1.1.1 + # via -r cibuildwheel/resources/constraints.in delocate==0.11.0 + # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv filelock==3.12.2 @@ -19,6 +21,7 @@ packaging==24.0 # build # delocate pip==24.0 + # via -r cibuildwheel/resources/constraints.in platformdirs==4.0.0 # via virtualenv pyproject-hooks==1.1.0 @@ -30,6 +33,7 @@ typing-extensions==4.7.1 # delocate # importlib-metadata # platformdirs -virtualenv==20.26.1 +virtualenv==20.26.2 + # via -r cibuildwheel/resources/constraints.in zipp==3.15.0 # via importlib-metadata diff --git a/cibuildwheel/resources/constraints-python38.txt b/cibuildwheel/resources/constraints-python38.txt index b2ecb3977..ce5b3ed72 100644 --- a/cibuildwheel/resources/constraints-python38.txt +++ b/cibuildwheel/resources/constraints-python38.txt @@ -3,7 +3,9 @@ altgraph==0.17.4 # via macholib build==1.2.1 + # via -r cibuildwheel/resources/constraints.in delocate==0.11.0 + # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv filelock==3.14.0 @@ -17,7 +19,8 @@ packaging==24.0 # build # delocate pip==24.0 -platformdirs==4.2.1 + # via -r cibuildwheel/resources/constraints.in +platformdirs==4.2.2 # via virtualenv pyproject-hooks==1.1.0 # via build @@ -25,6 +28,7 @@ tomli==2.0.1 # via build typing-extensions==4.11.0 # via delocate -virtualenv==20.26.1 -zipp==3.18.1 +virtualenv==20.26.2 + # via -r cibuildwheel/resources/constraints.in +zipp==3.18.2 # via importlib-metadata diff --git a/cibuildwheel/resources/constraints-python39.txt b/cibuildwheel/resources/constraints-python39.txt index b2ecb3977..ce5b3ed72 100644 --- a/cibuildwheel/resources/constraints-python39.txt +++ b/cibuildwheel/resources/constraints-python39.txt @@ -3,7 +3,9 @@ altgraph==0.17.4 # via macholib build==1.2.1 + # via -r cibuildwheel/resources/constraints.in delocate==0.11.0 + # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv filelock==3.14.0 @@ -17,7 +19,8 @@ packaging==24.0 # build # delocate pip==24.0 -platformdirs==4.2.1 + # via -r cibuildwheel/resources/constraints.in +platformdirs==4.2.2 # via virtualenv pyproject-hooks==1.1.0 # via build @@ -25,6 +28,7 @@ tomli==2.0.1 # via build typing-extensions==4.11.0 # via delocate -virtualenv==20.26.1 -zipp==3.18.1 +virtualenv==20.26.2 + # via -r cibuildwheel/resources/constraints.in +zipp==3.18.2 # via importlib-metadata diff --git a/cibuildwheel/resources/constraints.txt b/cibuildwheel/resources/constraints.txt index f9325ba0a..474fa6de0 100644 --- a/cibuildwheel/resources/constraints.txt +++ b/cibuildwheel/resources/constraints.txt @@ -3,7 +3,9 @@ altgraph==0.17.4 # via macholib build==1.2.1 + # via -r cibuildwheel/resources/constraints.in delocate==0.11.0 + # via -r cibuildwheel/resources/constraints.in distlib==0.3.8 # via virtualenv filelock==3.14.0 @@ -15,10 +17,12 @@ packaging==24.0 # build # delocate pip==24.0 -platformdirs==4.2.1 + # via -r cibuildwheel/resources/constraints.in +platformdirs==4.2.2 # via virtualenv pyproject-hooks==1.1.0 # via build typing-extensions==4.11.0 # via delocate -virtualenv==20.26.1 +virtualenv==20.26.2 + # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/pinned_docker_images.cfg b/cibuildwheel/resources/pinned_docker_images.cfg index 7283574c8..a1f842294 100644 --- a/cibuildwheel/resources/pinned_docker_images.cfg +++ b/cibuildwheel/resources/pinned_docker_images.cfg @@ -1,54 +1,54 @@ [x86_64] manylinux1 = quay.io/pypa/manylinux1_x86_64:2024-04-29-76807b8 manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-05-13-63a1ad4 +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-05-13-0983f6f manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-05-13-63a1ad4 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024-05-13-63a1ad4 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024-05-13-63a1ad4 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-05-13-0983f6f +musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024-05-13-0983f6f +musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024-05-13-0983f6f [i686] manylinux1 = quay.io/pypa/manylinux1_i686:2024-04-29-76807b8 manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-05-13-63a1ad4 +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-05-13-0983f6f manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024-05-13-63a1ad4 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024-05-13-63a1ad4 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024-05-13-0983f6f +musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024-05-13-0983f6f [pypy_x86_64] manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-05-13-63a1ad4 +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024-05-13-0983f6f manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-05-13-63a1ad4 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024-05-13-0983f6f [pypy_i686] manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-05-13-63a1ad4 +manylinux2014 = quay.io/pypa/manylinux2014_i686:2024-05-13-0983f6f manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 [aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-05-13-63a1ad4 +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-05-13-0983f6f manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-05-13-63a1ad4 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024-05-13-63a1ad4 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024-05-13-63a1ad4 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-05-13-0983f6f +musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024-05-13-0983f6f +musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024-05-13-0983f6f [ppc64le] -manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024-05-13-63a1ad4 +manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024-05-13-0983f6f manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024-05-13-63a1ad4 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024-05-13-63a1ad4 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024-05-13-63a1ad4 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024-05-13-0983f6f +musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024-05-13-0983f6f +musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024-05-13-0983f6f [s390x] -manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024-05-13-63a1ad4 +manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024-05-13-0983f6f manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024-05-13-63a1ad4 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024-05-13-63a1ad4 -musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024-05-13-63a1ad4 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024-05-13-0983f6f +musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024-05-13-0983f6f +musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024-05-13-0983f6f [pypy_aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-05-13-63a1ad4 +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024-05-13-0983f6f manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-05-13-63a1ad4 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024-05-13-0983f6f diff --git a/docs/working-examples.md b/docs/working-examples.md index 1468c3a06..26b022512 100644 --- a/docs/working-examples.md +++ b/docs/working-examples.md @@ -79,8 +79,8 @@ title: Working examples | [tgcalls][] | ![github icon][] | ![apple icon][] ![windows icon][] | Python `pybind11` binding to Telegram's WebRTC library with third party dependencies like `OpenSSL`, `MozJPEG`, `FFmpeg`, etc. | | [python-snappy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Python bindings for the snappy google library | | [pybind11 python_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a Python-based build system | -| [sourmash][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Quickly search, compare, and analyze genomic and metagenomic data sets. | | [abess][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A fast best-subset selection library. It uses cibuildwheel to build a large project with C++ extensions. | +| [sourmash][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Quickly search, compare, and analyze genomic and metagenomic data sets. | | [cyvcf2][] | ![github icon][] | ![apple icon][] ![linux icon][] | cython + htslib == fast VCF and BCF processing | | [matrixprofile][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python 3 library making time series data mining tasks, utilizing matrix profile algorithms, accessible to everyone. | | [jq.py][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | Python bindings for jq | @@ -188,8 +188,8 @@ title: Working examples [tgcalls]: https://github.com/MarshalX/tgcalls [python-snappy]: https://github.com/intake/python-snappy [pybind11 python_example]: https://github.com/pybind/python_example -[sourmash]: https://github.com/sourmash-bio/sourmash [abess]: https://github.com/abess-team/abess +[sourmash]: https://github.com/sourmash-bio/sourmash [cyvcf2]: https://github.com/brentp/cyvcf2 [matrixprofile]: https://github.com/matrix-profile-foundation/matrixprofile [jq.py]: https://github.com/mwilliamson/jq.py From 345467c6cfff27a5576ac80755eecaa9316b196d Mon Sep 17 00:00:00 2001 From: mayeut Date: Fri, 17 May 2024 21:44:08 +0200 Subject: [PATCH 40/44] feat: add support for free-threaded (no-gil) Python 3.13 --- bin/update_pythons.py | 29 ++++++++++++++----- cibuildwheel/linux.py | 4 +++ cibuildwheel/macos.py | 4 +++ cibuildwheel/resources/build-platforms.toml | 13 +++++++++ .../resources/constraints-python313.txt | 2 +- cibuildwheel/resources/constraints.in | 3 +- cibuildwheel/util.py | 9 ++++-- cibuildwheel/windows.py | 26 ++++++++++++----- test/test_abi_variants.py | 16 +++++++--- test/utils.py | 2 ++ 10 files changed, 85 insertions(+), 23 deletions(-) diff --git a/bin/update_pythons.py b/bin/update_pythons.py index 05a68b0d4..ecf8e3ef2 100755 --- a/bin/update_pythons.py +++ b/bin/update_pythons.py @@ -58,7 +58,7 @@ class ConfigMacOS(TypedDict): class WindowsVersions: - def __init__(self, arch_str: ArchStr) -> None: + def __init__(self, arch_str: ArchStr, free_threaded: bool) -> None: response = requests.get("https://api.nuget.org/v3/index.json") response.raise_for_status() api_info = response.json() @@ -72,7 +72,11 @@ def __init__(self, arch_str: ArchStr) -> None: self.arch_str = arch_str self.arch = ARCH_DICT[arch_str] + self.free_threaded = free_threaded + package = PACKAGE_DICT[arch_str] + if free_threaded: + package = f"{package}-freethreaded" response = requests.get(f"{endpoint}{package}/index.json") response.raise_for_status() @@ -92,8 +96,9 @@ def update_version_windows(self, spec: Specifier) -> ConfigWinCP | None: if not versions: return None + flags = "t" if self.free_threaded else "" version = versions[0] - identifier = f"cp{version.major}{version.minor}-{self.arch}" + identifier = f"cp{version.major}{version.minor}{flags}-{self.arch}" return ConfigWinCP( identifier=identifier, version=self.version_dict[version], @@ -233,9 +238,12 @@ def update_version_macos( class AllVersions: def __init__(self) -> None: - self.windows_32 = WindowsVersions("32") - self.windows_64 = WindowsVersions("64") - self.windows_arm64 = WindowsVersions("ARM64") + self.windows_32 = WindowsVersions("32", False) + self.windows_t_32 = WindowsVersions("32", True) + self.windows_64 = WindowsVersions("64", False) + self.windows_t_64 = WindowsVersions("64", True) + self.windows_arm64 = WindowsVersions("ARM64", False) + self.windows_t_arm64 = WindowsVersions("ARM64", True) self.windows_pypy_64 = PyPyVersions("64") self.macos_cpython = CPythonVersions() @@ -259,14 +267,19 @@ def update_config(self, config: MutableMapping[str, str]) -> None: config_update = self.macos_pypy.update_version_macos(spec) elif "macosx_arm64" in identifier: config_update = self.macos_pypy_arm64.update_version_macos(spec) - elif "win32" in identifier: - if identifier.startswith("cp"): - config_update = self.windows_32.update_version_windows(spec) + elif "t-win32" in identifier and identifier.startswith("cp"): + config_update = self.windows_t_32.update_version_windows(spec) + elif "win32" in identifier and identifier.startswith("cp"): + config_update = self.windows_32.update_version_windows(spec) + elif "t-win_amd64" in identifier and identifier.startswith("cp"): + config_update = self.windows_t_64.update_version_windows(spec) elif "win_amd64" in identifier: if identifier.startswith("cp"): config_update = self.windows_64.update_version_windows(spec) elif identifier.startswith("pp"): config_update = self.windows_pypy_64.update_version_windows(spec) + elif "t-win_arm64" in identifier and identifier.startswith("cp"): + config_update = self.windows_t_arm64.update_version_windows(spec) elif "win_arm64" in identifier and identifier.startswith("cp"): config_update = self.windows_arm64.update_version_windows(spec) diff --git a/cibuildwheel/linux.py b/cibuildwheel/linux.py index 55e61f2d3..1fc686126 100644 --- a/cibuildwheel/linux.py +++ b/cibuildwheel/linux.py @@ -337,6 +337,10 @@ def build_in_container( virtualenv_env = env.copy() virtualenv_env["PATH"] = f"{venv_dir / 'bin'}:{virtualenv_env['PATH']}" + # TODO remove me once virtualenv provides pip>=24.1b1 + if config.version == "3.13": + container.call(["pip", "install", "pip>=24.1b1"], env=virtualenv_env) + if build_options.before_test: before_test_prepared = prepare_command( build_options.before_test, diff --git a/cibuildwheel/macos.py b/cibuildwheel/macos.py index 6b219a102..3df239618 100644 --- a/cibuildwheel/macos.py +++ b/cibuildwheel/macos.py @@ -575,6 +575,10 @@ def build(options: Options, tmp_path: Path) -> None: # check that we are using the Python from the virtual environment call_with_arch("which", "python", env=virtualenv_env) + # TODO remove me once virtualenv provides pip>=24.1b1 + if config.version == "3.13": + call("python", "-m", "pip", "install", "pip>=24.1b1", env=virtualenv_env) + if build_options.before_test: before_test_prepared = prepare_command( build_options.before_test, diff --git a/cibuildwheel/resources/build-platforms.toml b/cibuildwheel/resources/build-platforms.toml index f95d329cc..2f0393e11 100644 --- a/cibuildwheel/resources/build-platforms.toml +++ b/cibuildwheel/resources/build-platforms.toml @@ -8,6 +8,7 @@ python_configurations = [ { identifier = "cp311-manylinux_x86_64", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-manylinux_x86_64", version = "3.12", path_str = "/opt/python/cp312-cp312" }, { identifier = "cp313-manylinux_x86_64", version = "3.13", path_str = "/opt/python/cp313-cp313" }, + { identifier = "cp313t-manylinux_x86_64", version = "3.13", path_str = "/opt/python/cp313-cp313t" }, { identifier = "cp36-manylinux_i686", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-manylinux_i686", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-manylinux_i686", version = "3.8", path_str = "/opt/python/cp38-cp38" }, @@ -16,6 +17,7 @@ python_configurations = [ { identifier = "cp311-manylinux_i686", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-manylinux_i686", version = "3.12", path_str = "/opt/python/cp312-cp312" }, { identifier = "cp313-manylinux_i686", version = "3.13", path_str = "/opt/python/cp313-cp313" }, + { identifier = "cp313t-manylinux_i686", version = "3.13", path_str = "/opt/python/cp313-cp313t" }, { identifier = "pp37-manylinux_x86_64", version = "3.7", path_str = "/opt/python/pp37-pypy37_pp73" }, { identifier = "pp38-manylinux_x86_64", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" }, { identifier = "pp39-manylinux_x86_64", version = "3.9", path_str = "/opt/python/pp39-pypy39_pp73" }, @@ -28,6 +30,7 @@ python_configurations = [ { identifier = "cp311-manylinux_aarch64", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-manylinux_aarch64", version = "3.12", path_str = "/opt/python/cp312-cp312" }, { identifier = "cp313-manylinux_aarch64", version = "3.13", path_str = "/opt/python/cp313-cp313" }, + { identifier = "cp313t-manylinux_aarch64", version = "3.13", path_str = "/opt/python/cp313-cp313t" }, { identifier = "cp36-manylinux_ppc64le", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-manylinux_ppc64le", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-manylinux_ppc64le", version = "3.8", path_str = "/opt/python/cp38-cp38" }, @@ -36,6 +39,7 @@ python_configurations = [ { identifier = "cp311-manylinux_ppc64le", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-manylinux_ppc64le", version = "3.12", path_str = "/opt/python/cp312-cp312" }, { identifier = "cp313-manylinux_ppc64le", version = "3.13", path_str = "/opt/python/cp313-cp313" }, + { identifier = "cp313t-manylinux_ppc64le", version = "3.13", path_str = "/opt/python/cp313-cp313t" }, { identifier = "cp36-manylinux_s390x", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-manylinux_s390x", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-manylinux_s390x", version = "3.8", path_str = "/opt/python/cp38-cp38" }, @@ -44,6 +48,7 @@ python_configurations = [ { identifier = "cp311-manylinux_s390x", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-manylinux_s390x", version = "3.12", path_str = "/opt/python/cp312-cp312" }, { identifier = "cp313-manylinux_s390x", version = "3.13", path_str = "/opt/python/cp313-cp313" }, + { identifier = "cp313t-manylinux_s390x", version = "3.13", path_str = "/opt/python/cp313-cp313t" }, { identifier = "pp37-manylinux_aarch64", version = "3.7", path_str = "/opt/python/pp37-pypy37_pp73" }, { identifier = "pp38-manylinux_aarch64", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" }, { identifier = "pp39-manylinux_aarch64", version = "3.9", path_str = "/opt/python/pp39-pypy39_pp73" }, @@ -60,6 +65,7 @@ python_configurations = [ { identifier = "cp311-musllinux_x86_64", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-musllinux_x86_64", version = "3.12", path_str = "/opt/python/cp312-cp312" }, { identifier = "cp313-musllinux_x86_64", version = "3.13", path_str = "/opt/python/cp313-cp313" }, + { identifier = "cp313t-musllinux_x86_64", version = "3.13", path_str = "/opt/python/cp313-cp313t" }, { identifier = "cp36-musllinux_i686", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-musllinux_i686", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-musllinux_i686", version = "3.8", path_str = "/opt/python/cp38-cp38" }, @@ -68,6 +74,7 @@ python_configurations = [ { identifier = "cp311-musllinux_i686", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-musllinux_i686", version = "3.12", path_str = "/opt/python/cp312-cp312" }, { identifier = "cp313-musllinux_i686", version = "3.13", path_str = "/opt/python/cp313-cp313" }, + { identifier = "cp313t-musllinux_i686", version = "3.13", path_str = "/opt/python/cp313-cp313t" }, { identifier = "cp36-musllinux_aarch64", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-musllinux_aarch64", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-musllinux_aarch64", version = "3.8", path_str = "/opt/python/cp38-cp38" }, @@ -76,6 +83,7 @@ python_configurations = [ { identifier = "cp311-musllinux_aarch64", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-musllinux_aarch64", version = "3.12", path_str = "/opt/python/cp312-cp312" }, { identifier = "cp313-musllinux_aarch64", version = "3.13", path_str = "/opt/python/cp313-cp313" }, + { identifier = "cp313t-musllinux_aarch64", version = "3.13", path_str = "/opt/python/cp313-cp313t" }, { identifier = "cp36-musllinux_ppc64le", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-musllinux_ppc64le", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-musllinux_ppc64le", version = "3.8", path_str = "/opt/python/cp38-cp38" }, @@ -84,6 +92,7 @@ python_configurations = [ { identifier = "cp311-musllinux_ppc64le", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-musllinux_ppc64le", version = "3.12", path_str = "/opt/python/cp312-cp312" }, { identifier = "cp313-musllinux_ppc64le", version = "3.13", path_str = "/opt/python/cp313-cp313" }, + { identifier = "cp313t-musllinux_ppc64le", version = "3.13", path_str = "/opt/python/cp313-cp313t" }, { identifier = "cp36-musllinux_s390x", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-musllinux_s390x", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-musllinux_s390x", version = "3.8", path_str = "/opt/python/cp38-cp38" }, @@ -92,6 +101,7 @@ python_configurations = [ { identifier = "cp311-musllinux_s390x", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-musllinux_s390x", version = "3.12", path_str = "/opt/python/cp312-cp312" }, { identifier = "cp313-musllinux_s390x", version = "3.13", path_str = "/opt/python/cp313-cp313" }, + { identifier = "cp313t-musllinux_s390x", version = "3.13", path_str = "/opt/python/cp313-cp313t" }, ] [macos] @@ -142,12 +152,15 @@ python_configurations = [ { identifier = "cp312-win32", version = "3.12.3", arch = "32" }, { identifier = "cp312-win_amd64", version = "3.12.3", arch = "64" }, { identifier = "cp313-win32", version = "3.13.0-b1", arch = "32" }, + { identifier = "cp313t-win32", version = "3.13.0-b1", arch = "32" }, { identifier = "cp313-win_amd64", version = "3.13.0-b1", arch = "64" }, + { identifier = "cp313t-win_amd64", version = "3.13.0-b1", arch = "64" }, { identifier = "cp39-win_arm64", version = "3.9.10", arch = "ARM64" }, { identifier = "cp310-win_arm64", version = "3.10.11", arch = "ARM64" }, { identifier = "cp311-win_arm64", version = "3.11.9", arch = "ARM64" }, { identifier = "cp312-win_arm64", version = "3.12.3", arch = "ARM64" }, { identifier = "cp313-win_arm64", version = "3.13.0-b1", arch = "ARM64" }, + { identifier = "cp313t-win_arm64", version = "3.13.0-b1", arch = "ARM64" }, { identifier = "pp37-win_amd64", version = "3.7", arch = "64", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-win64.zip" }, { identifier = "pp38-win_amd64", version = "3.8", arch = "64", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-win64.zip" }, { identifier = "pp39-win_amd64", version = "3.9", arch = "64", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-win64.zip" }, diff --git a/cibuildwheel/resources/constraints-python313.txt b/cibuildwheel/resources/constraints-python313.txt index 474fa6de0..5f4f1bf97 100644 --- a/cibuildwheel/resources/constraints-python313.txt +++ b/cibuildwheel/resources/constraints-python313.txt @@ -16,7 +16,7 @@ packaging==24.0 # via # build # delocate -pip==24.0 +pip==24.1b1 # via -r cibuildwheel/resources/constraints.in platformdirs==4.2.2 # via virtualenv diff --git a/cibuildwheel/resources/constraints.in b/cibuildwheel/resources/constraints.in index 50bfabb6e..4f01a4b8c 100644 --- a/cibuildwheel/resources/constraints.in +++ b/cibuildwheel/resources/constraints.in @@ -1,4 +1,5 @@ -pip +pip>=24.1b1 ; python_version >= '3.13' +pip ; python_version < '3.13' build delocate virtualenv diff --git a/cibuildwheel/util.py b/cibuildwheel/util.py index 66be99ca7..e704911cb 100644 --- a/cibuildwheel/util.py +++ b/cibuildwheel/util.py @@ -238,13 +238,15 @@ class BuildSelector: requires_python: SpecifierSet | None = None # a pattern that skips prerelease versions, when include_prereleases is False. - PRERELEASE_SKIP: ClassVar[str] = "cp313-*" + PRERELEASE_SKIP: ClassVar[str] = "cp313-* cp313t-*" prerelease_pythons: bool = False def __call__(self, build_id: str) -> bool: # Filter build selectors by python_requires if set if self.requires_python is not None: py_ver_str = build_id.split("-")[0] + if py_ver_str.endswith("t"): + py_ver_str = py_ver_str[:-1] major = int(py_ver_str[2]) minor = int(py_ver_str[3:]) version = Version(f"{major}.{minor}.99") @@ -645,10 +647,13 @@ def find_compatible_wheel(wheels: Sequence[T], identifier: str) -> T | None: """ interpreter, platform = identifier.split("-") + free_threaded = interpreter.endswith("t") + if free_threaded: + interpreter = interpreter[:-1] for wheel in wheels: _, _, _, tags = parse_wheel_filename(wheel.name) for tag in tags: - if tag.abi == "abi3": + if tag.abi == "abi3" and not free_threaded: # ABI3 wheels must start with cp3 for impl and tag if not (interpreter.startswith("cp3") and tag.interpreter.startswith("cp3")): continue diff --git a/cibuildwheel/windows.py b/cibuildwheel/windows.py index e661716d4..a8e82b65e 100644 --- a/cibuildwheel/windows.py +++ b/cibuildwheel/windows.py @@ -44,7 +44,9 @@ ) -def get_nuget_args(version: str, arch: str, output_directory: Path) -> list[str]: +def get_nuget_args( + version: str, arch: str, free_threaded: bool, output_directory: Path +) -> list[str]: package_name = { "32": "pythonx86", "64": "python", @@ -53,6 +55,8 @@ def get_nuget_args(version: str, arch: str, output_directory: Path) -> list[str] "x86": "pythonx86", "AMD64": "python", }[arch] + if free_threaded: + package_name = f"{package_name}-freethreaded" return [ package_name, "-Version", @@ -106,11 +110,12 @@ def _ensure_nuget() -> Path: return nuget -def install_cpython(version: str, arch: str) -> Path: +def install_cpython(version: str, arch: str, free_threaded: bool) -> Path: base_output_dir = CIBW_CACHE_PATH / "nuget-cpython" - nuget_args = get_nuget_args(version, arch, base_output_dir) + nuget_args = get_nuget_args(version, arch, free_threaded, base_output_dir) installation_path = base_output_dir / (nuget_args[0] + "." + version) / "tools" - with FileLock(str(base_output_dir) + f"-{version}-{arch}.lock"): + free_threaded_str = "-freethreaded" if free_threaded else "" + with FileLock(str(base_output_dir) + f"-{version}{free_threaded_str}-{arch}.lock"): if not installation_path.exists(): nuget = _ensure_nuget() call(nuget, "install", *nuget_args) @@ -224,18 +229,21 @@ def setup_python( log.step(f"Installing Python {implementation_id}...") if implementation_id.startswith("cp"): native_arch = platform_module.machine() + free_threaded = implementation_id.endswith("t") if python_configuration.arch == "ARM64" != native_arch: # To cross-compile for ARM64, we need a native CPython to run the # build, and a copy of the ARM64 import libraries ('.\libs\*.lib') # for any extension modules. python_libs_base = install_cpython( - python_configuration.version, python_configuration.arch + python_configuration.version, python_configuration.arch, free_threaded ) python_libs_base = python_libs_base.parent / "libs" log.step(f"Installing native Python {native_arch} for cross-compilation...") - base_python = install_cpython(python_configuration.version, native_arch) + base_python = install_cpython(python_configuration.version, native_arch, free_threaded) else: - base_python = install_cpython(python_configuration.version, python_configuration.arch) + base_python = install_cpython( + python_configuration.version, python_configuration.arch, free_threaded + ) elif implementation_id.startswith("pp"): assert python_configuration.url is not None base_python = install_pypy(tmp, python_configuration.arch, python_configuration.url) @@ -521,6 +529,10 @@ def build(options: Options, tmp_path: Path) -> None: # check that we are using the Python from the virtual environment call("where", "python", env=virtualenv_env) + # TODO remove me once virtualenv provides pip>=24.1b1 + if config.version.startswith("3.13."): + call("python", "-m", "pip", "install", "--pre", "-U", "pip", env=virtualenv_env) + if build_options.before_test: before_test_prepared = prepare_command( build_options.before_test, diff --git a/test/test_abi_variants.py b/test/test_abi_variants.py index d203c06fe..4446ed56c 100644 --- a/test/test_abi_variants.py +++ b/test/test_abi_variants.py @@ -13,9 +13,14 @@ limited_api_project = test_projects.new_c_project( setup_py_add=textwrap.dedent( r""" + import sysconfig + + IS_CPYTHON = sys.implementation.name == "cpython" + Py_GIL_DISABLED = sysconfig.get_config_var("Py_GIL_DISABLED") + CAN_USE_ABI3 = IS_CPYTHON and not Py_GIL_DISABLED cmdclass = {} extension_kwargs = {} - if sys.version_info[:2] >= (3, 8): + if CAN_USE_ABI3 and sys.version_info[:2] >= (3, 8): from wheel.bdist_wheel import bdist_wheel as _bdist_wheel class bdist_wheel_abi3(_bdist_wheel): @@ -47,7 +52,8 @@ def test_abi3(tmp_path): actual_wheels = utils.cibuildwheel_run( project_dir, add_env={ - "CIBW_SKIP": "pp* ", # PyPy does not have a Py_LIMITED_API equivalent + # free_threaded and PyPy do not have a Py_LIMITED_API equivalent, just build one of those + "CIBW_BUILD": "cp3?-* cp31?-* cp313t-* pp310-*" }, ) @@ -55,7 +61,9 @@ def test_abi3(tmp_path): expected_wheels = [ w.replace("cp38-cp38", "cp38-abi3") for w in utils.expected_wheels("spam", "0.1.0") - if "-pp" not in w and "-cp39" not in w and "-cp31" not in w + if ("-pp310" in w or "-pp" not in w) + and "-cp39" not in w + and ("-cp313t" in w or "-cp31" not in w) ] assert set(actual_wheels) == set(expected_wheels) @@ -177,7 +185,7 @@ def test_abi_none(tmp_path, capfd): "CIBW_TEST_REQUIRES": "pytest", "CIBW_TEST_COMMAND": "pytest {project}/test", # limit the number of builds for test performance reasons - "CIBW_BUILD": "cp38-* cp310-* pp39-*", + "CIBW_BUILD": "cp38-* cp310-* cp313t-* pp310-*", }, ) diff --git a/test/utils.py b/test/utils.py index f6f610c41..4bc02f47d 100644 --- a/test/utils.py +++ b/test/utils.py @@ -176,6 +176,8 @@ def expected_wheels( "cp312-cp312", "cp313-cp313", ] + if platform != "macos": + python_abi_tags.append("cp313-cp313t") if machine_arch in ["x86_64", "AMD64", "x86", "aarch64"]: python_abi_tags += [ From 3992d5719c52159bd5afe5daf1fcb603f6bb8027 Mon Sep 17 00:00:00 2001 From: mayeut Date: Sun, 19 May 2024 13:53:37 +0200 Subject: [PATCH 41/44] feat: add option to opt-in free-threaded builds --- bin/generate_schema.py | 5 +++ cibuildwheel/options.py | 12 +++++-- .../resources/cibuildwheel.schema.json | 6 ++++ cibuildwheel/resources/defaults.toml | 1 + cibuildwheel/util.py | 7 ++++ test/utils.py | 5 +++ unit_test/build_selector_test.py | 9 +++++ unit_test/options_test.py | 33 +++++++++++++++++++ 8 files changed, 75 insertions(+), 3 deletions(-) diff --git a/bin/generate_schema.py b/bin/generate_schema.py index 419418970..231edd909 100755 --- a/bin/generate_schema.py +++ b/bin/generate_schema.py @@ -104,6 +104,10 @@ description: Set environment variables on the host to pass-through to the container during the build. type: string_array + free-threaded-support: + type: boolean + default: false + description: The project supports free-threaded builds of Python (PEP703) manylinux-aarch64-image: type: string description: Specify alternative manylinux / musllinux container images @@ -248,6 +252,7 @@ del non_global_options["build"] del non_global_options["skip"] del non_global_options["test-skip"] +del non_global_options["free-threaded-support"] overrides["items"]["properties"]["select"]["oneOf"] = string_array overrides["items"]["properties"] |= non_global_options.copy() diff --git a/cibuildwheel/options.py b/cibuildwheel/options.py index e5b4458e8..da2d68d65 100644 --- a/cibuildwheel/options.py +++ b/cibuildwheel/options.py @@ -117,7 +117,7 @@ def architectures(self) -> set[Architecture]: return self.globals.architectures -Setting = Union[Mapping[str, str], Sequence[str], str, int] +Setting = Union[Mapping[str, str], Sequence[str], str, int, bool] @dataclasses.dataclass(frozen=True) @@ -196,7 +196,7 @@ def _resolve_cascade( if value is None: continue - if ignore_empty and not value: + if ignore_empty and not value and value is not False: continue value_string = _stringify_setting(value, list_sep, table_format) @@ -258,7 +258,7 @@ def _stringify_setting( raise ConfigOptionError(msg) return list_sep.join(setting) - if isinstance(setting, int): + if isinstance(setting, (bool, int)): return str(setting) return setting @@ -516,6 +516,10 @@ def globals(self) -> GlobalOptions: skip_config = self.reader.get("skip", env_plat=False, list_sep=" ") test_skip = self.reader.get("test-skip", env_plat=False, list_sep=" ") + free_threaded_support = strtobool( + self.reader.get("free-threaded-support", env_plat=False, ignore_empty=True) + ) + prerelease_pythons = args.prerelease_pythons or strtobool( self.env.get("CIBW_PRERELEASE_PYTHONS", "0") ) @@ -536,12 +540,14 @@ def globals(self) -> GlobalOptions: skip_config = "" architectures = Architecture.all_archs(self.platform) prerelease_pythons = True + free_threaded_support = True build_selector = BuildSelector( build_config=build_config, skip_config=skip_config, requires_python=requires_python, prerelease_pythons=prerelease_pythons, + free_threaded_support=free_threaded_support, ) test_selector = TestSelector(skip_config=test_skip) diff --git a/cibuildwheel/resources/cibuildwheel.schema.json b/cibuildwheel/resources/cibuildwheel.schema.json index 2681aca5d..d0ba3ff60 100644 --- a/cibuildwheel/resources/cibuildwheel.schema.json +++ b/cibuildwheel/resources/cibuildwheel.schema.json @@ -255,6 +255,12 @@ ], "title": "CIBW_ENVIRONMENT_PASS" }, + "free-threaded-support": { + "type": "boolean", + "default": false, + "description": "The project supports free-threaded builds of Python (PEP703)", + "title": "CIBW_FREE_THREADED_SUPPORT" + }, "manylinux-aarch64-image": { "type": "string", "description": "Specify alternative manylinux / musllinux container images", diff --git a/cibuildwheel/resources/defaults.toml b/cibuildwheel/resources/defaults.toml index b3ddeb95a..85e82f2f7 100644 --- a/cibuildwheel/resources/defaults.toml +++ b/cibuildwheel/resources/defaults.toml @@ -2,6 +2,7 @@ build = "*" skip = "" test-skip = "" +free-threaded-support = false archs = ["auto"] build-frontend = "default" diff --git a/cibuildwheel/util.py b/cibuildwheel/util.py index e704911cb..72c937d71 100644 --- a/cibuildwheel/util.py +++ b/cibuildwheel/util.py @@ -241,6 +241,8 @@ class BuildSelector: PRERELEASE_SKIP: ClassVar[str] = "cp313-* cp313t-*" prerelease_pythons: bool = False + free_threaded_support: bool = False + def __call__(self, build_id: str) -> bool: # Filter build selectors by python_requires if set if self.requires_python is not None: @@ -257,6 +259,10 @@ def __call__(self, build_id: str) -> bool: if not self.prerelease_pythons and selector_matches(self.PRERELEASE_SKIP, build_id): return False + # filter out free threaded pythons if self.free_threaded_support is False + if not self.free_threaded_support and selector_matches("*t-*", build_id): + return False + should_build = selector_matches(self.build_config, build_id) should_skip = selector_matches(self.skip_config, build_id) @@ -268,6 +274,7 @@ def options_summary(self) -> Any: "skip_config": self.skip_config, "requires_python": str(self.requires_python), "prerelease_pythons": self.prerelease_pythons, + "free_threaded_support": self.free_threaded_support, } diff --git a/test/utils.py b/test/utils.py index 4bc02f47d..08e2bc93a 100644 --- a/test/utils.py +++ b/test/utils.py @@ -37,6 +37,9 @@ def cibuildwheel_get_build_identifiers(project_path, env=None, *, prerelease_pyt cmd = [sys.executable, "-m", "cibuildwheel", "--print-build-identifiers", str(project_path)] if prerelease_pythons: cmd.append("--prerelease-pythons") + if env is None: + env = os.environ.copy() + env.setdefault("CIBW_FREE_THREADED_SUPPORT", "1") cmd_output = subprocess.run( cmd, @@ -94,6 +97,8 @@ def cibuildwheel_run( _update_pip_cache_dir(env) + env.setdefault("CIBW_FREE_THREADED_SUPPORT", "1") + with TemporaryDirectory() as tmp_output_dir: subprocess.run( [ diff --git a/unit_test/build_selector_test.py b/unit_test/build_selector_test.py index 7d7eeb5fb..6066c82e8 100644 --- a/unit_test/build_selector_test.py +++ b/unit_test/build_selector_test.py @@ -50,6 +50,7 @@ def test_build_filter_pre(): assert build_selector("cp313-manylinux_x86_64") assert build_selector("cp37-win_amd64") assert build_selector("cp313-win_amd64") + assert not build_selector("cp313t-manylinux_x86_64") def test_skip(): @@ -144,6 +145,14 @@ def test_build_limited_python_patch(): assert build_selector("cp37-manylinux_x86_64") +def test_build_free_threaded_python(): + build_selector = BuildSelector( + build_config="*", skip_config="", prerelease_pythons=True, free_threaded_support=True + ) + + assert build_selector("cp313t-manylinux_x86_64") + + def test_testing_selector(): # local import to avoid pytest trying to collect this as a test class! from cibuildwheel.util import TestSelector diff --git a/unit_test/options_test.py b/unit_test/options_test.py index 288f95caa..1b482c752 100644 --- a/unit_test/options_test.py +++ b/unit_test/options_test.py @@ -415,3 +415,36 @@ def test_override_inherit_environment_with_references(tmp_path: Path): ) == { "PATH": "/opt/local/bin:/opt/bin:/usr/bin:/bin", } + + +@pytest.mark.parametrize( + ("toml_assignment", "env", "expected_result"), + [ + ("", {}, False), + ("free-threaded-support = true", {}, True), + ("free-threaded-support = false", {}, False), + ("", {"CIBW_FREE_THREADED_SUPPORT": "0"}, False), + ("", {"CIBW_FREE_THREADED_SUPPORT": "1"}, True), + ("free-threaded-support = false", {"CIBW_FREE_THREADED_SUPPORT": "1"}, True), + ("free-threaded-support = true", {"CIBW_FREE_THREADED_SUPPORT": "0"}, False), + ("free-threaded-support = true", {"CIBW_FREE_THREADED_SUPPORT": ""}, True), + ("free-threaded-support = false", {"CIBW_FREE_THREADED_SUPPORT": ""}, False), + ], +) +def test_free_threaded_support( + tmp_path: Path, toml_assignment: str, env: dict[str, str], expected_result: bool +): + args = CommandLineArguments.defaults() + args.package_dir = tmp_path + + pyproject_toml: Path = tmp_path / "pyproject.toml" + pyproject_toml.write_text( + textwrap.dedent( + f"""\ + [tool.cibuildwheel] + {toml_assignment} + """ + ) + ) + options = Options(platform="linux", command_line_arguments=args, env=env) + assert options.globals.build_selector.free_threaded_support is expected_result From b61324914b688af015b30ab2e00390e6de47e503 Mon Sep 17 00:00:00 2001 From: mayeut Date: Sun, 19 May 2024 14:01:12 +0200 Subject: [PATCH 42/44] chore: pass a PythonConfiguration to install_cpython --- cibuildwheel/windows.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/cibuildwheel/windows.py b/cibuildwheel/windows.py index a8e82b65e..f2ddc0127 100644 --- a/cibuildwheel/windows.py +++ b/cibuildwheel/windows.py @@ -110,7 +110,11 @@ def _ensure_nuget() -> Path: return nuget -def install_cpython(version: str, arch: str, free_threaded: bool) -> Path: +def install_cpython(configuration: PythonConfiguration, arch: str | None = None) -> Path: + version = configuration.version + free_threaded = "t-" in configuration.identifier + if arch is None: + arch = configuration.arch base_output_dir = CIBW_CACHE_PATH / "nuget-cpython" nuget_args = get_nuget_args(version, arch, free_threaded, base_output_dir) installation_path = base_output_dir / (nuget_args[0] + "." + version) / "tools" @@ -229,21 +233,14 @@ def setup_python( log.step(f"Installing Python {implementation_id}...") if implementation_id.startswith("cp"): native_arch = platform_module.machine() - free_threaded = implementation_id.endswith("t") + base_python = install_cpython(python_configuration) if python_configuration.arch == "ARM64" != native_arch: # To cross-compile for ARM64, we need a native CPython to run the # build, and a copy of the ARM64 import libraries ('.\libs\*.lib') # for any extension modules. - python_libs_base = install_cpython( - python_configuration.version, python_configuration.arch, free_threaded - ) - python_libs_base = python_libs_base.parent / "libs" + python_libs_base = base_python.parent / "libs" log.step(f"Installing native Python {native_arch} for cross-compilation...") - base_python = install_cpython(python_configuration.version, native_arch, free_threaded) - else: - base_python = install_cpython( - python_configuration.version, python_configuration.arch, free_threaded - ) + base_python = install_cpython(python_configuration, arch=native_arch) elif implementation_id.startswith("pp"): assert python_configuration.url is not None base_python = install_pypy(tmp, python_configuration.arch, python_configuration.url) From 90dd47640f7210d60b436105969d121393fa1e45 Mon Sep 17 00:00:00 2001 From: mayeut Date: Sun, 19 May 2024 16:07:02 +0200 Subject: [PATCH 43/44] doc: add documentation for the `CIBW_FREE_THREADED_SUPPORT` option --- docs/options.md | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/docs/options.md b/docs/options.md index 75ac6b9be..7872ec5ef 100644 --- a/docs/options.md +++ b/docs/options.md @@ -408,6 +408,53 @@ See the [cibuildwheel 1 documentation](https://cibuildwheel.pypa.io/en/1.x/) for } +### `CIBW_FREE_THREADED_SUPPORT` {: #free-threaded-support} + +> Choose whether free-threaded variants should be built + +[PEP 703](https://www.python.org/dev/peps/pep-0703) introduced variants of CPython that can be built without the Global Interpreter Lock (GIL). +Those variants are also known as free-threaded / no-gil. + +Building for free-threaded variants is disabled by default. + +Building can be enabled by setting this option to `true`. The free-threaded compatible wheels will be built in addition to the standard wheels. + +This option doesn't support overrides. +If you need to enable/disable it per platform or python version, set this option to `true` and use [`CIBW_BUILD`](#build-skip)/[`CIBW_SKIP`](#build-skip) options to filter the builds. + +The build identifiers for those variants have a `t` suffix in their `python_tag` (e.g. `cp313t-manylinux_x86_64`) + +!!! note + This feature is experimental: [What’s New In Python 3.13](https://docs.python.org/3.13/whatsnew/3.13.html#free-threaded-cpython) + +#### Examples + +!!! tab examples "Environment variables" + + ```yaml + # Enable free-threaded support + CIBW_FREE_THREADED_SUPPORT: 1 + + # Skip building free-threaded compatible wheels on Windows + CIBW_FREE_THREADED_SUPPORT: 1 + CIBW_SKIP: *t-win* + ``` + + It is generally recommended to use `free-threaded-support` in a config file as you can statically declare that you + support free-threaded builds. + +!!! tab examples "pyproject.toml" + + ```toml + [tool.cibuildwheel] + # Enable free-threaded support + free-threaded-support = true + + # Skip building free-threaded compatible wheels on Windows + free-threaded-support = true + skip = "*t-win*" + ``` + ### `CIBW_ARCHS` {: #archs} > Change the architectures built on your machine by default. From ba8be0d98853f5744f24e7f902c8adef7ae2e7f3 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Mon, 20 May 2024 07:22:33 -0400 Subject: [PATCH 44/44] Bump version: v2.18.1 --- README.md | 22 +++++++++++++--------- cibuildwheel/__init__.py | 2 +- docs/changelog.md | 12 ++++++++++++ docs/faq.md | 6 +++--- docs/setup.md | 4 ++-- examples/appveyor-minimal.yml | 2 +- examples/azure-pipelines-minimal.yml | 6 +++--- examples/circleci-minimal.yml | 6 +++--- examples/cirrus-ci-intel-mac.yml | 2 +- examples/cirrus-ci-minimal.yml | 2 +- examples/github-deploy.yml | 2 +- examples/github-minimal.yml | 2 +- examples/github-with-qemu.yml | 2 +- examples/gitlab-minimal.yml | 4 ++-- examples/gitlab-with-qemu.yml | 2 +- examples/travis-ci-deploy.yml | 2 +- examples/travis-ci-minimal.yml | 2 +- examples/travis-ci-test-and-deploy.yml | 4 ++-- pyproject.toml | 2 +- 19 files changed, 51 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index c98487363..4fc21ea54 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ jobs: - uses: actions/setup-python@v5 - name: Install cibuildwheel - run: python -m pip install cibuildwheel==2.18.0 + run: python -m pip install cibuildwheel==2.18.1 - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse @@ -210,6 +210,18 @@ Changelog +### v2.18.1 + +- 🌟 Add free-threaded Linux and Windows builds for 3.13. New identifiers `cp313t-*`, new option `CIBW_FREE_THREADED_SUPPORT`/`tool.cibuildwheel.free-threaded-support` required to opt-in. [See the docs](https://cibuildwheel.pypa.io/en/stable/options/#free-threaded-support) for more information. (#1831) +- ✨ The `container-engine` is now a build (non-global) option. (#1792) +- πŸ›  The build backend for cibuildwheel is now hatchling. (#1297) +- πŸ›  Significant improvements and modernization to our noxfile. (#1823) +- πŸ›  Use pylint's new GitHub Actions reporter instead of a custom matcher. (#1823) +- πŸ›  Unpin virtualenv updates for Python 3.7+ (#1830) +- πŸ› Fix running linux tests from Windows or macOS ARM. (#1788) +- πŸ“š Fix our documentation build. (#1821) + + ### v2.18.0 _12 May 2024_ @@ -258,14 +270,6 @@ _28 January 2024_ - πŸ›  Update manylinux pins to upgrade from a problematic PyPy version. (#1737) -### v2.16.3 - -_26 January 2024_ - -- πŸ› Fix a bug when building from sdist, where relative paths to files in the package didn't work because the working directory was wrong (#1687) -- πŸ›  Adds the ability to disable mounting the host filesystem in containers to `/host`, through the `disable_host_mount` suboption on [`CIBW_CONTAINER_ENGINE`](https://cibuildwheel.pypa.io/en/stable/options/#container-engine). -- πŸ“š A lot of docs improvements! (#1708, #1705, #1686, #1679, #1667, #1665) - --- diff --git a/cibuildwheel/__init__.py b/cibuildwheel/__init__.py index faf466151..0a6b28d30 100644 --- a/cibuildwheel/__init__.py +++ b/cibuildwheel/__init__.py @@ -1,3 +1,3 @@ from __future__ import annotations -__version__ = "2.18.0" +__version__ = "2.18.1" diff --git a/docs/changelog.md b/docs/changelog.md index f6ec6e589..6e0ed7b00 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -4,6 +4,18 @@ title: Changelog # Changelog +### v2.18.1 + +- 🌟 Add free-threaded Linux and Windows builds for 3.13. New identifiers `cp313t-*`, new option `CIBW_FREE_THREADED_SUPPORT`/`tool.cibuildwheel.free-threaded-support` required to opt-in. [See the docs](https://cibuildwheel.pypa.io/en/stable/options/#free-threaded-support) for more information. (#1831) +- ✨ The `container-engine` is now a build (non-global) option. (#1792) +- πŸ›  The build backend for cibuildwheel is now hatchling. (#1297) +- πŸ›  Significant improvements and modernization to our noxfile. (#1823) +- πŸ›  Use pylint's new GitHub Actions reporter instead of a custom matcher. (#1823) +- πŸ›  Unpin virtualenv updates for Python 3.7+ (#1830) +- πŸ› Fix running linux tests from Windows or macOS ARM. (#1788) +- πŸ“š Fix our documentation build. (#1821) + + ### v2.18.0 _12 May 2024_ diff --git a/docs/faq.md b/docs/faq.md index fccf237c5..5ab7419a4 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -142,7 +142,7 @@ There are two suggested methods for keeping cibuildwheel up to date that instead If you use GitHub Actions for builds, you can use cibuildwheel as an action: ```yaml -uses: pypa/cibuildwheel@v2.18.0 +uses: pypa/cibuildwheel@v2.18.1 ``` This is a composite step that just runs cibuildwheel using pipx. You can set command-line options as `with:` parameters, and use `env:` as normal. @@ -164,7 +164,7 @@ The second option, and the only one that supports other CI systems, is using a ` ```bash # requirements-cibw.txt -cibuildwheel==2.18.0 +cibuildwheel==2.18.1 ``` Then your install step would have `python -m pip install -r requirements-cibw.txt` in it. Your `.github/dependabot.yml` file could look like this: @@ -328,7 +328,7 @@ Solutions to this vary, but the simplest is to use pipx: # most runners have pipx preinstalled, but in case you don't python3 -m pip install pipx -pipx run cibuildwheel==2.18.0 --output-dir wheelhouse +pipx run cibuildwheel==2.18.1 --output-dir wheelhouse pipx run twine upload wheelhouse/*.whl ``` diff --git a/docs/setup.md b/docs/setup.md index 28c389af2..b89dd5268 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -154,7 +154,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/ - uses: actions/checkout@v4 - name: Build wheels - run: pipx run cibuildwheel==2.18.0 + run: pipx run cibuildwheel==2.18.1 - uses: actions/upload-artifact@v4 with: @@ -191,7 +191,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/ - uses: actions/setup-python@v5 - name: Install cibuildwheel - run: python -m pip install cibuildwheel==2.18.0 + run: python -m pip install cibuildwheel==2.18.1 - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse diff --git a/examples/appveyor-minimal.yml b/examples/appveyor-minimal.yml index 5a1f59386..b8e814d88 100644 --- a/examples/appveyor-minimal.yml +++ b/examples/appveyor-minimal.yml @@ -12,7 +12,7 @@ stack: python 3.7 init: - cmd: set PATH=C:\Python37;C:\Python37\Scripts;%PATH% -install: python -m pip install cibuildwheel==2.18.0 +install: python -m pip install cibuildwheel==2.18.1 build_script: python -m cibuildwheel --output-dir wheelhouse diff --git a/examples/azure-pipelines-minimal.yml b/examples/azure-pipelines-minimal.yml index b42943427..c86d4d656 100644 --- a/examples/azure-pipelines-minimal.yml +++ b/examples/azure-pipelines-minimal.yml @@ -6,7 +6,7 @@ jobs: - bash: | set -o errexit python3 -m pip install --upgrade pip - pip3 install cibuildwheel==2.18.0 + pip3 install cibuildwheel==2.18.1 displayName: Install dependencies - bash: cibuildwheel --output-dir wheelhouse . displayName: Build wheels @@ -20,7 +20,7 @@ jobs: - bash: | set -o errexit python3 -m pip install --upgrade pip - python3 -m pip install cibuildwheel==2.18.0 + python3 -m pip install cibuildwheel==2.18.1 displayName: Install dependencies - bash: cibuildwheel --output-dir wheelhouse . displayName: Build wheels @@ -34,7 +34,7 @@ jobs: - bash: | set -o errexit python -m pip install --upgrade pip - pip install cibuildwheel==2.18.0 + pip install cibuildwheel==2.18.1 displayName: Install dependencies - bash: cibuildwheel --output-dir wheelhouse . displayName: Build wheels diff --git a/examples/circleci-minimal.yml b/examples/circleci-minimal.yml index f6784ed9a..82382db07 100644 --- a/examples/circleci-minimal.yml +++ b/examples/circleci-minimal.yml @@ -11,7 +11,7 @@ jobs: - run: name: Build the Linux wheels. command: | - pip3 install --user cibuildwheel==2.18.0 + pip3 install --user cibuildwheel==2.18.1 cibuildwheel --output-dir wheelhouse - store_artifacts: path: wheelhouse/ @@ -28,7 +28,7 @@ jobs: - run: name: Build the Linux aarch64 wheels. command: | - python3 -m pip install --user cibuildwheel==2.18.0 + python3 -m pip install --user cibuildwheel==2.18.1 python3 -m cibuildwheel --output-dir wheelhouse - store_artifacts: path: wheelhouse/ @@ -42,7 +42,7 @@ jobs: - run: name: Build the OS X wheels. command: | - pip3 install cibuildwheel==2.18.0 + pip3 install cibuildwheel==2.18.1 cibuildwheel --output-dir wheelhouse - store_artifacts: path: wheelhouse/ diff --git a/examples/cirrus-ci-intel-mac.yml b/examples/cirrus-ci-intel-mac.yml index e30f02fca..9f8c4105e 100644 --- a/examples/cirrus-ci-intel-mac.yml +++ b/examples/cirrus-ci-intel-mac.yml @@ -1,6 +1,6 @@ build_and_store_wheels: &BUILD_AND_STORE_WHEELS install_cibuildwheel_script: - - python -m pip install cibuildwheel==2.18.0 + - python -m pip install cibuildwheel==2.18.1 run_cibuildwheel_script: - cibuildwheel wheels_artifacts: diff --git a/examples/cirrus-ci-minimal.yml b/examples/cirrus-ci-minimal.yml index e2fdf237d..9cac67508 100644 --- a/examples/cirrus-ci-minimal.yml +++ b/examples/cirrus-ci-minimal.yml @@ -1,6 +1,6 @@ build_and_store_wheels: &BUILD_AND_STORE_WHEELS install_cibuildwheel_script: - - python -m pip install cibuildwheel==2.18.0 + - python -m pip install cibuildwheel==2.18.1 run_cibuildwheel_script: - cibuildwheel wheels_artifacts: diff --git a/examples/github-deploy.yml b/examples/github-deploy.yml index 5e089def9..3da92a065 100644 --- a/examples/github-deploy.yml +++ b/examples/github-deploy.yml @@ -23,7 +23,7 @@ jobs: - uses: actions/checkout@v4 - name: Build wheels - uses: pypa/cibuildwheel@v2.18.0 + uses: pypa/cibuildwheel@v2.18.1 - uses: actions/upload-artifact@v4 with: diff --git a/examples/github-minimal.yml b/examples/github-minimal.yml index 8c01d8446..f788d4ddb 100644 --- a/examples/github-minimal.yml +++ b/examples/github-minimal.yml @@ -15,7 +15,7 @@ jobs: - uses: actions/checkout@v4 - name: Build wheels - uses: pypa/cibuildwheel@v2.18.0 + uses: pypa/cibuildwheel@v2.18.1 # env: # CIBW_SOME_OPTION: value # ... diff --git a/examples/github-with-qemu.yml b/examples/github-with-qemu.yml index 517d86703..76d0b9e8d 100644 --- a/examples/github-with-qemu.yml +++ b/examples/github-with-qemu.yml @@ -21,7 +21,7 @@ jobs: platforms: all - name: Build wheels - uses: pypa/cibuildwheel@v2.18.0 + uses: pypa/cibuildwheel@v2.18.1 env: # configure cibuildwheel to build native archs ('auto'), and some # emulated ones diff --git a/examples/gitlab-minimal.yml b/examples/gitlab-minimal.yml index d4fb6f4df..0940bc181 100644 --- a/examples/gitlab-minimal.yml +++ b/examples/gitlab-minimal.yml @@ -12,7 +12,7 @@ linux: DOCKER_TLS_CERTDIR: "" script: - curl -sSL https://get.docker.com/ | sh - - python -m pip install cibuildwheel==2.18.0 + - python -m pip install cibuildwheel==2.18.1 - cibuildwheel --output-dir wheelhouse artifacts: paths: @@ -23,7 +23,7 @@ windows: before_script: - choco install python -y --version 3.8.6 - choco install git.install -y - - py -m pip install cibuildwheel==2.18.0 + - py -m pip install cibuildwheel==2.18.1 script: - py -m cibuildwheel --output-dir wheelhouse --platform windows artifacts: diff --git a/examples/gitlab-with-qemu.yml b/examples/gitlab-with-qemu.yml index 7de05582a..5937f27c1 100644 --- a/examples/gitlab-with-qemu.yml +++ b/examples/gitlab-with-qemu.yml @@ -14,7 +14,7 @@ linux: - curl -sSL https://get.docker.com/ | sh # Warning: This is extremely slow, be careful with how many wheels you build - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - - python -m pip install cibuildwheel==2.18.0 + - python -m pip install cibuildwheel==2.18.1 # Assuming your CI runner's default architecture is x86_64... - cibuildwheel --output-dir wheelhouse --platform linux --archs aarch64 artifacts: diff --git a/examples/travis-ci-deploy.yml b/examples/travis-ci-deploy.yml index 74c082dd8..755bc3888 100644 --- a/examples/travis-ci-deploy.yml +++ b/examples/travis-ci-deploy.yml @@ -20,7 +20,7 @@ jobs: - ln -s /c/Python38/python.exe /c/Python38/python3.exe install: - - python3 -m pip install cibuildwheel==2.18.0 + - python3 -m pip install cibuildwheel==2.18.1 script: # build the wheels, put them into './dist' diff --git a/examples/travis-ci-minimal.yml b/examples/travis-ci-minimal.yml index de0ea6913..4d8865eaa 100644 --- a/examples/travis-ci-minimal.yml +++ b/examples/travis-ci-minimal.yml @@ -26,7 +26,7 @@ jobs: - ln -s /c/Python38/python.exe /c/Python38/python3.exe install: - - python3 -m pip install cibuildwheel==2.18.0 + - python3 -m pip install cibuildwheel==2.18.1 script: # build the wheels, put them into './wheelhouse' diff --git a/examples/travis-ci-test-and-deploy.yml b/examples/travis-ci-test-and-deploy.yml index 23d0d1fec..3e8da8a76 100644 --- a/examples/travis-ci-test-and-deploy.yml +++ b/examples/travis-ci-test-and-deploy.yml @@ -54,7 +54,7 @@ jobs: - stage: deploy name: Build and deploy Linux wheels services: docker - install: python3 -m pip install cibuildwheel==2.18.0 twine + install: python3 -m pip install cibuildwheel==2.18.1 twine script: python3 -m cibuildwheel --output-dir wheelhouse after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl # Deploy on windows @@ -62,7 +62,7 @@ jobs: name: Build and deploy Windows wheels os: windows language: shell - install: python3 -m pip install cibuildwheel==2.18.0 twine + install: python3 -m pip install cibuildwheel==2.18.1 twine script: python3 -m cibuildwheel --output-dir wheelhouse after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl diff --git a/pyproject.toml b/pyproject.toml index 342394af1..23f8c8c45 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "cibuildwheel" -version = "2.18.0" +version = "2.18.1" description = "Build Python wheels on CI with minimal configuration." readme = "README.md" license = "BSD-2-Clause"