Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5e15bb25b4 | ||
|
|
52572ccdd0 | ||
|
|
c6027e4fc7 | ||
|
|
aff6dd5adc | ||
|
|
31bd9c9174 | ||
|
|
d996af554a | ||
|
|
e42f243b52 | ||
|
|
9f18d385cb | ||
|
|
dfbc6c3902 | ||
|
|
8c5f89c035 | ||
|
|
6d038dfbdf | ||
|
|
ec9919a088 | ||
|
|
1512427455 | ||
|
|
440e18c275 | ||
|
|
063161f5af | ||
|
|
2246313344 | ||
|
|
fdc0eae932 | ||
|
|
fa72100d49 | ||
|
|
7c9b837780 | ||
|
|
1c1df68a50 | ||
|
|
4a9d2a37a9 | ||
|
|
05bf46f059 | ||
|
|
420ef86679 | ||
|
|
ae0ac92167 | ||
|
|
26dd3f399e | ||
|
|
33f642dc0b | ||
|
|
3ed1b65b3e | ||
|
|
e0a01d9986 | ||
|
|
c0873c9198 | ||
|
|
374d786812 | ||
|
|
8a307031a9 | ||
|
|
0036ac5254 | ||
|
|
2f3949953a | ||
|
|
d018570bc4 | ||
|
|
bd5294b3f3 | ||
|
|
f16ccf4e3d | ||
|
|
e6c926f7f8 | ||
|
|
7c64170c33 | ||
|
|
177cb142b5 | ||
|
|
2d89ecc140 | ||
|
|
7106da2c6b | ||
|
|
03ece1f81d | ||
|
|
93e1464e6a | ||
|
|
6e4dfaefad | ||
|
|
a2efed2aeb | ||
|
|
8812101cc6 | ||
|
|
a6028923d6 | ||
|
|
cd6c1409fb | ||
|
|
e049c2bd83 | ||
|
|
37c749e507 | ||
|
|
04a0ca0e04 | ||
|
|
2c3e01287a | ||
|
|
b2d0292204 | ||
|
|
cd32569937 |
@@ -34,7 +34,7 @@ jobs:
|
|||||||
name: artifact
|
name: artifact
|
||||||
path: dist
|
path: dist
|
||||||
|
|
||||||
- uses: pypa/gh-action-pypi-publish@v1.6.4
|
- uses: pypa/gh-action-pypi-publish@v1.8.5
|
||||||
with:
|
with:
|
||||||
user: __token__
|
user: __token__
|
||||||
password: ${{ secrets.pypi_password }}
|
password: ${{ secrets.pypi_password }}
|
||||||
|
|||||||
@@ -39,6 +39,9 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-20.04, windows-latest, macos-11]
|
os: [ubuntu-20.04, windows-latest, macos-11]
|
||||||
python_version: ['3.11']
|
python_version: ['3.11']
|
||||||
|
include:
|
||||||
|
- os: ubuntu-22.04
|
||||||
|
python_version: '3.7'
|
||||||
timeout-minutes: 180
|
timeout-minutes: 180
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Create Pull Request
|
- name: Create Pull Request
|
||||||
if: github.ref == 'refs/heads/main' && github.repository == 'pypa/cibuildwheel'
|
if: github.ref == 'refs/heads/main' && github.repository == 'pypa/cibuildwheel'
|
||||||
uses: peter-evans/create-pull-request@v4
|
uses: peter-evans/create-pull-request@v5
|
||||||
with:
|
with:
|
||||||
commit-message: Update dependencies
|
commit-message: Update dependencies
|
||||||
title: '[Bot] Update dependencies'
|
title: '[Bot] Update dependencies'
|
||||||
|
|||||||
@@ -14,15 +14,15 @@ repos:
|
|||||||
- id: trailing-whitespace
|
- id: trailing-whitespace
|
||||||
|
|
||||||
- repo: https://github.com/psf/black
|
- repo: https://github.com/psf/black
|
||||||
rev: 23.1.0
|
rev: 23.3.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: black
|
- id: black
|
||||||
|
|
||||||
- repo: https://github.com/charliermarsh/ruff-pre-commit
|
- repo: https://github.com/charliermarsh/ruff-pre-commit
|
||||||
rev: v0.0.254
|
rev: v0.0.261
|
||||||
hooks:
|
hooks:
|
||||||
- id: ruff
|
- id: ruff
|
||||||
args: ["--fix"]
|
args: ["--fix", "--show-fixes"]
|
||||||
|
|
||||||
- repo: https://github.com/asottile/setup-cfg-fmt
|
- repo: https://github.com/asottile/setup-cfg-fmt
|
||||||
rev: v2.2.0
|
rev: v2.2.0
|
||||||
@@ -31,7 +31,7 @@ repos:
|
|||||||
args: [--include-version-classifiers, --max-py-version=3.11]
|
args: [--include-version-classifiers, --max-py-version=3.11]
|
||||||
|
|
||||||
- repo: https://github.com/pre-commit/mirrors-mypy
|
- repo: https://github.com/pre-commit/mirrors-mypy
|
||||||
rev: v1.0.1
|
rev: v1.2.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: mypy
|
- id: mypy
|
||||||
name: mypy 3.7 on cibuildwheel/
|
name: mypy 3.7 on cibuildwheel/
|
||||||
@@ -46,16 +46,14 @@ repos:
|
|||||||
- tomli_w
|
- tomli_w
|
||||||
- types-certifi
|
- types-certifi
|
||||||
- types-click
|
- types-click
|
||||||
- types-dataclasses
|
|
||||||
- types-jinja2
|
- types-jinja2
|
||||||
- types-pyyaml
|
- types-pyyaml
|
||||||
- types-requests
|
- types-requests
|
||||||
- bracex
|
- bracex
|
||||||
- dataclasses
|
|
||||||
- id: mypy
|
- id: mypy
|
||||||
name: mypy 3.10
|
name: mypy 3.11
|
||||||
exclude: ^cibuildwheel/resources/.*py$
|
exclude: ^cibuildwheel/resources/.*py$
|
||||||
args: ["--python-version=3.10"]
|
args: ["--python-version=3.11"]
|
||||||
additional_dependencies: *mypy-dependencies
|
additional_dependencies: *mypy-dependencies
|
||||||
|
|
||||||
- repo: https://github.com/shellcheck-py/shellcheck-py
|
- repo: https://github.com/shellcheck-py/shellcheck-py
|
||||||
@@ -79,7 +77,7 @@ repos:
|
|||||||
files: ^docs/changelog.md$
|
files: ^docs/changelog.md$
|
||||||
|
|
||||||
- repo: https://github.com/codespell-project/codespell
|
- repo: https://github.com/codespell-project/codespell
|
||||||
rev: v2.2.2
|
rev: v2.2.4
|
||||||
hooks:
|
hooks:
|
||||||
- id: codespell
|
- id: codespell
|
||||||
args: ["-L", "sur"]
|
args: ["-L", "sur"]
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ jobs:
|
|||||||
- uses: actions/setup-python@v3
|
- uses: actions/setup-python@v3
|
||||||
|
|
||||||
- name: Install cibuildwheel
|
- name: Install cibuildwheel
|
||||||
run: python -m pip install cibuildwheel==2.12.1
|
run: python -m pip install cibuildwheel==2.12.3
|
||||||
|
|
||||||
- name: Build wheels
|
- name: Build wheels
|
||||||
run: python -m cibuildwheel --output-dir wheelhouse
|
run: python -m cibuildwheel --output-dir wheelhouse
|
||||||
@@ -166,7 +166,7 @@ Here are some repos that use cibuildwheel.
|
|||||||
| [Kivy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Open source UI framework written in Python, running on Windows, Linux, macOS, Android and iOS |
|
| [Kivy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Open source UI framework written in Python, running on Windows, Linux, macOS, Android and iOS |
|
||||||
| [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. |
|
| [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. |
|
| [MyPy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | The compiled version of MyPy using MyPyC. |
|
||||||
| [pydantic][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Data validation using Python type hints |
|
| [MemRay][] | ![github icon][] | ![linux icon][] | Memray is a memory profiler for Python |
|
||||||
|
|
||||||
[scikit-learn]: https://github.com/scikit-learn/scikit-learn
|
[scikit-learn]: https://github.com/scikit-learn/scikit-learn
|
||||||
[NumPy]: https://github.com/numpy/numpy
|
[NumPy]: https://github.com/numpy/numpy
|
||||||
@@ -177,7 +177,7 @@ Here are some repos that use cibuildwheel.
|
|||||||
[Kivy]: https://github.com/kivy/kivy
|
[Kivy]: https://github.com/kivy/kivy
|
||||||
[Prophet]: https://github.com/facebook/prophet
|
[Prophet]: https://github.com/facebook/prophet
|
||||||
[MyPy]: https://github.com/mypyc/mypy_mypyc-wheels
|
[MyPy]: https://github.com/mypyc/mypy_mypyc-wheels
|
||||||
[pydantic]: https://github.com/samuelcolvin/pydantic
|
[MemRay]: https://github.com/bloomberg/memray
|
||||||
|
|
||||||
[appveyor icon]: docs/data/readme_icons/appveyor.svg
|
[appveyor icon]: docs/data/readme_icons/appveyor.svg
|
||||||
[github icon]: docs/data/readme_icons/github.svg
|
[github icon]: docs/data/readme_icons/github.svg
|
||||||
@@ -210,6 +210,20 @@ Changelog
|
|||||||
|
|
||||||
<!-- this section was generated by bin/update_readme_changelog.py -- do not edit manually -->
|
<!-- this section was generated by bin/update_readme_changelog.py -- do not edit manually -->
|
||||||
|
|
||||||
|
### v2.12.3
|
||||||
|
|
||||||
|
_19 April 2023_
|
||||||
|
|
||||||
|
- 🐛 Fix an import error when running on Python 3.7. (#1479)
|
||||||
|
|
||||||
|
### v2.12.2
|
||||||
|
|
||||||
|
_18 April 2023_
|
||||||
|
|
||||||
|
- 🐛 Fix a bug that caused an extra empty config-setting to be passed to the backend when CIBW_BUILD_FRONTEND is set to `build`. (#1474)
|
||||||
|
- 🐛 Fix a crash that occurred when overwriting an existing wheel on Windows. (#1464)
|
||||||
|
- 🛠 Pinned version updates, including CPython 3.10.11, 3.11.3, pip 23.1 and wheel 0.40.0.
|
||||||
|
|
||||||
### v2.12.1
|
### v2.12.1
|
||||||
|
|
||||||
_11 March 2023_
|
_11 March 2023_
|
||||||
@@ -232,26 +246,6 @@ _24 Dec 2022_
|
|||||||
- 🛠 Updates PyPy to 7.3.10, except on macOS which remains on 7.3.9 due to a bug on that platform. (#1371)
|
- 🛠 Updates PyPy to 7.3.10, except on macOS which remains on 7.3.9 due to a bug on that platform. (#1371)
|
||||||
- 📚 Added a reference to abi3audit to the docs (#1347)
|
- 📚 Added a reference to abi3audit to the docs (#1347)
|
||||||
|
|
||||||
### v2.11.3
|
|
||||||
|
|
||||||
_5 Dec 2022_
|
|
||||||
|
|
||||||
- ✨ Improves the 'build options' log output that's printed at the start of each run (#1352)
|
|
||||||
- ✨ Added a friendly error message to a common misconfiguration of the `CIBW_TEST_COMMAND` option - not specifying path using the `{project}` placeholder (#1336)
|
|
||||||
- 🛠 The GitHub Action now uses Powershell on Windows to avoid occasional incompabilities with bash (#1346)
|
|
||||||
|
|
||||||
### v2.11.2
|
|
||||||
|
|
||||||
_26 October 2022_
|
|
||||||
|
|
||||||
- 🛠 Updates CPython 3.11 to 3.11.0 - final release (#1327)
|
|
||||||
- 🛠 Simplify the default macOS repair command (#1322)
|
|
||||||
- 🛠 Fix the default `MACOSX_DEPLOYMENT_TARGET` on arm64 (#1312)
|
|
||||||
- 🛠 Hide irrelevant pip warnings on linux (#1311)
|
|
||||||
- 🐛 Fix a bug that caused the stdout and stderr of commands in containers to be in the wrong order Previously, stdout could appear after stderr. (#1324)
|
|
||||||
- 📚 Added [a FAQ entry](https://cibuildwheel.readthedocs.io/en/stable/faq/#macos-building-cpython-38-wheels-on-arm64) describing how to perform native builds of CPython 3.8 wheels on Apple Silicon. (#1323)
|
|
||||||
- 📚 Other docs improvements
|
|
||||||
|
|
||||||
<!-- END bin/update_readme_changelog.py -->
|
<!-- END bin/update_readme_changelog.py -->
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ the results without the `--online` setting.
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import ast
|
import ast
|
||||||
|
from collections.abc import Iterable, Iterator
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Iterator
|
|
||||||
|
|
||||||
import click
|
import click
|
||||||
import yaml
|
import yaml
|
||||||
@@ -97,7 +97,7 @@ class MaybeRemote:
|
|||||||
with open(filename, "w") as f:
|
with open(filename, "w") as f:
|
||||||
yaml.safe_dump(self.contents, f, default_flow_style=False)
|
yaml.safe_dump(self.contents, f, default_flow_style=False)
|
||||||
|
|
||||||
def on_each(self, repos: list[str]) -> Iterator[tuple[str, str, str | None]]:
|
def on_each(self, repos: Iterable[str]) -> Iterator[tuple[str, str, str | None]]:
|
||||||
for repo in repos:
|
for repo in repos:
|
||||||
print(f"[bold]{repo}:")
|
print(f"[bold]{repo}:")
|
||||||
for filename in sorted(self.contents, reverse=True):
|
for filename in sorted(self.contents, reverse=True):
|
||||||
|
|||||||
Regular → Executable
+5
-4
@@ -16,6 +16,7 @@ import functools
|
|||||||
import textwrap
|
import textwrap
|
||||||
import urllib.request
|
import urllib.request
|
||||||
import xml.dom.minidom
|
import xml.dom.minidom
|
||||||
|
from collections.abc import Iterable, Mapping, Sequence
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
@@ -42,7 +43,7 @@ ICONS = (
|
|||||||
class Project:
|
class Project:
|
||||||
NAME: int = 0
|
NAME: int = 0
|
||||||
|
|
||||||
def __init__(self, config: dict[str, Any], github: Github | None = None):
|
def __init__(self, config: Mapping[str, Any], github: Github | None = None):
|
||||||
try:
|
try:
|
||||||
self.name: str = config["name"]
|
self.name: str = config["name"]
|
||||||
self.gh: str = config["gh"]
|
self.gh: str = config["gh"]
|
||||||
@@ -149,7 +150,7 @@ def path_for_icon(icon_name: str, relative_to: Path | None = None) -> Path:
|
|||||||
|
|
||||||
|
|
||||||
def get_projects(
|
def get_projects(
|
||||||
config: list[dict[str, Any]],
|
config: Iterable[Mapping[str, Any]],
|
||||||
*,
|
*,
|
||||||
online: bool = True,
|
online: bool = True,
|
||||||
auth: str | None = None,
|
auth: str | None = None,
|
||||||
@@ -163,7 +164,7 @@ def get_projects(
|
|||||||
return sorted((Project(item, github) for item in config), reverse=online)
|
return sorted((Project(item, github) for item in config), reverse=online)
|
||||||
|
|
||||||
|
|
||||||
def render_projects(projects: list[Project], *, dest_path: Path, include_info: bool = True):
|
def render_projects(projects: Sequence[Project], *, dest_path: Path, include_info: bool = True):
|
||||||
io = StringIO()
|
io = StringIO()
|
||||||
print = functools.partial(builtins.print, file=io)
|
print = functools.partial(builtins.print, file=io)
|
||||||
|
|
||||||
@@ -191,7 +192,7 @@ def render_projects(projects: list[Project], *, dest_path: Path, include_info: b
|
|||||||
def insert_projects_table(
|
def insert_projects_table(
|
||||||
file: Path,
|
file: Path,
|
||||||
*,
|
*,
|
||||||
projects: list[Project],
|
projects: Sequence[Project],
|
||||||
input_filename: str,
|
input_filename: str,
|
||||||
include_info: bool = True,
|
include_info: bool = True,
|
||||||
):
|
):
|
||||||
|
|||||||
Regular → Executable
+8
-13
@@ -5,26 +5,21 @@ from __future__ import annotations
|
|||||||
import copy
|
import copy
|
||||||
import difflib
|
import difflib
|
||||||
import logging
|
import logging
|
||||||
import sys
|
from collections.abc import Mapping, MutableMapping
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Union
|
from typing import Any, Union
|
||||||
|
|
||||||
import click
|
import click
|
||||||
import requests
|
import requests
|
||||||
import rich
|
import rich
|
||||||
|
|
||||||
if sys.version_info >= (3, 11):
|
|
||||||
import tomllib
|
|
||||||
else:
|
|
||||||
import tomli as tomllib
|
|
||||||
|
|
||||||
from packaging.specifiers import Specifier
|
from packaging.specifiers import Specifier
|
||||||
from packaging.version import Version
|
from packaging.version import Version
|
||||||
from rich.logging import RichHandler
|
from rich.logging import RichHandler
|
||||||
from rich.syntax import Syntax
|
from rich.syntax import Syntax
|
||||||
|
|
||||||
|
from cibuildwheel._compat import tomllib
|
||||||
|
from cibuildwheel._compat.typing import Final, Literal, TypedDict
|
||||||
from cibuildwheel.extra import dump_python_configurations
|
from cibuildwheel.extra import dump_python_configurations
|
||||||
from cibuildwheel.typing import Final, Literal, TypedDict
|
|
||||||
|
|
||||||
log = logging.getLogger("cibw")
|
log = logging.getLogger("cibw")
|
||||||
|
|
||||||
@@ -93,7 +88,7 @@ class WindowsVersions:
|
|||||||
unsorted_versions = spec.filter(self.version_dict)
|
unsorted_versions = spec.filter(self.version_dict)
|
||||||
versions = sorted(unsorted_versions, reverse=True)
|
versions = sorted(unsorted_versions, reverse=True)
|
||||||
|
|
||||||
log.debug(f"Windows {self.arch} {spec} has {', '.join(str(v) for v in versions)}")
|
log.debug("Windows %s %s has %s", self.arch, spec, ", ".join(str(v) for v in versions))
|
||||||
|
|
||||||
if not versions:
|
if not versions:
|
||||||
return None
|
return None
|
||||||
@@ -124,7 +119,7 @@ class PyPyVersions:
|
|||||||
]
|
]
|
||||||
self.arch = arch_str
|
self.arch = arch_str
|
||||||
|
|
||||||
def get_arch_file(self, release: dict[str, Any]) -> str:
|
def get_arch_file(self, release: Mapping[str, Any]) -> str:
|
||||||
urls: list[str] = [
|
urls: list[str] = [
|
||||||
rf["download_url"]
|
rf["download_url"]
|
||||||
for rf in release["files"]
|
for rf in release["files"]
|
||||||
@@ -250,11 +245,11 @@ class AllVersions:
|
|||||||
self.macos_pypy = PyPyVersions("64")
|
self.macos_pypy = PyPyVersions("64")
|
||||||
self.macos_pypy_arm64 = PyPyVersions("ARM64")
|
self.macos_pypy_arm64 = PyPyVersions("ARM64")
|
||||||
|
|
||||||
def update_config(self, config: dict[str, str]) -> None:
|
def update_config(self, config: MutableMapping[str, str]) -> None:
|
||||||
identifier = config["identifier"]
|
identifier = config["identifier"]
|
||||||
version = Version(config["version"])
|
version = Version(config["version"])
|
||||||
spec = Specifier(f"=={version.major}.{version.minor}.*")
|
spec = Specifier(f"=={version.major}.{version.minor}.*")
|
||||||
log.info(f"Reading in '{identifier}' -> {spec} @ {version}")
|
log.info("Reading in %r -> %s @ %s", str(identifier), spec, version)
|
||||||
orig_config = copy.copy(config)
|
orig_config = copy.copy(config)
|
||||||
config_update: AnyConfig | None = None
|
config_update: AnyConfig | None = None
|
||||||
|
|
||||||
@@ -282,7 +277,7 @@ class AllVersions:
|
|||||||
config.update(**config_update)
|
config.update(**config_update)
|
||||||
|
|
||||||
if config != orig_config:
|
if config != orig_config:
|
||||||
log.info(f" Updated {orig_config} to {config}")
|
log.info(" Updated %s to %s", orig_config, config)
|
||||||
|
|
||||||
|
|
||||||
@click.command()
|
@click.command()
|
||||||
|
|||||||
@@ -5,23 +5,17 @@ from __future__ import annotations
|
|||||||
import difflib
|
import difflib
|
||||||
import logging
|
import logging
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
import click
|
import click
|
||||||
import rich
|
import rich
|
||||||
|
|
||||||
if sys.version_info >= (3, 11):
|
|
||||||
import tomllib
|
|
||||||
else:
|
|
||||||
import tomli as tomllib
|
|
||||||
|
|
||||||
from packaging.version import InvalidVersion, Version
|
from packaging.version import InvalidVersion, Version
|
||||||
from rich.logging import RichHandler
|
from rich.logging import RichHandler
|
||||||
from rich.syntax import Syntax
|
from rich.syntax import Syntax
|
||||||
|
|
||||||
from cibuildwheel.typing import Final
|
from cibuildwheel._compat import tomllib
|
||||||
|
from cibuildwheel._compat.typing import Final
|
||||||
|
|
||||||
log = logging.getLogger("cibw")
|
log = logging.getLogger("cibw")
|
||||||
|
|
||||||
@@ -54,14 +48,14 @@ def git_ls_remote_versions(url) -> list[VersionTuple]:
|
|||||||
try:
|
try:
|
||||||
version = Version(version_string)
|
version = Version(version_string)
|
||||||
if version.is_devrelease:
|
if version.is_devrelease:
|
||||||
log.info(f"Ignoring development release '{version}'")
|
log.info("Ignoring development release %r", str(version))
|
||||||
continue
|
continue
|
||||||
if version.is_prerelease:
|
if version.is_prerelease:
|
||||||
log.info(f"Ignoring pre-release '{version}'")
|
log.info("Ignoring pre-release %r", str(version))
|
||||||
continue
|
continue
|
||||||
versions.append(VersionTuple(version, version_string))
|
versions.append(VersionTuple(version, version_string))
|
||||||
except InvalidVersion:
|
except InvalidVersion:
|
||||||
log.warning(f"Ignoring ref '{ref}'")
|
log.warning("Ignoring ref %r", ref)
|
||||||
versions.sort(reverse=True)
|
versions.sort(reverse=True)
|
||||||
return versions
|
return versions
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
__version__ = "2.12.1"
|
__version__ = "2.12.3"
|
||||||
|
|||||||
+100
-92
@@ -7,6 +7,7 @@ import sys
|
|||||||
import tarfile
|
import tarfile
|
||||||
import textwrap
|
import textwrap
|
||||||
import typing
|
import typing
|
||||||
|
from collections.abc import Iterable, Sequence, Set
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from tempfile import mkdtemp
|
from tempfile import mkdtemp
|
||||||
|
|
||||||
@@ -15,10 +16,11 @@ import cibuildwheel.linux
|
|||||||
import cibuildwheel.macos
|
import cibuildwheel.macos
|
||||||
import cibuildwheel.util
|
import cibuildwheel.util
|
||||||
import cibuildwheel.windows
|
import cibuildwheel.windows
|
||||||
|
from cibuildwheel._compat.typing import Protocol, assert_never
|
||||||
from cibuildwheel.architecture import Architecture, allowed_architectures_check
|
from cibuildwheel.architecture import Architecture, allowed_architectures_check
|
||||||
from cibuildwheel.logger import log
|
from cibuildwheel.logger import log
|
||||||
from cibuildwheel.options import CommandLineArguments, Options, compute_options
|
from cibuildwheel.options import CommandLineArguments, Options, compute_options
|
||||||
from cibuildwheel.typing import PLATFORMS, PlatformName, assert_never
|
from cibuildwheel.typing import PLATFORMS, GenericPythonConfiguration, PlatformName
|
||||||
from cibuildwheel.util import (
|
from cibuildwheel.util import (
|
||||||
CIBW_CACHE_PATH,
|
CIBW_CACHE_PATH,
|
||||||
BuildSelector,
|
BuildSelector,
|
||||||
@@ -167,70 +169,102 @@ def main() -> None:
|
|||||||
log.warning(f"Can't delete temporary folder '{temp_dir}'")
|
log.warning(f"Can't delete temporary folder '{temp_dir}'")
|
||||||
|
|
||||||
|
|
||||||
def build_in_directory(args: CommandLineArguments) -> None:
|
def _compute_platform_only(only: str) -> PlatformName:
|
||||||
|
if "linux_" in only:
|
||||||
|
return "linux"
|
||||||
|
if "macosx_" in only:
|
||||||
|
return "macos"
|
||||||
|
if "win_" in only or "win32" in only:
|
||||||
|
return "windows"
|
||||||
|
print(
|
||||||
|
f"Invalid --only='{only}', must be a build selector with a known platform",
|
||||||
|
file=sys.stderr,
|
||||||
|
)
|
||||||
|
sys.exit(2)
|
||||||
|
|
||||||
|
|
||||||
|
def _compute_platform_ci() -> PlatformName:
|
||||||
|
if detect_ci_provider() is None:
|
||||||
|
print(
|
||||||
|
textwrap.dedent(
|
||||||
|
"""
|
||||||
|
cibuildwheel: Unable to detect platform. cibuildwheel should run on your CI server;
|
||||||
|
Travis CI, AppVeyor, Azure Pipelines, GitHub Actions, CircleCI, Gitlab, and Cirrus CI
|
||||||
|
are supported. You can run on your development machine or other CI providers
|
||||||
|
using the --platform argument. Check --help output for more information.
|
||||||
|
"""
|
||||||
|
),
|
||||||
|
file=sys.stderr,
|
||||||
|
)
|
||||||
|
sys.exit(2)
|
||||||
|
if sys.platform.startswith("linux"):
|
||||||
|
return "linux"
|
||||||
|
elif sys.platform == "darwin":
|
||||||
|
return "macos"
|
||||||
|
elif sys.platform == "win32":
|
||||||
|
return "windows"
|
||||||
|
else:
|
||||||
|
print(
|
||||||
|
'cibuildwheel: Unable to detect platform from "sys.platform" in a CI environment. You can run '
|
||||||
|
"cibuildwheel using the --platform argument. Check --help output for more information.",
|
||||||
|
file=sys.stderr,
|
||||||
|
)
|
||||||
|
sys.exit(2)
|
||||||
|
|
||||||
|
|
||||||
|
def _compute_platform(args: CommandLineArguments) -> PlatformName:
|
||||||
platform_option_value = args.platform or os.environ.get("CIBW_PLATFORM", "auto")
|
platform_option_value = args.platform or os.environ.get("CIBW_PLATFORM", "auto")
|
||||||
platform: PlatformName
|
|
||||||
|
if args.only and args.platform is not None:
|
||||||
|
print(
|
||||||
|
"--platform cannot be specified with --only, it is computed from --only",
|
||||||
|
file=sys.stderr,
|
||||||
|
)
|
||||||
|
sys.exit(2)
|
||||||
|
if args.only and args.archs is not None:
|
||||||
|
print(
|
||||||
|
"--arch cannot be specified with --only, it is computed from --only",
|
||||||
|
file=sys.stderr,
|
||||||
|
)
|
||||||
|
sys.exit(2)
|
||||||
|
|
||||||
|
if platform_option_value not in PLATFORMS | {"auto"}:
|
||||||
|
print(f"cibuildwheel: Unsupported platform: {platform_option_value}", file=sys.stderr)
|
||||||
|
sys.exit(2)
|
||||||
|
|
||||||
if args.only:
|
if args.only:
|
||||||
if "linux_" in args.only:
|
return _compute_platform_only(args.only)
|
||||||
platform = "linux"
|
|
||||||
elif "macosx_" in args.only:
|
|
||||||
platform = "macos"
|
|
||||||
elif "win_" in args.only or "win32" in args.only:
|
|
||||||
platform = "windows"
|
|
||||||
else:
|
|
||||||
print(
|
|
||||||
f"Invalid --only='{args.only}', must be a build selector with a known platform",
|
|
||||||
file=sys.stderr,
|
|
||||||
)
|
|
||||||
sys.exit(2)
|
|
||||||
if args.platform is not None:
|
|
||||||
print(
|
|
||||||
"--platform cannot be specified with --only, it is computed from --only",
|
|
||||||
file=sys.stderr,
|
|
||||||
)
|
|
||||||
sys.exit(2)
|
|
||||||
if args.archs is not None:
|
|
||||||
print(
|
|
||||||
"--arch cannot be specified with --only, it is computed from --only",
|
|
||||||
file=sys.stderr,
|
|
||||||
)
|
|
||||||
sys.exit(2)
|
|
||||||
elif platform_option_value != "auto":
|
elif platform_option_value != "auto":
|
||||||
if platform_option_value not in PLATFORMS:
|
return typing.cast(PlatformName, platform_option_value)
|
||||||
print(f"cibuildwheel: Unsupported platform: {platform_option_value}", file=sys.stderr)
|
|
||||||
sys.exit(2)
|
|
||||||
|
|
||||||
platform = typing.cast(PlatformName, platform_option_value)
|
return _compute_platform_ci()
|
||||||
else:
|
|
||||||
ci_provider = detect_ci_provider()
|
|
||||||
if ci_provider is None:
|
|
||||||
print(
|
|
||||||
textwrap.dedent(
|
|
||||||
"""
|
|
||||||
cibuildwheel: Unable to detect platform. cibuildwheel should run on your CI server;
|
|
||||||
Travis CI, AppVeyor, Azure Pipelines, GitHub Actions, CircleCI, Gitlab, and Cirrus CI
|
|
||||||
are supported. You can run on your development machine or other CI providers
|
|
||||||
using the --platform argument. Check --help output for more information.
|
|
||||||
"""
|
|
||||||
),
|
|
||||||
file=sys.stderr,
|
|
||||||
)
|
|
||||||
sys.exit(2)
|
|
||||||
if sys.platform.startswith("linux"):
|
|
||||||
platform = "linux"
|
|
||||||
elif sys.platform == "darwin":
|
|
||||||
platform = "macos"
|
|
||||||
elif sys.platform == "win32":
|
|
||||||
platform = "windows"
|
|
||||||
else:
|
|
||||||
print(
|
|
||||||
'cibuildwheel: Unable to detect platform from "sys.platform" in a CI environment. You can run '
|
|
||||||
"cibuildwheel using the --platform argument. Check --help output for more information.",
|
|
||||||
file=sys.stderr,
|
|
||||||
)
|
|
||||||
sys.exit(2)
|
|
||||||
|
|
||||||
|
|
||||||
|
class PlatformModule(Protocol):
|
||||||
|
# note that as per PEP544, the self argument is ignored when the protocol
|
||||||
|
# is applied to a module
|
||||||
|
def get_python_configurations(
|
||||||
|
self, build_selector: BuildSelector, architectures: Set[Architecture]
|
||||||
|
) -> Sequence[GenericPythonConfiguration]:
|
||||||
|
...
|
||||||
|
|
||||||
|
def build(self, options: Options, tmp_path: Path) -> None:
|
||||||
|
...
|
||||||
|
|
||||||
|
|
||||||
|
# pylint: disable-next=inconsistent-return-statements
|
||||||
|
def get_platform_module(platform: PlatformName) -> PlatformModule:
|
||||||
|
if platform == "linux":
|
||||||
|
return cibuildwheel.linux
|
||||||
|
if platform == "windows":
|
||||||
|
return cibuildwheel.windows
|
||||||
|
if platform == "macos":
|
||||||
|
return cibuildwheel.macos
|
||||||
|
assert_never(platform) # noqa: RET503
|
||||||
|
|
||||||
|
|
||||||
|
def build_in_directory(args: CommandLineArguments) -> None:
|
||||||
|
platform: PlatformName = _compute_platform(args)
|
||||||
options = compute_options(platform=platform, command_line_arguments=args, env=os.environ)
|
options = compute_options(platform=platform, command_line_arguments=args, env=os.environ)
|
||||||
|
|
||||||
package_dir = options.globals.package_dir
|
package_dir = options.globals.package_dir
|
||||||
@@ -242,8 +276,9 @@ def build_in_directory(args: CommandLineArguments) -> None:
|
|||||||
print(msg, file=sys.stderr)
|
print(msg, file=sys.stderr)
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
|
|
||||||
|
platform_module = get_platform_module(platform)
|
||||||
identifiers = get_build_identifiers(
|
identifiers = get_build_identifiers(
|
||||||
platform=platform,
|
platform_module=platform_module,
|
||||||
build_selector=options.globals.build_selector,
|
build_selector=options.globals.build_selector,
|
||||||
architectures=options.globals.architectures,
|
architectures=options.globals.architectures,
|
||||||
)
|
)
|
||||||
@@ -289,14 +324,7 @@ def build_in_directory(args: CommandLineArguments) -> None:
|
|||||||
with cibuildwheel.util.print_new_wheels(
|
with cibuildwheel.util.print_new_wheels(
|
||||||
"\n{n} wheels produced in {m:.0f} minutes:", output_dir
|
"\n{n} wheels produced in {m:.0f} minutes:", output_dir
|
||||||
):
|
):
|
||||||
if platform == "linux":
|
platform_module.build(options, tmp_path)
|
||||||
cibuildwheel.linux.build(options, tmp_path)
|
|
||||||
elif platform == "windows":
|
|
||||||
cibuildwheel.windows.build(options, tmp_path)
|
|
||||||
elif platform == "macos":
|
|
||||||
cibuildwheel.macos.build(options, tmp_path)
|
|
||||||
else:
|
|
||||||
assert_never(platform)
|
|
||||||
finally:
|
finally:
|
||||||
# avoid https://github.com/python/cpython/issues/86962 by performing
|
# avoid https://github.com/python/cpython/issues/86962 by performing
|
||||||
# cleanup manually
|
# cleanup manually
|
||||||
@@ -305,7 +333,7 @@ def build_in_directory(args: CommandLineArguments) -> None:
|
|||||||
log.warning(f"Can't delete temporary folder '{tmp_path}'")
|
log.warning(f"Can't delete temporary folder '{tmp_path}'")
|
||||||
|
|
||||||
|
|
||||||
def print_preamble(platform: str, options: Options, identifiers: list[str]) -> None:
|
def print_preamble(platform: str, options: Options, identifiers: Sequence[str]) -> None:
|
||||||
print(
|
print(
|
||||||
textwrap.dedent(
|
textwrap.dedent(
|
||||||
"""
|
"""
|
||||||
@@ -339,33 +367,13 @@ def print_preamble(platform: str, options: Options, identifiers: list[str]) -> N
|
|||||||
|
|
||||||
|
|
||||||
def get_build_identifiers(
|
def get_build_identifiers(
|
||||||
platform: PlatformName, build_selector: BuildSelector, architectures: set[Architecture]
|
platform_module: PlatformModule, build_selector: BuildSelector, architectures: Set[Architecture]
|
||||||
) -> list[str]:
|
) -> list[str]:
|
||||||
python_configurations: (
|
python_configurations = platform_module.get_python_configurations(build_selector, architectures)
|
||||||
list[cibuildwheel.linux.PythonConfiguration]
|
|
||||||
| list[cibuildwheel.windows.PythonConfiguration]
|
|
||||||
| list[cibuildwheel.macos.PythonConfiguration]
|
|
||||||
)
|
|
||||||
|
|
||||||
if platform == "linux":
|
|
||||||
python_configurations = cibuildwheel.linux.get_python_configurations(
|
|
||||||
build_selector, architectures
|
|
||||||
)
|
|
||||||
elif platform == "windows":
|
|
||||||
python_configurations = cibuildwheel.windows.get_python_configurations(
|
|
||||||
build_selector, architectures
|
|
||||||
)
|
|
||||||
elif platform == "macos":
|
|
||||||
python_configurations = cibuildwheel.macos.get_python_configurations(
|
|
||||||
build_selector, architectures
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
assert_never(platform)
|
|
||||||
|
|
||||||
return [config.identifier for config in python_configurations]
|
return [config.identifier for config in python_configurations]
|
||||||
|
|
||||||
|
|
||||||
def detect_warnings(*, options: Options, identifiers: list[str]) -> list[str]:
|
def detect_warnings(*, options: Options, identifiers: Iterable[str]) -> list[str]:
|
||||||
warnings = []
|
warnings = []
|
||||||
|
|
||||||
# warn about deprecated {python} and {pip}
|
# warn about deprecated {python} and {pip}
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
from __future__ import annotations
|
||||||
+5
-3
@@ -1,7 +1,9 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import typing
|
||||||
|
from collections.abc import Callable
|
||||||
from threading import RLock
|
from threading import RLock
|
||||||
from typing import Any, Callable, Generic, TypeVar, overload
|
from typing import Any, Generic, TypeVar
|
||||||
|
|
||||||
__all__ = ["cached_property"]
|
__all__ = ["cached_property"]
|
||||||
|
|
||||||
@@ -24,11 +26,11 @@ class cached_property(Generic[_T]):
|
|||||||
msg = f"Cannot assign the same cached_property to two different names ({self.attrname!r} and {name!r})."
|
msg = f"Cannot assign the same cached_property to two different names ({self.attrname!r} and {name!r})."
|
||||||
raise TypeError(msg)
|
raise TypeError(msg)
|
||||||
|
|
||||||
@overload
|
@typing.overload
|
||||||
def __get__(self, instance: None, owner: type[Any] | None = ...) -> cached_property[_T]:
|
def __get__(self, instance: None, owner: type[Any] | None = ...) -> cached_property[_T]:
|
||||||
...
|
...
|
||||||
|
|
||||||
@overload
|
@typing.overload
|
||||||
def __get__(self, instance: object, owner: type[Any] | None = ...) -> _T:
|
def __get__(self, instance: object, owner: type[Any] | None = ...) -> _T:
|
||||||
...
|
...
|
||||||
|
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
if sys.version_info >= (3, 8):
|
||||||
|
from functools import cached_property
|
||||||
|
else:
|
||||||
|
from ._functools_cached_property_38 import cached_property
|
||||||
|
|
||||||
|
__all__ = ("cached_property",)
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
if sys.version_info >= (3, 11):
|
||||||
|
from tomllib import load # noqa: TID251
|
||||||
|
else:
|
||||||
|
from tomli import load # noqa: TID251
|
||||||
|
|
||||||
|
__all__ = ("load",)
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
if sys.version_info < (3, 8):
|
||||||
|
from typing_extensions import Final, Literal, OrderedDict, Protocol, TypedDict
|
||||||
|
else:
|
||||||
|
from typing import Final, Literal, OrderedDict, Protocol, TypedDict # noqa: TID251
|
||||||
|
|
||||||
|
if sys.version_info < (3, 11):
|
||||||
|
from typing_extensions import NotRequired, assert_never
|
||||||
|
else:
|
||||||
|
from typing import NotRequired, assert_never # noqa: TID251
|
||||||
|
|
||||||
|
__all__ = (
|
||||||
|
"Final",
|
||||||
|
"Literal",
|
||||||
|
"Protocol",
|
||||||
|
"Protocol",
|
||||||
|
"TypedDict",
|
||||||
|
"OrderedDict",
|
||||||
|
"assert_never",
|
||||||
|
"NotRequired",
|
||||||
|
)
|
||||||
@@ -4,9 +4,11 @@ import functools
|
|||||||
import platform as platform_module
|
import platform as platform_module
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
|
from collections.abc import Set
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
|
||||||
from .typing import Final, Literal, PlatformName, assert_never
|
from ._compat.typing import Final, Literal, assert_never
|
||||||
|
from .typing import PlatformName
|
||||||
|
|
||||||
PRETTY_NAMES: Final = {"linux": "Linux", "macos": "macOS", "windows": "Windows"}
|
PRETTY_NAMES: Final = {"linux": "Linux", "macos": "macOS", "windows": "Windows"}
|
||||||
|
|
||||||
@@ -132,7 +134,7 @@ class Architecture(Enum):
|
|||||||
|
|
||||||
def allowed_architectures_check(
|
def allowed_architectures_check(
|
||||||
platform: PlatformName,
|
platform: PlatformName,
|
||||||
architectures: set[Architecture],
|
architectures: Set[Architecture],
|
||||||
) -> None:
|
) -> None:
|
||||||
allowed_architectures = Architecture.all_archs(platform)
|
allowed_architectures = Architecture.all_archs(platform)
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import subprocess
|
import subprocess
|
||||||
|
from collections.abc import Iterable, Mapping, Sequence
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Callable, Dict, List, Sequence
|
from typing import Callable, Dict, List # noqa: TID251
|
||||||
|
|
||||||
import bashlex
|
import bashlex
|
||||||
|
|
||||||
@@ -10,7 +11,7 @@ import bashlex
|
|||||||
EnvironmentExecutor = Callable[[List[str], Dict[str, str]], str]
|
EnvironmentExecutor = Callable[[List[str], Dict[str, str]], str]
|
||||||
|
|
||||||
|
|
||||||
def local_environment_executor(command: list[str], env: dict[str, str]) -> str:
|
def local_environment_executor(command: Sequence[str], env: Mapping[str, str]) -> str:
|
||||||
return subprocess.run(command, env=env, text=True, stdout=subprocess.PIPE, check=True).stdout
|
return subprocess.run(command, env=env, text=True, stdout=subprocess.PIPE, check=True).stdout
|
||||||
|
|
||||||
|
|
||||||
@@ -22,7 +23,7 @@ class NodeExecutionContext:
|
|||||||
|
|
||||||
|
|
||||||
def evaluate(
|
def evaluate(
|
||||||
value: str, environment: dict[str, str], executor: EnvironmentExecutor | None = None
|
value: str, environment: Mapping[str, str], executor: EnvironmentExecutor | None = None
|
||||||
) -> str:
|
) -> str:
|
||||||
if not value:
|
if not value:
|
||||||
# empty string evaluates to empty string
|
# empty string evaluates to empty string
|
||||||
@@ -40,7 +41,9 @@ def evaluate(
|
|||||||
return evaluate_node(
|
return evaluate_node(
|
||||||
value_word_node,
|
value_word_node,
|
||||||
context=NodeExecutionContext(
|
context=NodeExecutionContext(
|
||||||
environment=environment, input=value, executor=executor or local_environment_executor
|
environment=dict(environment),
|
||||||
|
input=value,
|
||||||
|
executor=executor or local_environment_executor,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -105,7 +108,7 @@ def evaluate_nodes_as_compound_command(
|
|||||||
|
|
||||||
|
|
||||||
def evaluate_nodes_as_simple_command(
|
def evaluate_nodes_as_simple_command(
|
||||||
nodes: list[bashlex.ast.node], context: NodeExecutionContext
|
nodes: Iterable[bashlex.ast.node], context: NodeExecutionContext
|
||||||
) -> str:
|
) -> str:
|
||||||
command = [evaluate_node(part, context=context) for part in nodes]
|
command = [evaluate_node(part, context=context) for part in nodes]
|
||||||
return context.executor(command, context.environment)
|
return context.executor(command, context.environment)
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import dataclasses
|
import dataclasses
|
||||||
from typing import Any, Mapping, Sequence
|
from collections.abc import Mapping, Sequence
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
import bashlex
|
import bashlex
|
||||||
import bashlex.errors
|
import bashlex.errors
|
||||||
|
|
||||||
from cibuildwheel.typing import Protocol
|
|
||||||
|
|
||||||
from . import bashlex_eval
|
from . import bashlex_eval
|
||||||
|
from ._compat.typing import Protocol
|
||||||
|
|
||||||
|
|
||||||
class EnvironmentParseError(Exception):
|
class EnvironmentParseError(Exception):
|
||||||
@@ -54,7 +54,7 @@ class EnvironmentAssignment(Protocol):
|
|||||||
def evaluated_value(
|
def evaluated_value(
|
||||||
self,
|
self,
|
||||||
*,
|
*,
|
||||||
environment: dict[str, str],
|
environment: Mapping[str, str],
|
||||||
executor: bashlex_eval.EnvironmentExecutor | None = None,
|
executor: bashlex_eval.EnvironmentExecutor | None = None,
|
||||||
) -> str:
|
) -> str:
|
||||||
"""Returns the value of this assignment, as evaluated in the environment"""
|
"""Returns the value of this assignment, as evaluated in the environment"""
|
||||||
@@ -91,7 +91,7 @@ class EnvironmentAssignmentBash:
|
|||||||
|
|
||||||
def evaluated_value(
|
def evaluated_value(
|
||||||
self,
|
self,
|
||||||
environment: dict[str, str],
|
environment: Mapping[str, str],
|
||||||
executor: bashlex_eval.EnvironmentExecutor | None = None,
|
executor: bashlex_eval.EnvironmentExecutor | None = None,
|
||||||
) -> str:
|
) -> str:
|
||||||
return bashlex_eval.evaluate(self.value, environment=environment, executor=executor)
|
return bashlex_eval.evaluate(self.value, environment=environment, executor=executor)
|
||||||
|
|||||||
@@ -4,9 +4,10 @@ These are utilities for the `/bin` scripts, not for the `cibuildwheel` program.
|
|||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from collections.abc import Mapping, Sequence
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
|
|
||||||
from .typing import Protocol
|
from ._compat.typing import Protocol
|
||||||
|
|
||||||
__all__ = ("Printable", "dump_python_configurations")
|
__all__ = ("Printable", "dump_python_configurations")
|
||||||
|
|
||||||
@@ -16,7 +17,9 @@ class Printable(Protocol):
|
|||||||
...
|
...
|
||||||
|
|
||||||
|
|
||||||
def dump_python_configurations(inp: dict[str, dict[str, list[dict[str, Printable]]]]) -> str:
|
def dump_python_configurations(
|
||||||
|
inp: Mapping[str, Mapping[str, Sequence[Mapping[str, Printable]]]]
|
||||||
|
) -> str:
|
||||||
output = StringIO()
|
output = StringIO()
|
||||||
for header, values in inp.items():
|
for header, values in inp.items():
|
||||||
output.write(f"[{header}]\n")
|
output.write(f"[{header}]\n")
|
||||||
|
|||||||
+18
-16
@@ -3,19 +3,22 @@ from __future__ import annotations
|
|||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import textwrap
|
import textwrap
|
||||||
|
from collections.abc import Iterable, Iterator, Sequence, Set
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from pathlib import Path, PurePath, PurePosixPath
|
from pathlib import Path, PurePath, PurePosixPath
|
||||||
from typing import Iterator, Tuple
|
from typing import Tuple
|
||||||
|
|
||||||
|
from ._compat.typing import OrderedDict, assert_never
|
||||||
from .architecture import Architecture
|
from .architecture import Architecture
|
||||||
from .logger import log
|
from .logger import log
|
||||||
from .oci_container import OCIContainer
|
from .oci_container import OCIContainer
|
||||||
from .options import Options
|
from .options import Options
|
||||||
from .typing import OrderedDict, PathOrStr, assert_never
|
from .typing import PathOrStr
|
||||||
from .util import (
|
from .util import (
|
||||||
AlreadyBuiltWheelError,
|
AlreadyBuiltWheelError,
|
||||||
BuildSelector,
|
BuildSelector,
|
||||||
NonPlatformWheelError,
|
NonPlatformWheelError,
|
||||||
|
build_frontend_or_default,
|
||||||
find_compatible_wheel,
|
find_compatible_wheel,
|
||||||
get_build_verbosity_extra_flags,
|
get_build_verbosity_extra_flags,
|
||||||
prepare_command,
|
prepare_command,
|
||||||
@@ -46,7 +49,7 @@ class BuildStep:
|
|||||||
|
|
||||||
def get_python_configurations(
|
def get_python_configurations(
|
||||||
build_selector: BuildSelector,
|
build_selector: BuildSelector,
|
||||||
architectures: set[Architecture],
|
architectures: Set[Architecture],
|
||||||
) -> list[PythonConfiguration]:
|
) -> list[PythonConfiguration]:
|
||||||
full_python_configs = read_python_configs("linux")
|
full_python_configs = read_python_configs("linux")
|
||||||
|
|
||||||
@@ -111,7 +114,7 @@ def get_build_steps(
|
|||||||
|
|
||||||
|
|
||||||
def check_all_python_exist(
|
def check_all_python_exist(
|
||||||
*, platform_configs: list[PythonConfiguration], container: OCIContainer
|
*, platform_configs: Iterable[PythonConfiguration], container: OCIContainer
|
||||||
) -> None:
|
) -> None:
|
||||||
exist = True
|
exist = True
|
||||||
messages = []
|
messages = []
|
||||||
@@ -136,7 +139,7 @@ def check_all_python_exist(
|
|||||||
def build_in_container(
|
def build_in_container(
|
||||||
*,
|
*,
|
||||||
options: Options,
|
options: Options,
|
||||||
platform_configs: list[PythonConfiguration],
|
platform_configs: Sequence[PythonConfiguration],
|
||||||
container: OCIContainer,
|
container: OCIContainer,
|
||||||
container_project_path: PurePath,
|
container_project_path: PurePath,
|
||||||
container_package_dir: PurePath,
|
container_package_dir: PurePath,
|
||||||
@@ -174,6 +177,7 @@ def build_in_container(
|
|||||||
for config in platform_configs:
|
for config in platform_configs:
|
||||||
log.build_start(config.identifier)
|
log.build_start(config.identifier)
|
||||||
build_options = options.build_options(config.identifier)
|
build_options = options.build_options(config.identifier)
|
||||||
|
build_frontend = build_frontend_or_default(build_options.build_frontend)
|
||||||
|
|
||||||
dependency_constraint_flags: list[PathOrStr] = []
|
dependency_constraint_flags: list[PathOrStr] = []
|
||||||
|
|
||||||
@@ -239,13 +243,10 @@ def build_in_container(
|
|||||||
container.call(["rm", "-rf", built_wheel_dir])
|
container.call(["rm", "-rf", built_wheel_dir])
|
||||||
container.call(["mkdir", "-p", built_wheel_dir])
|
container.call(["mkdir", "-p", built_wheel_dir])
|
||||||
|
|
||||||
verbosity_flags = get_build_verbosity_extra_flags(build_options.build_verbosity)
|
extra_flags = split_config_settings(build_options.config_settings, build_frontend)
|
||||||
extra_flags = split_config_settings(
|
|
||||||
build_options.config_settings, build_options.build_frontend
|
|
||||||
)
|
|
||||||
|
|
||||||
if build_options.build_frontend == "pip":
|
if build_frontend == "pip":
|
||||||
extra_flags += verbosity_flags
|
extra_flags += get_build_verbosity_extra_flags(build_options.build_verbosity)
|
||||||
container.call(
|
container.call(
|
||||||
[
|
[
|
||||||
"python",
|
"python",
|
||||||
@@ -259,9 +260,10 @@ def build_in_container(
|
|||||||
],
|
],
|
||||||
env=env,
|
env=env,
|
||||||
)
|
)
|
||||||
elif build_options.build_frontend == "build":
|
elif build_frontend == "build":
|
||||||
verbosity_setting = " ".join(verbosity_flags)
|
if not 0 <= build_options.build_verbosity < 2:
|
||||||
extra_flags += (f"--config-setting={verbosity_setting}",)
|
msg = f"build_verbosity {build_options.build_verbosity} is not supported for build frontend. Ignoring."
|
||||||
|
log.warning(msg)
|
||||||
container.call(
|
container.call(
|
||||||
[
|
[
|
||||||
"python",
|
"python",
|
||||||
@@ -275,7 +277,7 @@ def build_in_container(
|
|||||||
env=env,
|
env=env,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
assert_never(build_options.build_frontend)
|
assert_never(build_frontend)
|
||||||
|
|
||||||
built_wheel = container.glob(built_wheel_dir, "*.whl")[0]
|
built_wheel = container.glob(built_wheel_dir, "*.whl")[0]
|
||||||
|
|
||||||
@@ -437,7 +439,7 @@ def build(options: Options, tmp_path: Path) -> None: # noqa: ARG001
|
|||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
def _matches_prepared_command(error_cmd: list[str], command_template: str) -> bool:
|
def _matches_prepared_command(error_cmd: Sequence[str], command_template: str) -> bool:
|
||||||
if len(error_cmd) < 3 or error_cmd[0:2] != ["sh", "-c"]:
|
if len(error_cmd) < 3 or error_cmd[0:2] != ["sh", "-c"]:
|
||||||
return False
|
return False
|
||||||
command_prefix = command_template.split("{", maxsplit=1)[0].strip()
|
command_prefix = command_template.split("{", maxsplit=1)[0].strip()
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ import sys
|
|||||||
import time
|
import time
|
||||||
from typing import IO, AnyStr
|
from typing import IO, AnyStr
|
||||||
|
|
||||||
from cibuildwheel.typing import Final
|
from ._compat.typing import Final
|
||||||
from cibuildwheel.util import CIProvider, detect_ci_provider
|
from .util import CIProvider, detect_ci_provider
|
||||||
|
|
||||||
DEFAULT_FOLD_PATTERN: Final = ("{name}", "")
|
DEFAULT_FOLD_PATTERN: Final = ("{name}", "")
|
||||||
FOLD_PATTERNS: Final = {
|
FOLD_PATTERNS: Final = {
|
||||||
|
|||||||
+18
-15
@@ -8,23 +8,27 @@ import re
|
|||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
|
import typing
|
||||||
|
from collections.abc import Sequence, Set
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Sequence, Tuple, cast
|
from typing import Tuple
|
||||||
|
|
||||||
from filelock import FileLock
|
from filelock import FileLock
|
||||||
|
|
||||||
|
from ._compat.typing import Literal, assert_never
|
||||||
from .architecture import Architecture
|
from .architecture import Architecture
|
||||||
from .environment import ParsedEnvironment
|
from .environment import ParsedEnvironment
|
||||||
from .logger import log
|
from .logger import log
|
||||||
from .options import Options
|
from .options import Options
|
||||||
from .typing import Literal, PathOrStr, assert_never
|
from .typing import PathOrStr
|
||||||
from .util import (
|
from .util import (
|
||||||
CIBW_CACHE_PATH,
|
CIBW_CACHE_PATH,
|
||||||
AlreadyBuiltWheelError,
|
AlreadyBuiltWheelError,
|
||||||
BuildFrontend,
|
BuildFrontend,
|
||||||
BuildSelector,
|
BuildSelector,
|
||||||
NonPlatformWheelError,
|
NonPlatformWheelError,
|
||||||
|
build_frontend_or_default,
|
||||||
call,
|
call,
|
||||||
detect_ci_provider,
|
detect_ci_provider,
|
||||||
download,
|
download,
|
||||||
@@ -53,7 +57,7 @@ def get_macos_version() -> tuple[int, int]:
|
|||||||
"""
|
"""
|
||||||
version_str, _, _ = platform.mac_ver()
|
version_str, _, _ = platform.mac_ver()
|
||||||
version = tuple(map(int, version_str.split(".")[:2]))
|
version = tuple(map(int, version_str.split(".")[:2]))
|
||||||
return cast(Tuple[int, int], version)
|
return typing.cast(Tuple[int, int], version)
|
||||||
|
|
||||||
|
|
||||||
def get_macos_sdks() -> list[str]:
|
def get_macos_sdks() -> list[str]:
|
||||||
@@ -69,7 +73,7 @@ class PythonConfiguration:
|
|||||||
|
|
||||||
|
|
||||||
def get_python_configurations(
|
def get_python_configurations(
|
||||||
build_selector: BuildSelector, architectures: set[Architecture]
|
build_selector: BuildSelector, architectures: Set[Architecture]
|
||||||
) -> list[PythonConfiguration]:
|
) -> list[PythonConfiguration]:
|
||||||
full_python_configs = read_python_configs("macos")
|
full_python_configs = read_python_configs("macos")
|
||||||
|
|
||||||
@@ -330,6 +334,7 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
|
|
||||||
for config in python_configurations:
|
for config in python_configurations:
|
||||||
build_options = options.build_options(config.identifier)
|
build_options = options.build_options(config.identifier)
|
||||||
|
build_frontend = build_frontend_or_default(build_options.build_frontend)
|
||||||
log.build_start(config.identifier)
|
log.build_start(config.identifier)
|
||||||
|
|
||||||
identifier_tmp_dir = tmp_path / config.identifier
|
identifier_tmp_dir = tmp_path / config.identifier
|
||||||
@@ -352,7 +357,7 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
config,
|
config,
|
||||||
dependency_constraint_flags,
|
dependency_constraint_flags,
|
||||||
build_options.environment,
|
build_options.environment,
|
||||||
build_options.build_frontend,
|
build_frontend,
|
||||||
)
|
)
|
||||||
|
|
||||||
compatible_wheel = find_compatible_wheel(built_wheels, config.identifier)
|
compatible_wheel = find_compatible_wheel(built_wheels, config.identifier)
|
||||||
@@ -373,13 +378,10 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
log.step("Building wheel...")
|
log.step("Building wheel...")
|
||||||
built_wheel_dir.mkdir()
|
built_wheel_dir.mkdir()
|
||||||
|
|
||||||
verbosity_flags = get_build_verbosity_extra_flags(build_options.build_verbosity)
|
extra_flags = split_config_settings(build_options.config_settings, build_frontend)
|
||||||
extra_flags = split_config_settings(
|
|
||||||
build_options.config_settings, build_options.build_frontend
|
|
||||||
)
|
|
||||||
|
|
||||||
if build_options.build_frontend == "pip":
|
if build_frontend == "pip":
|
||||||
extra_flags += verbosity_flags
|
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
|
# Path.resolve() is needed. Without it pip wheel may try to fetch package from pypi.org
|
||||||
# see https://github.com/pypa/cibuildwheel/pull/369
|
# see https://github.com/pypa/cibuildwheel/pull/369
|
||||||
call(
|
call(
|
||||||
@@ -393,9 +395,10 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
*extra_flags,
|
*extra_flags,
|
||||||
env=env,
|
env=env,
|
||||||
)
|
)
|
||||||
elif build_options.build_frontend == "build":
|
elif build_frontend == "build":
|
||||||
verbosity_setting = " ".join(verbosity_flags)
|
if not 0 <= build_options.build_verbosity < 2:
|
||||||
extra_flags += (f"--config-setting={verbosity_setting}",)
|
msg = f"build_verbosity {build_options.build_verbosity} is not supported for build frontend. Ignoring."
|
||||||
|
log.warning(msg)
|
||||||
build_env = env.copy()
|
build_env = env.copy()
|
||||||
if build_options.dependency_constraints:
|
if build_options.dependency_constraints:
|
||||||
constraint_path = (
|
constraint_path = (
|
||||||
@@ -416,7 +419,7 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
env=build_env,
|
env=build_env,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
assert_never(build_options.build_frontend)
|
assert_never(build_frontend)
|
||||||
|
|
||||||
built_wheel = next(built_wheel_dir.glob("*.whl"))
|
built_wheel = next(built_wheel_dir.glob("*.whl"))
|
||||||
|
|
||||||
|
|||||||
@@ -8,14 +8,16 @@ import shlex
|
|||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
|
import typing
|
||||||
import uuid
|
import uuid
|
||||||
|
from collections.abc import Mapping, Sequence
|
||||||
from pathlib import Path, PurePath, PurePosixPath
|
from pathlib import Path, PurePath, PurePosixPath
|
||||||
from types import TracebackType
|
from types import TracebackType
|
||||||
from typing import IO, Dict, Sequence, cast
|
from typing import IO, Dict
|
||||||
|
|
||||||
from cibuildwheel.util import CIProvider, detect_ci_provider
|
from ._compat.typing import Literal
|
||||||
|
from .typing import PathOrStr, PopenBytes
|
||||||
from .typing import Literal, PathOrStr, PopenBytes
|
from .util import CIProvider, detect_ci_provider
|
||||||
|
|
||||||
ContainerEngine = Literal["docker", "podman"]
|
ContainerEngine = Literal["docker", "podman"]
|
||||||
|
|
||||||
@@ -166,6 +168,7 @@ class OCIContainer:
|
|||||||
cwd=from_path,
|
cwd=from_path,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
|
exec_process: subprocess.Popen[bytes]
|
||||||
with subprocess.Popen(
|
with subprocess.Popen(
|
||||||
[
|
[
|
||||||
self.engine,
|
self.engine,
|
||||||
@@ -178,10 +181,10 @@ class OCIContainer:
|
|||||||
],
|
],
|
||||||
stdin=subprocess.PIPE,
|
stdin=subprocess.PIPE,
|
||||||
) as exec_process:
|
) as exec_process:
|
||||||
exec_process.stdin = cast(IO[bytes], exec_process.stdin)
|
assert exec_process.stdin
|
||||||
|
|
||||||
with open(from_path, "rb") as from_file:
|
with open(from_path, "rb") as from_file:
|
||||||
shutil.copyfileobj(from_file, exec_process.stdin)
|
# Bug in mypy, https://github.com/python/mypy/issues/15031
|
||||||
|
shutil.copyfileobj(from_file, exec_process.stdin) # type: ignore[misc]
|
||||||
|
|
||||||
exec_process.stdin.close()
|
exec_process.stdin.close()
|
||||||
exec_process.wait()
|
exec_process.wait()
|
||||||
@@ -238,7 +241,7 @@ class OCIContainer:
|
|||||||
def call(
|
def call(
|
||||||
self,
|
self,
|
||||||
args: Sequence[PathOrStr],
|
args: Sequence[PathOrStr],
|
||||||
env: dict[str, str] | None = None,
|
env: Mapping[str, str] | None = None,
|
||||||
capture_output: bool = False,
|
capture_output: bool = False,
|
||||||
cwd: PathOrStr | None = None,
|
cwd: PathOrStr | None = None,
|
||||||
) -> str:
|
) -> str:
|
||||||
@@ -328,9 +331,9 @@ class OCIContainer:
|
|||||||
capture_output=True,
|
capture_output=True,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
return cast(Dict[str, str], env)
|
return typing.cast(Dict[str, str], env)
|
||||||
|
|
||||||
def environment_executor(self, command: list[str], environment: dict[str, str]) -> str:
|
def environment_executor(self, command: Sequence[str], environment: dict[str, str]) -> str:
|
||||||
# used as an EnvironmentExecutor to evaluate commands and capture output
|
# used as an EnvironmentExecutor to evaluate commands and capture output
|
||||||
return self.call(command, env=environment, capture_output=True)
|
return self.call(command, env=environment, capture_output=True)
|
||||||
|
|
||||||
|
|||||||
+16
-15
@@ -10,22 +10,21 @@ import shlex
|
|||||||
import sys
|
import sys
|
||||||
import textwrap
|
import textwrap
|
||||||
import traceback
|
import traceback
|
||||||
|
import typing
|
||||||
|
from collections.abc import Callable, Generator, Iterable, Iterator, Mapping, Set
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Callable, Dict, Generator, Iterator, List, Mapping, Union, cast
|
from typing import Any, Dict, List, Union
|
||||||
|
|
||||||
if sys.version_info >= (3, 11):
|
|
||||||
import tomllib
|
|
||||||
else:
|
|
||||||
import tomli as tomllib
|
|
||||||
|
|
||||||
from packaging.specifiers import SpecifierSet
|
from packaging.specifiers import SpecifierSet
|
||||||
|
|
||||||
|
from ._compat import tomllib
|
||||||
|
from ._compat.typing import Literal, NotRequired, TypedDict
|
||||||
from .architecture import Architecture
|
from .architecture import Architecture
|
||||||
from .environment import EnvironmentParseError, ParsedEnvironment, parse_environment
|
from .environment import EnvironmentParseError, ParsedEnvironment, parse_environment
|
||||||
from .logger import log
|
from .logger import log
|
||||||
from .oci_container import ContainerEngine
|
from .oci_container import ContainerEngine
|
||||||
from .projectfiles import get_requires_python_str
|
from .projectfiles import get_requires_python_str
|
||||||
from .typing import PLATFORMS, Literal, NotRequired, PlatformName, TypedDict
|
from .typing import PLATFORMS, PlatformName
|
||||||
from .util import (
|
from .util import (
|
||||||
MANYLINUX_ARCHS,
|
MANYLINUX_ARCHS,
|
||||||
MUSLLINUX_ARCHS,
|
MUSLLINUX_ARCHS,
|
||||||
@@ -94,7 +93,7 @@ class BuildOptions:
|
|||||||
test_requires: list[str]
|
test_requires: list[str]
|
||||||
test_extras: str
|
test_extras: str
|
||||||
build_verbosity: int
|
build_verbosity: int
|
||||||
build_frontend: BuildFrontend
|
build_frontend: BuildFrontend | Literal["default"]
|
||||||
config_settings: str
|
config_settings: str
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@@ -161,7 +160,7 @@ def _dig_first(*pairs: tuple[Mapping[str, Setting], str], ignore_empty: bool = F
|
|||||||
if key in dict_like:
|
if key in dict_like:
|
||||||
value = dict_like[key]
|
value = dict_like[key]
|
||||||
|
|
||||||
if ignore_empty and value == "":
|
if ignore_empty and value == "": # noqa: PLC1901
|
||||||
continue
|
continue
|
||||||
|
|
||||||
return value
|
return value
|
||||||
@@ -193,7 +192,7 @@ class OptionsReader:
|
|||||||
*,
|
*,
|
||||||
platform: PlatformName,
|
platform: PlatformName,
|
||||||
env: Mapping[str, str],
|
env: Mapping[str, str],
|
||||||
disallow: dict[str, set[str]] | None = None,
|
disallow: Mapping[str, Set[str]] | None = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
self.platform = platform
|
self.platform = platform
|
||||||
self.env = env
|
self.env = env
|
||||||
@@ -462,7 +461,7 @@ class Options:
|
|||||||
print(msg, file=sys.stderr)
|
print(msg, file=sys.stderr)
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
|
|
||||||
container_engine = cast(ContainerEngine, container_engine_str)
|
container_engine = typing.cast(ContainerEngine, container_engine_str)
|
||||||
|
|
||||||
return GlobalOptions(
|
return GlobalOptions(
|
||||||
package_dir=package_dir,
|
package_dir=package_dir,
|
||||||
@@ -499,11 +498,13 @@ class Options:
|
|||||||
test_extras = self.reader.get("test-extras", sep=",")
|
test_extras = self.reader.get("test-extras", sep=",")
|
||||||
build_verbosity_str = self.reader.get("build-verbosity")
|
build_verbosity_str = self.reader.get("build-verbosity")
|
||||||
|
|
||||||
build_frontend: BuildFrontend
|
build_frontend: BuildFrontend | Literal["default"]
|
||||||
if build_frontend_str == "build":
|
if build_frontend_str == "build":
|
||||||
build_frontend = "build"
|
build_frontend = "build"
|
||||||
elif build_frontend_str == "pip":
|
elif build_frontend_str == "pip":
|
||||||
build_frontend = "pip"
|
build_frontend = "pip"
|
||||||
|
elif build_frontend_str == "default":
|
||||||
|
build_frontend = "default"
|
||||||
else:
|
else:
|
||||||
msg = f"cibuildwheel: Unrecognised build frontend {build_frontend_str!r}, only 'pip' and 'build' are supported"
|
msg = f"cibuildwheel: Unrecognised build frontend {build_frontend_str!r}, only 'pip' and 'build' are supported"
|
||||||
print(msg, file=sys.stderr)
|
print(msg, file=sys.stderr)
|
||||||
@@ -597,7 +598,7 @@ class Options:
|
|||||||
config_settings=config_settings,
|
config_settings=config_settings,
|
||||||
)
|
)
|
||||||
|
|
||||||
def check_for_invalid_configuration(self, identifiers: list[str]) -> None:
|
def check_for_invalid_configuration(self, identifiers: Iterable[str]) -> None:
|
||||||
if self.platform in {"macos", "windows"}:
|
if self.platform in {"macos", "windows"}:
|
||||||
before_all_values = {self.build_options(i).before_all for i in identifiers}
|
before_all_values = {self.build_options(i).before_all for i in identifiers}
|
||||||
|
|
||||||
@@ -629,7 +630,7 @@ class Options:
|
|||||||
read_config_file=False,
|
read_config_file=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
def summary(self, identifiers: list[str]) -> str:
|
def summary(self, identifiers: Iterable[str]) -> str:
|
||||||
lines = []
|
lines = []
|
||||||
global_option_names = sorted(f.name for f in dataclasses.fields(self.globals))
|
global_option_names = sorted(f.name for f in dataclasses.fields(self.globals))
|
||||||
|
|
||||||
@@ -667,7 +668,7 @@ class Options:
|
|||||||
option_name: str,
|
option_name: str,
|
||||||
option_value: Any,
|
option_value: Any,
|
||||||
default_value: Any,
|
default_value: Any,
|
||||||
overrides: dict[str, Any] | None = None,
|
overrides: Mapping[str, Any] | None = None,
|
||||||
) -> str:
|
) -> str:
|
||||||
"""
|
"""
|
||||||
Return a summary of the option value, including any overrides, with
|
Return a summary of the option value, including any overrides, with
|
||||||
|
|||||||
@@ -7,10 +7,7 @@ import sys
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
if sys.version_info >= (3, 11):
|
from ._compat import tomllib
|
||||||
import tomllib
|
|
||||||
else:
|
|
||||||
import tomli as tomllib
|
|
||||||
|
|
||||||
if sys.version_info < (3, 8):
|
if sys.version_info < (3, 8):
|
||||||
Constant = ast.Str
|
Constant = ast.Str
|
||||||
|
|||||||
@@ -81,12 +81,12 @@ python_configurations = [
|
|||||||
{ identifier = "cp39-macosx_x86_64", version = "3.9", url = "https://www.python.org/ftp/python/3.9.13/python-3.9.13-macos11.pkg" },
|
{ identifier = "cp39-macosx_x86_64", version = "3.9", url = "https://www.python.org/ftp/python/3.9.13/python-3.9.13-macos11.pkg" },
|
||||||
{ identifier = "cp39-macosx_arm64", version = "3.9", url = "https://www.python.org/ftp/python/3.9.13/python-3.9.13-macos11.pkg" },
|
{ identifier = "cp39-macosx_arm64", version = "3.9", url = "https://www.python.org/ftp/python/3.9.13/python-3.9.13-macos11.pkg" },
|
||||||
{ identifier = "cp39-macosx_universal2", version = "3.9", url = "https://www.python.org/ftp/python/3.9.13/python-3.9.13-macos11.pkg" },
|
{ identifier = "cp39-macosx_universal2", version = "3.9", url = "https://www.python.org/ftp/python/3.9.13/python-3.9.13-macos11.pkg" },
|
||||||
{ identifier = "cp310-macosx_x86_64", version = "3.10", url = "https://www.python.org/ftp/python/3.10.10/python-3.10.10-macos11.pkg" },
|
{ 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.10/python-3.10.10-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.10/python-3.10.10-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.2/python-3.11.2-macos11.pkg" },
|
{ identifier = "cp311-macosx_x86_64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.3/python-3.11.3-macos11.pkg" },
|
||||||
{ identifier = "cp311-macosx_arm64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg" },
|
{ identifier = "cp311-macosx_arm64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.3/python-3.11.3-macos11.pkg" },
|
||||||
{ identifier = "cp311-macosx_universal2", version = "3.11", url = "https://www.python.org/ftp/python/3.11.2/python-3.11.2-macos11.pkg" },
|
{ identifier = "cp311-macosx_universal2", version = "3.11", url = "https://www.python.org/ftp/python/3.11.3/python-3.11.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 = "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_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 = "pp38-macosx_arm64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_arm64.tar.bz2" },
|
||||||
@@ -104,13 +104,13 @@ python_configurations = [
|
|||||||
{ identifier = "cp38-win_amd64", version = "3.8.10", arch = "64" },
|
{ identifier = "cp38-win_amd64", version = "3.8.10", arch = "64" },
|
||||||
{ identifier = "cp39-win32", version = "3.9.13", arch = "32" },
|
{ identifier = "cp39-win32", version = "3.9.13", arch = "32" },
|
||||||
{ identifier = "cp39-win_amd64", version = "3.9.13", arch = "64" },
|
{ identifier = "cp39-win_amd64", version = "3.9.13", arch = "64" },
|
||||||
{ identifier = "cp310-win32", version = "3.10.10", arch = "32" },
|
{ identifier = "cp310-win32", version = "3.10.11", arch = "32" },
|
||||||
{ identifier = "cp310-win_amd64", version = "3.10.10", arch = "64" },
|
{ identifier = "cp310-win_amd64", version = "3.10.11", arch = "64" },
|
||||||
{ identifier = "cp311-win32", version = "3.11.2", arch = "32" },
|
{ identifier = "cp311-win32", version = "3.11.3", arch = "32" },
|
||||||
{ identifier = "cp311-win_amd64", version = "3.11.2", arch = "64" },
|
{ identifier = "cp311-win_amd64", version = "3.11.3", arch = "64" },
|
||||||
{ identifier = "cp39-win_arm64", version = "3.9.10", arch = "ARM64" },
|
{ identifier = "cp39-win_arm64", version = "3.9.10", arch = "ARM64" },
|
||||||
{ identifier = "cp310-win_arm64", version = "3.10.10", arch = "ARM64" },
|
{ identifier = "cp310-win_arm64", version = "3.10.11", arch = "ARM64" },
|
||||||
{ identifier = "cp311-win_arm64", version = "3.11.2", arch = "ARM64" },
|
{ identifier = "cp311-win_arm64", version = "3.11.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 = "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 = "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.11-win64.zip" },
|
{ identifier = "pp39-win_amd64", version = "3.9", arch = "64", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.11-win64.zip" },
|
||||||
|
|||||||
@@ -8,21 +8,21 @@ delocate==0.10.4
|
|||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
distlib==0.3.6
|
distlib==0.3.6
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
filelock==3.9.0
|
filelock==3.11.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
packaging==23.0
|
packaging==23.1
|
||||||
# via delocate
|
# via delocate
|
||||||
platformdirs==3.1.0
|
platformdirs==3.2.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
typing-extensions==4.5.0
|
typing-extensions==4.5.0
|
||||||
# via delocate
|
# via delocate
|
||||||
virtualenv==20.20.0
|
virtualenv==20.21.0
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
wheel==0.38.4
|
wheel==0.40.0
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
|
|
||||||
# The following packages are considered to be unsafe in a requirements file:
|
# The following packages are considered to be unsafe in a requirements file:
|
||||||
pip==23.0.1
|
pip==23.1
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
setuptools==67.5.0
|
setuptools==67.6.1
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
|
|||||||
@@ -8,21 +8,21 @@ delocate==0.10.4
|
|||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
distlib==0.3.6
|
distlib==0.3.6
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
filelock==3.9.0
|
filelock==3.11.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
packaging==23.0
|
packaging==23.1
|
||||||
# via delocate
|
# via delocate
|
||||||
platformdirs==3.1.0
|
platformdirs==3.2.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
typing-extensions==4.5.0
|
typing-extensions==4.5.0
|
||||||
# via delocate
|
# via delocate
|
||||||
virtualenv==20.20.0
|
virtualenv==20.21.0
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
wheel==0.38.4
|
wheel==0.40.0
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
|
|
||||||
# The following packages are considered to be unsafe in a requirements file:
|
# The following packages are considered to be unsafe in a requirements file:
|
||||||
pip==23.0.1
|
pip==23.1
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
setuptools==67.5.0
|
setuptools==67.6.1
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
|
|||||||
@@ -8,28 +8,28 @@ delocate==0.10.4
|
|||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
distlib==0.3.6
|
distlib==0.3.6
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
filelock==3.9.0
|
filelock==3.11.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
importlib-metadata==6.0.0
|
importlib-metadata==6.4.1
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
packaging==23.0
|
packaging==23.1
|
||||||
# via delocate
|
# via delocate
|
||||||
platformdirs==3.1.0
|
platformdirs==3.2.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
typing-extensions==4.5.0
|
typing-extensions==4.5.0
|
||||||
# via
|
# via
|
||||||
# delocate
|
# delocate
|
||||||
# importlib-metadata
|
# importlib-metadata
|
||||||
# platformdirs
|
# platformdirs
|
||||||
virtualenv==20.20.0
|
virtualenv==20.21.0
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
wheel==0.38.4
|
wheel==0.40.0
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
zipp==3.15.0
|
zipp==3.15.0
|
||||||
# via importlib-metadata
|
# via importlib-metadata
|
||||||
|
|
||||||
# The following packages are considered to be unsafe in a requirements file:
|
# The following packages are considered to be unsafe in a requirements file:
|
||||||
pip==23.0.1
|
pip==23.1
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
setuptools==67.5.0
|
setuptools==67.6.1
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
|
|||||||
@@ -8,21 +8,21 @@ delocate==0.10.4
|
|||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
distlib==0.3.6
|
distlib==0.3.6
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
filelock==3.9.0
|
filelock==3.11.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
packaging==23.0
|
packaging==23.1
|
||||||
# via delocate
|
# via delocate
|
||||||
platformdirs==3.1.0
|
platformdirs==3.2.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
typing-extensions==4.5.0
|
typing-extensions==4.5.0
|
||||||
# via delocate
|
# via delocate
|
||||||
virtualenv==20.20.0
|
virtualenv==20.21.0
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
wheel==0.38.4
|
wheel==0.40.0
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
|
|
||||||
# The following packages are considered to be unsafe in a requirements file:
|
# The following packages are considered to be unsafe in a requirements file:
|
||||||
pip==23.0.1
|
pip==23.1
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
setuptools==67.5.0
|
setuptools==67.6.1
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
|
|||||||
@@ -8,21 +8,21 @@ delocate==0.10.4
|
|||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
distlib==0.3.6
|
distlib==0.3.6
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
filelock==3.9.0
|
filelock==3.11.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
packaging==23.0
|
packaging==23.1
|
||||||
# via delocate
|
# via delocate
|
||||||
platformdirs==3.1.0
|
platformdirs==3.2.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
typing-extensions==4.5.0
|
typing-extensions==4.5.0
|
||||||
# via delocate
|
# via delocate
|
||||||
virtualenv==20.20.0
|
virtualenv==20.21.0
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
wheel==0.38.4
|
wheel==0.40.0
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
|
|
||||||
# The following packages are considered to be unsafe in a requirements file:
|
# The following packages are considered to be unsafe in a requirements file:
|
||||||
pip==23.0.1
|
pip==23.1
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
setuptools==67.5.0
|
setuptools==67.6.1
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
|
|||||||
@@ -8,21 +8,21 @@ delocate==0.10.4
|
|||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
distlib==0.3.6
|
distlib==0.3.6
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
filelock==3.9.0
|
filelock==3.11.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
packaging==23.0
|
packaging==23.1
|
||||||
# via delocate
|
# via delocate
|
||||||
platformdirs==3.1.0
|
platformdirs==3.2.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
typing-extensions==4.5.0
|
typing-extensions==4.5.0
|
||||||
# via delocate
|
# via delocate
|
||||||
virtualenv==20.20.0
|
virtualenv==20.21.0
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
wheel==0.38.4
|
wheel==0.40.0
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
|
|
||||||
# The following packages are considered to be unsafe in a requirements file:
|
# The following packages are considered to be unsafe in a requirements file:
|
||||||
pip==23.0.1
|
pip==23.1
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
setuptools==67.5.0
|
setuptools==67.6.1
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ skip = ""
|
|||||||
test-skip = ""
|
test-skip = ""
|
||||||
|
|
||||||
archs = ["auto"]
|
archs = ["auto"]
|
||||||
build-frontend = "pip"
|
build-frontend = "default"
|
||||||
config-settings = {}
|
config-settings = {}
|
||||||
dependency-versions = "pinned"
|
dependency-versions = "pinned"
|
||||||
environment = {}
|
environment = {}
|
||||||
|
|||||||
@@ -1,49 +1,49 @@
|
|||||||
[x86_64]
|
[x86_64]
|
||||||
manylinux1 = quay.io/pypa/manylinux1_x86_64:2023-02-26-4ed41b6
|
manylinux1 = quay.io/pypa/manylinux1_x86_64:2023-04-16-36ed6a7
|
||||||
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
|
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2023-03-05-271004f
|
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2023-04-16-157f52a
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463
|
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:2023-03-05-271004f
|
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2023-04-16-157f52a
|
||||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2023-03-05-271004f
|
musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2023-04-16-157f52a
|
||||||
|
|
||||||
[i686]
|
[i686]
|
||||||
manylinux1 = quay.io/pypa/manylinux1_i686:2023-02-26-4ed41b6
|
manylinux1 = quay.io/pypa/manylinux1_i686:2023-04-16-36ed6a7
|
||||||
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
|
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2023-03-05-271004f
|
manylinux2014 = quay.io/pypa/manylinux2014_i686:2023-04-16-157f52a
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463
|
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463
|
||||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2023-03-05-271004f
|
musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2023-04-16-157f52a
|
||||||
|
|
||||||
[pypy_x86_64]
|
[pypy_x86_64]
|
||||||
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
|
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2023-03-05-271004f
|
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2023-04-16-157f52a
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463
|
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:2023-03-05-271004f
|
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2023-04-16-157f52a
|
||||||
|
|
||||||
[pypy_i686]
|
[pypy_i686]
|
||||||
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
|
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2023-03-05-271004f
|
manylinux2014 = quay.io/pypa/manylinux2014_i686:2023-04-16-157f52a
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463
|
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463
|
||||||
|
|
||||||
[aarch64]
|
[aarch64]
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2023-03-05-271004f
|
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2023-04-16-157f52a
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463
|
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463
|
||||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2023-03-05-271004f
|
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2023-04-16-157f52a
|
||||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2023-03-05-271004f
|
musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2023-04-16-157f52a
|
||||||
|
|
||||||
[ppc64le]
|
[ppc64le]
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2023-03-05-271004f
|
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2023-04-16-157f52a
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463
|
manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463
|
||||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2023-03-05-271004f
|
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2023-04-16-157f52a
|
||||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2023-03-05-271004f
|
musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2023-04-16-157f52a
|
||||||
|
|
||||||
[s390x]
|
[s390x]
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2023-03-05-271004f
|
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2023-04-16-157f52a
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463
|
manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463
|
||||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2023-03-05-271004f
|
manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2023-04-16-157f52a
|
||||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2023-03-05-271004f
|
musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2023-04-16-157f52a
|
||||||
|
|
||||||
[pypy_aarch64]
|
[pypy_aarch64]
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2023-03-05-271004f
|
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2023-04-16-157f52a
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463
|
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463
|
||||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2023-03-05-271004f
|
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2023-04-16-157f52a
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
version = "20.20.0"
|
version = "20.21.0"
|
||||||
url = "https://github.com/pypa/get-virtualenv/blob/20.20.0/public/virtualenv.pyz?raw=true"
|
url = "https://github.com/pypa/get-virtualenv/blob/20.21.0/public/virtualenv.pyz?raw=true"
|
||||||
|
|||||||
+10
-20
@@ -2,37 +2,21 @@ from __future__ import annotations
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import typing
|
||||||
from typing import TYPE_CHECKING, Union
|
from typing import Union
|
||||||
|
|
||||||
if sys.version_info < (3, 8):
|
from ._compat.typing import Final, Literal, Protocol
|
||||||
from typing_extensions import Final, Literal, OrderedDict, Protocol, TypedDict
|
|
||||||
else:
|
|
||||||
from typing import Final, Literal, OrderedDict, Protocol, TypedDict
|
|
||||||
|
|
||||||
if sys.version_info < (3, 11):
|
|
||||||
from typing_extensions import NotRequired, assert_never
|
|
||||||
else:
|
|
||||||
from typing import NotRequired, assert_never
|
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
"Final",
|
|
||||||
"Literal",
|
|
||||||
"PLATFORMS",
|
"PLATFORMS",
|
||||||
"PathOrStr",
|
"PathOrStr",
|
||||||
"PlatformName",
|
"PlatformName",
|
||||||
"Protocol",
|
|
||||||
"PLATFORMS",
|
"PLATFORMS",
|
||||||
"PopenBytes",
|
"PopenBytes",
|
||||||
"Protocol",
|
|
||||||
"TypedDict",
|
|
||||||
"OrderedDict",
|
|
||||||
"assert_never",
|
|
||||||
"NotRequired",
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if typing.TYPE_CHECKING:
|
||||||
PopenBytes = subprocess.Popen[bytes]
|
PopenBytes = subprocess.Popen[bytes]
|
||||||
PathOrStr = Union[str, os.PathLike[str]]
|
PathOrStr = Union[str, os.PathLike[str]]
|
||||||
else:
|
else:
|
||||||
@@ -42,3 +26,9 @@ else:
|
|||||||
|
|
||||||
PlatformName = Literal["linux", "macos", "windows"]
|
PlatformName = Literal["linux", "macos", "windows"]
|
||||||
PLATFORMS: Final[set[PlatformName]] = {"linux", "macos", "windows"}
|
PLATFORMS: Final[set[PlatformName]] = {"linux", "macos", "windows"}
|
||||||
|
|
||||||
|
|
||||||
|
class GenericPythonConfiguration(Protocol):
|
||||||
|
@property
|
||||||
|
def identifier(self) -> str:
|
||||||
|
...
|
||||||
|
|||||||
+26
-32
@@ -11,32 +11,18 @@ import subprocess
|
|||||||
import sys
|
import sys
|
||||||
import textwrap
|
import textwrap
|
||||||
import time
|
import time
|
||||||
|
import typing
|
||||||
import urllib.request
|
import urllib.request
|
||||||
|
from collections.abc import Generator, Iterable, Mapping, Sequence
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from functools import lru_cache
|
from functools import lru_cache
|
||||||
from pathlib import Path, PurePath
|
from pathlib import Path, PurePath
|
||||||
from time import sleep
|
from time import sleep
|
||||||
from typing import (
|
from typing import Any, ClassVar, TextIO, TypeVar
|
||||||
Any,
|
|
||||||
ClassVar,
|
|
||||||
Generator,
|
|
||||||
Iterable,
|
|
||||||
Sequence,
|
|
||||||
TextIO,
|
|
||||||
TypeVar,
|
|
||||||
cast,
|
|
||||||
overload,
|
|
||||||
)
|
|
||||||
|
|
||||||
import bracex
|
import bracex
|
||||||
import certifi
|
import certifi
|
||||||
|
|
||||||
if sys.version_info >= (3, 11):
|
|
||||||
import tomllib
|
|
||||||
else:
|
|
||||||
import tomli as tomllib
|
|
||||||
|
|
||||||
from filelock import FileLock
|
from filelock import FileLock
|
||||||
from packaging.requirements import InvalidRequirement, Requirement
|
from packaging.requirements import InvalidRequirement, Requirement
|
||||||
from packaging.specifiers import SpecifierSet
|
from packaging.specifiers import SpecifierSet
|
||||||
@@ -44,7 +30,10 @@ from packaging.utils import parse_wheel_filename
|
|||||||
from packaging.version import Version
|
from packaging.version import Version
|
||||||
from platformdirs import user_cache_path
|
from platformdirs import user_cache_path
|
||||||
|
|
||||||
from cibuildwheel.typing import Final, Literal, PathOrStr, PlatformName
|
from ._compat import tomllib
|
||||||
|
from ._compat.functools import cached_property
|
||||||
|
from ._compat.typing import Final, Literal
|
||||||
|
from .typing import PathOrStr, PlatformName
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"resources_dir",
|
"resources_dir",
|
||||||
@@ -71,6 +60,15 @@ test_fail_cwd_file: Final[Path] = resources_dir / "testing_temp_dir_file.py"
|
|||||||
|
|
||||||
BuildFrontend = Literal["pip", "build"]
|
BuildFrontend = Literal["pip", "build"]
|
||||||
|
|
||||||
|
|
||||||
|
def build_frontend_or_default(
|
||||||
|
setting: BuildFrontend | Literal["default"], default: BuildFrontend = "pip"
|
||||||
|
) -> BuildFrontend:
|
||||||
|
if setting == "default":
|
||||||
|
return default
|
||||||
|
return setting
|
||||||
|
|
||||||
|
|
||||||
MANYLINUX_ARCHS: Final[tuple[str, ...]] = (
|
MANYLINUX_ARCHS: Final[tuple[str, ...]] = (
|
||||||
"x86_64",
|
"x86_64",
|
||||||
"i686",
|
"i686",
|
||||||
@@ -98,20 +96,20 @@ CIBW_CACHE_PATH: Final[Path] = Path(
|
|||||||
IS_WIN: Final[bool] = sys.platform.startswith("win")
|
IS_WIN: Final[bool] = sys.platform.startswith("win")
|
||||||
|
|
||||||
|
|
||||||
@overload
|
@typing.overload
|
||||||
def call(
|
def call(
|
||||||
*args: PathOrStr,
|
*args: PathOrStr,
|
||||||
env: dict[str, str] | None = None,
|
env: Mapping[str, str] | None = None,
|
||||||
cwd: PathOrStr | None = None,
|
cwd: PathOrStr | None = None,
|
||||||
capture_stdout: Literal[False] = ...,
|
capture_stdout: Literal[False] = ...,
|
||||||
) -> None:
|
) -> None:
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|
||||||
@overload
|
@typing.overload
|
||||||
def call(
|
def call(
|
||||||
*args: PathOrStr,
|
*args: PathOrStr,
|
||||||
env: dict[str, str] | None = None,
|
env: Mapping[str, str] | None = None,
|
||||||
cwd: PathOrStr | None = None,
|
cwd: PathOrStr | None = None,
|
||||||
capture_stdout: Literal[True],
|
capture_stdout: Literal[True],
|
||||||
) -> str:
|
) -> str:
|
||||||
@@ -120,7 +118,7 @@ def call(
|
|||||||
|
|
||||||
def call(
|
def call(
|
||||||
*args: PathOrStr,
|
*args: PathOrStr,
|
||||||
env: dict[str, str] | None = None,
|
env: Mapping[str, str] | None = None,
|
||||||
cwd: PathOrStr | None = None,
|
cwd: PathOrStr | None = None,
|
||||||
capture_stdout: bool = False,
|
capture_stdout: bool = False,
|
||||||
) -> str | None:
|
) -> str | None:
|
||||||
@@ -140,10 +138,12 @@ def call(
|
|||||||
result = subprocess.run(args_, check=True, shell=IS_WIN, env=env, cwd=cwd, **kwargs)
|
result = subprocess.run(args_, check=True, shell=IS_WIN, env=env, cwd=cwd, **kwargs)
|
||||||
if not capture_stdout:
|
if not capture_stdout:
|
||||||
return None
|
return None
|
||||||
return cast(str, result.stdout)
|
return typing.cast(str, result.stdout)
|
||||||
|
|
||||||
|
|
||||||
def shell(*commands: str, env: dict[str, str] | None = None, cwd: PathOrStr | None = None) -> None:
|
def shell(
|
||||||
|
*commands: str, env: Mapping[str, str] | None = None, cwd: PathOrStr | None = None
|
||||||
|
) -> None:
|
||||||
command = " ".join(commands)
|
command = " ".join(commands)
|
||||||
print(f"+ {command}")
|
print(f"+ {command}")
|
||||||
subprocess.run(command, env=env, cwd=cwd, shell=True, check=True)
|
subprocess.run(command, env=env, cwd=cwd, shell=True, check=True)
|
||||||
@@ -498,7 +498,7 @@ def print_new_wheels(msg: str, output_dir: Path) -> Generator[None, None, None]:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_pip_version(env: dict[str, str]) -> str:
|
def get_pip_version(env: Mapping[str, str]) -> str:
|
||||||
versions_output_text = call(
|
versions_output_text = call(
|
||||||
"python", "-m", "pip", "freeze", "--all", capture_stdout=True, env=env
|
"python", "-m", "pip", "freeze", "--all", capture_stdout=True, env=env
|
||||||
)
|
)
|
||||||
@@ -658,12 +658,6 @@ def find_compatible_wheel(wheels: Sequence[T], identifier: str) -> T | None:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
if sys.version_info >= (3, 8):
|
|
||||||
from functools import cached_property
|
|
||||||
else:
|
|
||||||
from .functools_cached_property_38 import cached_property
|
|
||||||
|
|
||||||
|
|
||||||
# Can be replaced by contextlib.chdir in Python 3.11
|
# Can be replaced by contextlib.chdir in Python 3.11
|
||||||
@contextlib.contextmanager
|
@contextlib.contextmanager
|
||||||
def chdir(new_path: Path | str) -> Generator[None, None, None]:
|
def chdir(new_path: Path | str) -> Generator[None, None, None]:
|
||||||
|
|||||||
+21
-16
@@ -6,26 +6,29 @@ import shutil
|
|||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import textwrap
|
import textwrap
|
||||||
|
from collections.abc import MutableMapping, Sequence, Set
|
||||||
|
from contextlib import suppress
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from functools import lru_cache
|
from functools import lru_cache
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Sequence
|
|
||||||
from zipfile import ZipFile
|
from zipfile import ZipFile
|
||||||
|
|
||||||
from filelock import FileLock
|
from filelock import FileLock
|
||||||
from packaging.version import Version
|
from packaging.version import Version
|
||||||
|
|
||||||
|
from ._compat.typing import assert_never
|
||||||
from .architecture import Architecture
|
from .architecture import Architecture
|
||||||
from .environment import ParsedEnvironment
|
from .environment import ParsedEnvironment
|
||||||
from .logger import log
|
from .logger import log
|
||||||
from .options import Options
|
from .options import Options
|
||||||
from .typing import PathOrStr, assert_never
|
from .typing import PathOrStr
|
||||||
from .util import (
|
from .util import (
|
||||||
CIBW_CACHE_PATH,
|
CIBW_CACHE_PATH,
|
||||||
AlreadyBuiltWheelError,
|
AlreadyBuiltWheelError,
|
||||||
BuildFrontend,
|
BuildFrontend,
|
||||||
BuildSelector,
|
BuildSelector,
|
||||||
NonPlatformWheelError,
|
NonPlatformWheelError,
|
||||||
|
build_frontend_or_default,
|
||||||
call,
|
call,
|
||||||
download,
|
download,
|
||||||
find_compatible_wheel,
|
find_compatible_wheel,
|
||||||
@@ -71,7 +74,7 @@ class PythonConfiguration:
|
|||||||
|
|
||||||
def get_python_configurations(
|
def get_python_configurations(
|
||||||
build_selector: BuildSelector,
|
build_selector: BuildSelector,
|
||||||
architectures: set[Architecture],
|
architectures: Set[Architecture],
|
||||||
) -> list[PythonConfiguration]:
|
) -> list[PythonConfiguration]:
|
||||||
full_python_configs = read_python_configs("windows")
|
full_python_configs = read_python_configs("windows")
|
||||||
|
|
||||||
@@ -135,7 +138,7 @@ def setup_setuptools_cross_compile(
|
|||||||
tmp: Path,
|
tmp: Path,
|
||||||
python_configuration: PythonConfiguration,
|
python_configuration: PythonConfiguration,
|
||||||
python_libs_base: Path,
|
python_libs_base: Path,
|
||||||
env: dict[str, str],
|
env: MutableMapping[str, str],
|
||||||
) -> None:
|
) -> None:
|
||||||
distutils_cfg = tmp / "extra-setup.cfg"
|
distutils_cfg = tmp / "extra-setup.cfg"
|
||||||
env["DIST_EXTRA_CONFIG"] = str(distutils_cfg)
|
env["DIST_EXTRA_CONFIG"] = str(distutils_cfg)
|
||||||
@@ -183,7 +186,7 @@ def setup_rust_cross_compile(
|
|||||||
tmp: Path, # noqa: ARG001
|
tmp: Path, # noqa: ARG001
|
||||||
python_configuration: PythonConfiguration,
|
python_configuration: PythonConfiguration,
|
||||||
python_libs_base: Path, # noqa: ARG001
|
python_libs_base: Path, # noqa: ARG001
|
||||||
env: dict[str, str],
|
env: MutableMapping[str, str],
|
||||||
) -> None:
|
) -> None:
|
||||||
# Assume that MSVC will be used, because we already know that we are
|
# Assume that MSVC will be used, because we already know that we are
|
||||||
# cross-compiling. MinGW users can set CARGO_BUILD_TARGET themselves
|
# cross-compiling. MinGW users can set CARGO_BUILD_TARGET themselves
|
||||||
@@ -366,6 +369,7 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
|
|
||||||
for config in python_configurations:
|
for config in python_configurations:
|
||||||
build_options = options.build_options(config.identifier)
|
build_options = options.build_options(config.identifier)
|
||||||
|
build_frontend = build_frontend_or_default(build_options.build_frontend)
|
||||||
log.build_start(config.identifier)
|
log.build_start(config.identifier)
|
||||||
|
|
||||||
identifier_tmp_dir = tmp_path / config.identifier
|
identifier_tmp_dir = tmp_path / config.identifier
|
||||||
@@ -386,7 +390,7 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
config,
|
config,
|
||||||
dependency_constraint_flags,
|
dependency_constraint_flags,
|
||||||
build_options.environment,
|
build_options.environment,
|
||||||
build_options.build_frontend,
|
build_frontend,
|
||||||
)
|
)
|
||||||
|
|
||||||
compatible_wheel = find_compatible_wheel(built_wheels, config.identifier)
|
compatible_wheel = find_compatible_wheel(built_wheels, config.identifier)
|
||||||
@@ -410,13 +414,10 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
log.step("Building wheel...")
|
log.step("Building wheel...")
|
||||||
built_wheel_dir.mkdir()
|
built_wheel_dir.mkdir()
|
||||||
|
|
||||||
verbosity_flags = get_build_verbosity_extra_flags(build_options.build_verbosity)
|
extra_flags = split_config_settings(build_options.config_settings, build_frontend)
|
||||||
extra_flags = split_config_settings(
|
|
||||||
build_options.config_settings, build_options.build_frontend
|
|
||||||
)
|
|
||||||
|
|
||||||
if build_options.build_frontend == "pip":
|
if build_frontend == "pip":
|
||||||
extra_flags += verbosity_flags
|
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
|
# Path.resolve() is needed. Without it pip wheel may try to fetch package from pypi.org
|
||||||
# see https://github.com/pypa/cibuildwheel/pull/369
|
# see https://github.com/pypa/cibuildwheel/pull/369
|
||||||
call(
|
call(
|
||||||
@@ -430,9 +431,10 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
*extra_flags,
|
*extra_flags,
|
||||||
env=env,
|
env=env,
|
||||||
)
|
)
|
||||||
elif build_options.build_frontend == "build":
|
elif build_frontend == "build":
|
||||||
verbosity_setting = " ".join(verbosity_flags)
|
if not 0 <= build_options.build_verbosity < 2:
|
||||||
extra_flags += (f"--config-setting={verbosity_setting}",)
|
msg = f"build_verbosity {build_options.build_verbosity} is not supported for build frontend. Ignoring."
|
||||||
|
log.warning(msg)
|
||||||
build_env = env.copy()
|
build_env = env.copy()
|
||||||
if build_options.dependency_constraints:
|
if build_options.dependency_constraints:
|
||||||
constraints_path = (
|
constraints_path = (
|
||||||
@@ -463,7 +465,7 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
env=build_env,
|
env=build_env,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
assert_never(build_options.build_frontend)
|
assert_never(build_frontend)
|
||||||
|
|
||||||
built_wheel = next(built_wheel_dir.glob("*.whl"))
|
built_wheel = next(built_wheel_dir.glob("*.whl"))
|
||||||
|
|
||||||
@@ -559,6 +561,9 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
|
|
||||||
# we're all done here; move it to output (remove if already exists)
|
# we're all done here; move it to output (remove if already exists)
|
||||||
if compatible_wheel is None:
|
if compatible_wheel is None:
|
||||||
|
with suppress(FileNotFoundError):
|
||||||
|
(build_options.output_dir / repaired_wheel.name).unlink()
|
||||||
|
|
||||||
shutil.move(str(repaired_wheel), build_options.output_dir)
|
shutil.move(str(repaired_wheel), build_options.output_dir)
|
||||||
built_wheels.append(build_options.output_dir / repaired_wheel.name)
|
built_wheels.append(build_options.output_dir / repaired_wheel.name)
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,20 @@ title: Changelog
|
|||||||
|
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
### v2.12.3
|
||||||
|
|
||||||
|
_19 April 2023_
|
||||||
|
|
||||||
|
- 🐛 Fix an import error when running on Python 3.7. (#1479)
|
||||||
|
|
||||||
|
### v2.12.2
|
||||||
|
|
||||||
|
_18 April 2023_
|
||||||
|
|
||||||
|
- 🐛 Fix a bug that caused an extra empty config-setting to be passed to the backend when CIBW_BUILD_FRONTEND is set to `build`. (#1474)
|
||||||
|
- 🐛 Fix a crash that occurred when overwriting an existing wheel on Windows. (#1464)
|
||||||
|
- 🛠 Pinned version updates, including CPython 3.10.11, 3.11.3, pip 23.1 and wheel 0.40.0.
|
||||||
|
|
||||||
### v2.12.1
|
### v2.12.1
|
||||||
|
|
||||||
_11 March 2023_
|
_11 March 2023_
|
||||||
|
|||||||
@@ -431,11 +431,6 @@
|
|||||||
ci: [github]
|
ci: [github]
|
||||||
os: [apple, linux, windows]
|
os: [apple, linux, windows]
|
||||||
|
|
||||||
- name: pydantic
|
|
||||||
gh: samuelcolvin/pydantic
|
|
||||||
ci: [github]
|
|
||||||
os: [apple, linux, windows]
|
|
||||||
|
|
||||||
- name: vaex
|
- name: vaex
|
||||||
gh: vaexio/vaex
|
gh: vaexio/vaex
|
||||||
ci: [github]
|
ci: [github]
|
||||||
|
|||||||
+3
-3
@@ -145,7 +145,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:
|
If you use GitHub Actions for builds, you can use cibuildwheel as an action:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
uses: pypa/cibuildwheel@v2.12.1
|
uses: pypa/cibuildwheel@v2.12.3
|
||||||
```
|
```
|
||||||
|
|
||||||
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.
|
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.
|
||||||
@@ -167,7 +167,7 @@ The second option, and the only one that supports other CI systems, is using a `
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# requirements-cibw.txt
|
# requirements-cibw.txt
|
||||||
cibuildwheel==2.12.1
|
cibuildwheel==2.12.3
|
||||||
```
|
```
|
||||||
|
|
||||||
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:
|
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:
|
||||||
@@ -311,7 +311,7 @@ Solutions to this vary, but the simplest is to use pipx:
|
|||||||
# most runners have pipx preinstalled, but in case you don't
|
# most runners have pipx preinstalled, but in case you don't
|
||||||
python3 -m pip install pipx
|
python3 -m pip install pipx
|
||||||
|
|
||||||
pipx run cibuildwheel==2.12.1 --output-dir wheelhouse
|
pipx run cibuildwheel==2.12.3 --output-dir wheelhouse
|
||||||
pipx run twine upload wheelhouse/*.whl
|
pipx run twine upload wheelhouse/*.whl
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
+13
-6
@@ -92,8 +92,8 @@ Options have the same names as the environment variable overrides, but are
|
|||||||
placed in `[tool.cibuildwheel]` and are lower case, with dashes, following
|
placed in `[tool.cibuildwheel]` and are lower case, with dashes, following
|
||||||
common [TOML][] practice. Anything placed in subsections `linux`, `windows`,
|
common [TOML][] practice. Anything placed in subsections `linux`, `windows`,
|
||||||
or `macos` will only affect those platforms. Lists can be used instead of
|
or `macos` will only affect those platforms. Lists can be used instead of
|
||||||
strings for items that are natually a list. Multiline strings also work just
|
strings for items that are naturally a list. Multiline strings also work just
|
||||||
like in in the environment variables. Environment variables will take
|
like in the environment variables. Environment variables will take
|
||||||
precedence if defined.
|
precedence if defined.
|
||||||
|
|
||||||
The example above using environment variables could have been written like this:
|
The example above using environment variables could have been written like this:
|
||||||
@@ -237,7 +237,7 @@ For CPython, the minimally supported macOS version is 10.9; for PyPy 3.7, macOS
|
|||||||
|
|
||||||
Windows arm64 platform support is experimental.
|
Windows arm64 platform support is experimental.
|
||||||
|
|
||||||
See the [cibuildwheel 1 documentation](https://cibuildwheel.readthedocs.io/en/1.x/) for past end of life versions of Python, and PyPy2.7.
|
See the [cibuildwheel 1 documentation](https://cibuildwheel.readthedocs.io/en/1.x/) for past end-of-life versions of Python, and PyPy2.7.
|
||||||
|
|
||||||
#### Examples
|
#### Examples
|
||||||
|
|
||||||
@@ -314,7 +314,7 @@ See the [cibuildwheel 1 documentation](https://cibuildwheel.readthedocs.io/en/1.
|
|||||||
|
|
||||||
It is generally recommended to set `CIBW_BUILD` as an environment variable, though `skip`
|
It is generally recommended to set `CIBW_BUILD` as an environment variable, though `skip`
|
||||||
tends to be useful in a config file; you can statically declare that you don't
|
tends to be useful in a config file; you can statically declare that you don't
|
||||||
support pypy, for example.
|
support PyPy, for example.
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.build-id-table-marker + table {
|
.build-id-table-marker + table {
|
||||||
@@ -658,7 +658,7 @@ Platform-specific environment variables are also available:<br/>
|
|||||||
### `CIBW_ENVIRONMENT_PASS_LINUX` {: #environment-pass}
|
### `CIBW_ENVIRONMENT_PASS_LINUX` {: #environment-pass}
|
||||||
> Set environment variables on the host to pass-through to the container during the build.
|
> Set environment variables on the host to pass-through to the container during the build.
|
||||||
|
|
||||||
A list of environment variables to pass into the linux container during the build. It has no affect on the other platforms, which can already access all environment variables directly.
|
A list of environment variables to pass into the linux container during the build. It has no effect on the other platforms, which can already access all environment variables directly.
|
||||||
|
|
||||||
To specify more than one environment variable, separate the variable names by spaces.
|
To specify more than one environment variable, separate the variable names by spaces.
|
||||||
|
|
||||||
@@ -1214,6 +1214,13 @@ Platform-specific environment variables are also available:<br/>
|
|||||||
|
|
||||||
In configuration files, you can use an array, and the items will be joined with `&&`.
|
In configuration files, you can use an array, and the items will be joined with `&&`.
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
|
||||||
|
It isn't recommended to `cd` to your project directory before running tests,
|
||||||
|
because Python might resolve `import yourpackage` relative to the working dir,
|
||||||
|
and we want to test the wheel you just built. However, if you're sure that's not
|
||||||
|
an issue for you and your workflow requires it, on Windows you should do `cd /d`,
|
||||||
|
because the CWD and project dir might be on different drives.
|
||||||
|
|
||||||
### `CIBW_BEFORE_TEST` {: #before-test}
|
### `CIBW_BEFORE_TEST` {: #before-test}
|
||||||
> Execute a shell command before testing each wheel
|
> Execute a shell command before testing each wheel
|
||||||
@@ -1386,7 +1393,7 @@ This option is not supported in the overrides section in `pyproject.toml`.
|
|||||||
### `CIBW_BUILD_VERBOSITY` {: #build-verbosity}
|
### `CIBW_BUILD_VERBOSITY` {: #build-verbosity}
|
||||||
> Increase/decrease the output of pip wheel
|
> Increase/decrease the output of pip wheel
|
||||||
|
|
||||||
An number from 1 to 3 to increase the level of verbosity (corresponding to invoking pip with `-v`, `-vv`, and `-vvv`), between -1 and -3 (`-q`, `-qq`, and `-qqq`), or just 0 (default verbosity). These flags are useful while debugging a build when the output of the actual build invoked by `pip wheel` is required.
|
A number from 1 to 3 to increase the level of verbosity (corresponding to invoking pip with `-v`, `-vv`, and `-vvv`), between -1 and -3 (`-q`, `-qq`, and `-qqq`), or just 0 (default verbosity). These flags are useful while debugging a build when the output of the actual build invoked by `pip wheel` is required. Has no effect on the `build` backend, which produces verbose output by default.
|
||||||
|
|
||||||
Platform-specific environment variables are also available:<br/>
|
Platform-specific environment variables are also available:<br/>
|
||||||
`CIBW_BUILD_VERBOSITY_MACOS` | `CIBW_BUILD_VERBOSITY_WINDOWS` | `CIBW_BUILD_VERBOSITY_LINUX`
|
`CIBW_BUILD_VERBOSITY_MACOS` | `CIBW_BUILD_VERBOSITY_WINDOWS` | `CIBW_BUILD_VERBOSITY_LINUX`
|
||||||
|
|||||||
+2
-2
@@ -184,7 +184,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/
|
|||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Build wheels
|
- name: Build wheels
|
||||||
run: pipx run cibuildwheel==2.12.1
|
run: pipx run cibuildwheel==2.12.3
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
@@ -219,7 +219,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/
|
|||||||
- uses: actions/setup-python@v3
|
- uses: actions/setup-python@v3
|
||||||
|
|
||||||
- name: Install cibuildwheel
|
- name: Install cibuildwheel
|
||||||
run: python -m pip install cibuildwheel==2.12.1
|
run: python -m pip install cibuildwheel==2.12.3
|
||||||
|
|
||||||
- name: Build wheels
|
- name: Build wheels
|
||||||
run: python -m cibuildwheel --output-dir wheelhouse
|
run: python -m cibuildwheel --output-dir wheelhouse
|
||||||
|
|||||||
+20
-22
@@ -17,17 +17,16 @@ title: Working examples
|
|||||||
| [Kivy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Open source UI framework written in Python, running on Windows, Linux, macOS, Android and iOS |
|
| [Kivy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Open source UI framework written in Python, running on Windows, Linux, macOS, Android and iOS |
|
||||||
| [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. |
|
| [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. |
|
| [MyPy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | The compiled version of MyPy using MyPyC. |
|
||||||
| [pydantic][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Data validation using Python type hints |
|
|
||||||
| [MemRay][] | ![github icon][] | ![linux icon][] | Memray is a memory profiler for Python |
|
| [MemRay][] | ![github icon][] | ![linux icon][] | Memray is a memory profiler for Python |
|
||||||
|
| [duckdb][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | DuckDB is an in-process SQL OLAP Database Management System |
|
||||||
| [uvloop][] | ![github icon][] | ![apple icon][] ![linux icon][] | Ultra fast asyncio event loop. |
|
| [uvloop][] | ![github icon][] | ![apple icon][] ![linux icon][] | Ultra fast asyncio event loop. |
|
||||||
| [psutil][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Cross-platform lib for process and system monitoring in Python |
|
| [psutil][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Cross-platform lib for process and system monitoring in Python |
|
||||||
| [duckdb][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | DuckDB is an in-process SQL OLAP Database Management System |
|
|
||||||
| [vaex][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Out-of-Core hybrid Apache Arrow/NumPy DataFrame for Python, ML, visualization and exploration of big tabular data at a billion rows per second 🚀 |
|
| [vaex][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Out-of-Core hybrid Apache Arrow/NumPy DataFrame for Python, ML, visualization and exploration of big tabular data at a billion rows per second 🚀 |
|
||||||
| [Google Benchmark][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A microbenchmark support library |
|
| [Google Benchmark][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A microbenchmark support library |
|
||||||
| [Apache Beam][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Apache Beam is a unified programming model for Batch and Streaming data processing. |
|
| [Apache Beam][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Apache Beam is a unified programming model for Batch and Streaming data processing. |
|
||||||
|
| [Triton][] | ![github icon][] | ![linux icon][] | Self hosted runners |
|
||||||
| [asyncpg][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A fast PostgreSQL Database Client Library for Python/asyncio. |
|
| [asyncpg][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A fast PostgreSQL Database Client Library for Python/asyncio. |
|
||||||
| [PyGame][] | ![github icon][] | ![apple icon][] ![linux icon][] | 🐍🎮 pygame (the library) is a Free and Open Source python programming language library for making multimedia applications like games built on top of the excellent SDL library. C, Python, Native, OpenGL. |
|
| [PyGame][] | ![github icon][] | ![apple icon][] ![linux icon][] | 🐍🎮 pygame (the library) is a Free and Open Source python programming language library for making multimedia applications like games built on top of the excellent SDL library. C, Python, Native, OpenGL. |
|
||||||
| [Triton][] | ![github icon][] | ![linux icon][] | Self hosted runners |
|
|
||||||
| [cmake][] | ![github icon][] ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Multitagged binary builds for all supported platforms, using cibw 2 config configuration. |
|
| [cmake][] | ![github icon][] ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Multitagged binary builds for all supported platforms, using cibw 2 config configuration. |
|
||||||
| [scikit-image][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Image processing library. Uses cibuildwheel to build and test a project that uses Cython with platform-native code. |
|
| [scikit-image][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Image processing library. Uses cibuildwheel to build and test a project that uses Cython with platform-native code. |
|
||||||
| [twisted-iocpsupport][] | ![github icon][] | ![windows icon][] | A submodule of Twisted that hooks into native C APIs using Cython. |
|
| [twisted-iocpsupport][] | ![github icon][] | ![windows icon][] | A submodule of Twisted that hooks into native C APIs using Cython. |
|
||||||
@@ -37,8 +36,8 @@ title: Working examples
|
|||||||
| [River][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | 🌊 Online machine learning in Python |
|
| [River][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | 🌊 Online machine learning in Python |
|
||||||
| [UltraJSON][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Ultra fast JSON decoder and encoder written in C with Python bindings |
|
| [UltraJSON][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Ultra fast JSON decoder and encoder written in C with Python bindings |
|
||||||
| [OpenSpiel][] | ![github icon][] | ![apple icon][] ![linux icon][] | OpenSpiel is a collection of environments and algorithms for research in general reinforcement learning and search/planning in games. |
|
| [OpenSpiel][] | ![github icon][] | ![apple icon][] ![linux icon][] | OpenSpiel is a collection of environments and algorithms for research in general reinforcement learning and search/planning in games. |
|
||||||
| [pyzmq][] | ![github icon][] ![circleci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python bindings for zeromq, the networking library. Uses Cython on CPython and CFFI on PyPy. ARM wheels for linux are built natively on CircleCI. |
|
|
||||||
| [aiortc][] | ![github icon][] | ![apple icon][] ![linux icon][] | WebRTC and ORTC implementation for Python using asyncio. |
|
| [aiortc][] | ![github icon][] | ![apple icon][] ![linux icon][] | WebRTC and ORTC implementation for Python using asyncio. |
|
||||||
|
| [pyzmq][] | ![github icon][] ![circleci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python bindings for zeromq, the networking library. Uses Cython on CPython and CFFI on PyPy. ARM wheels for linux are built natively on CircleCI. |
|
||||||
| [Confluent client for Kafka][] | ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | setup in `tools/wheels/build-wheels.bat` |
|
| [Confluent client for Kafka][] | ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | setup in `tools/wheels/build-wheels.bat` |
|
||||||
| [Implicit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes GPU support for linux wheels |
|
| [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 |
|
| [vispy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Main repository for Vispy |
|
||||||
@@ -49,12 +48,12 @@ title: Working examples
|
|||||||
| [PyYAML][] | ![github icon][] | ![apple icon][] | Canonical source repository for PyYAML |
|
| [PyYAML][] | ![github icon][] | ![apple icon][] | Canonical source repository for PyYAML |
|
||||||
| [numexpr][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast numerical array expression evaluator for Python, NumPy, PyTables, pandas, bcolz and more |
|
| [numexpr][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast numerical array expression evaluator for Python, NumPy, PyTables, pandas, bcolz and more |
|
||||||
| [h5py][] | ![azurepipelines icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | HDF5 for Python -- The h5py package is a Pythonic interface to the HDF5 binary data format. |
|
| [h5py][] | ![azurepipelines icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | HDF5 for Python -- The h5py package is a Pythonic interface to the HDF5 binary data format. |
|
||||||
| [Wrapt][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python module for decorators, wrappers and monkey patching. |
|
|
||||||
| [PyAV][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Pythonic bindings for FFmpeg's libraries. |
|
| [PyAV][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Pythonic bindings for FFmpeg's libraries. |
|
||||||
|
| [Wrapt][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python module for decorators, wrappers and monkey patching. |
|
||||||
| [Line Profiler][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Line-by-line profiling for Python |
|
| [Line Profiler][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Line-by-line profiling for Python |
|
||||||
| [pikepdf][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python library for reading and writing PDF, powered by qpdf |
|
| [pikepdf][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python library for reading and writing PDF, powered by qpdf |
|
||||||
| [SimpleJSON][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | simplejson is a simple, fast, extensible JSON encoder/decoder for Python |
|
|
||||||
| [envd][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | 🏕️ Reproducible development environment for AI/ML |
|
| [envd][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | 🏕️ Reproducible development environment for AI/ML |
|
||||||
|
| [SimpleJSON][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | simplejson is a simple, fast, extensible JSON encoder/decoder for Python |
|
||||||
| [OpenColorIO][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A color management framework for visual effects and animation. |
|
| [OpenColorIO][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A color management framework for visual effects and animation. |
|
||||||
| [aioquic][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | QUIC and HTTP/3 implementation in Python |
|
| [aioquic][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | QUIC and HTTP/3 implementation in Python |
|
||||||
| [OpenTimelineIO][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Open Source API and interchange format for editorial timeline information. |
|
| [OpenTimelineIO][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Open Source API and interchange format for editorial timeline information. |
|
||||||
@@ -65,15 +64,15 @@ title: Working examples
|
|||||||
| [DeepForest][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | An Efficient, Scalable and Optimized Python Framework for Deep Forest (2021.2.1) |
|
| [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 |
|
| [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. |
|
| [AutoPy][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. |
|
||||||
|
| [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. |
|
||||||
| [H3-py][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Python bindings for H3, a hierarchical hexagonal geospatial indexing system |
|
| [H3-py][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Python bindings for H3, a hierarchical hexagonal geospatial indexing system |
|
||||||
| [Rtree][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Rtree: spatial index for Python GIS ¶ |
|
| [Rtree][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Rtree: spatial index for Python GIS ¶ |
|
||||||
| [markupsafe][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Safely add untrusted strings to HTML/XML markup. |
|
| [markupsafe][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Safely add untrusted strings to HTML/XML markup. |
|
||||||
| [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. |
|
|
||||||
| [Picologging][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A high-performance logging library for Python. |
|
| [Picologging][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A high-performance logging library for Python. |
|
||||||
| [pybind11 cmake_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a CMake-based build system |
|
| [pybind11 cmake_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a CMake-based build system |
|
||||||
| [python-rapidjson][] | ![travisci icon][] ![gitlab icon][] ![appveyor icon][] | ![windows icon][] ![linux icon][] | Python wrapper around rapidjson |
|
| [python-rapidjson][] | ![travisci icon][] ![gitlab icon][] ![appveyor icon][] | ![windows icon][] ![linux icon][] | Python wrapper around rapidjson |
|
||||||
| [python-snappy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Python bindings for the snappy google library |
|
|
||||||
| [KDEpy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Kernel Density Estimation in Python |
|
| [KDEpy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Kernel Density Estimation in Python |
|
||||||
|
| [python-snappy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Python bindings for the snappy google library |
|
||||||
| [time-machine][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Time mocking library using only the CPython C API. |
|
| [time-machine][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Time mocking library using only the CPython C API. |
|
||||||
| [tgcalls][] | ![github icon][] | ![apple icon][] ![windows icon][] | Python `pybind11` binding to Telegram's WebRTC library with third party dependencies like `OpenSSL`, `MozJPEG`, `FFmpeg`, etc. |
|
| [tgcalls][] | ![github icon][] | ![apple icon][] ![windows icon][] | Python `pybind11` binding to Telegram's WebRTC library with third party dependencies like `OpenSSL`, `MozJPEG`, `FFmpeg`, etc. |
|
||||||
| [pybind11 python_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a Python-based build system |
|
| [pybind11 python_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a Python-based build system |
|
||||||
@@ -82,8 +81,8 @@ title: Working examples
|
|||||||
| [cyvcf2][] | ![github icon][] | ![apple icon][] ![linux icon][] | cython + htslib == fast VCF and BCF processing |
|
| [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. |
|
| [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. |
|
||||||
| [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. |
|
| [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. |
|
||||||
| [jq.py][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | Python bindings for jq |
|
|
||||||
| [mosec][] | ![github icon][] | ![linux icon][] ![apple icon][] | A high-performance serving framework for ML models, offers dynamic batching and multi-stage pipeline to fully exploit your compute machine |
|
| [mosec][] | ![github icon][] | ![linux icon][] ![apple icon][] | A high-performance serving framework for ML models, offers dynamic batching and multi-stage pipeline to fully exploit your compute machine |
|
||||||
|
| [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 |
|
| [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 |
|
| [Tokenizer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast and customizable text tokenization library with BPE and SentencePiece support |
|
||||||
| [PyGLM][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Fast OpenGL Mathematics (GLM) for Python |
|
| [PyGLM][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Fast OpenGL Mathematics (GLM) for Python |
|
||||||
@@ -93,16 +92,16 @@ title: Working examples
|
|||||||
| [iDynTree][] | ![github icon][] | ![linux icon][] | Uses manylinux_2_24 |
|
| [iDynTree][] | ![github icon][] | ![linux icon][] | Uses manylinux_2_24 |
|
||||||
| [Python-WebRTC][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | a Python extension that provides bindings to WebRTC M92 |
|
| [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 |
|
| [pybase64][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast Base64 encoding/decoding in Python |
|
||||||
| [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. |
|
|
||||||
| [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. |
|
| [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. |
|
||||||
|
| [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. |
|
||||||
| [fathon][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | python package for DFA (Detrended Fluctuation Analysis) and related algorithms |
|
| [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. |
|
| [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. |
|
||||||
| [polaroid][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Full range of wheels for setuptools rust, with auto release and PyPI deploy. |
|
| [polaroid][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Full range of wheels for setuptools rust, with auto release and PyPI deploy. |
|
||||||
| [power-grid-model][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python/C++ library for distribution power system analysis |
|
| [power-grid-model][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python/C++ library for distribution power system analysis |
|
||||||
| [etebase-py][] | ![travisci icon][] | ![linux icon][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. |
|
| [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 |
|
| [cf-units][] | ![github icon][] | ![apple icon][] ![linux icon][] | Units of measure as required by the Climate and Forecast (CF) Metadata Conventions |
|
||||||
| [clang-format][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Scikit-build wrapper around LLVM's CMake, all platforms, generic wheels. |
|
|
||||||
| [pybind11 scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | An example combining scikit-build and pybind11 |
|
| [pybind11 scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | An example combining scikit-build and pybind11 |
|
||||||
|
| [clang-format][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Scikit-build wrapper around LLVM's CMake, all platforms, generic wheels. |
|
||||||
| [numpythia][] | ![github icon][] | ![apple icon][] ![linux icon][] | The interface between PYTHIA and NumPy |
|
| [numpythia][] | ![github icon][] | ![apple icon][] ![linux icon][] | The interface between PYTHIA and NumPy |
|
||||||
| [ninja][] | ![github icon][] ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Multitagged binary builds for all supported platforms, using cibw 2 config configuration. |
|
| [ninja][] | ![github icon][] ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Multitagged binary builds for all supported platforms, using cibw 2 config configuration. |
|
||||||
| [pyjet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The interface between FastJet and NumPy |
|
| [pyjet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The interface between FastJet and NumPy |
|
||||||
@@ -123,17 +122,16 @@ title: Working examples
|
|||||||
[Kivy]: https://github.com/kivy/kivy
|
[Kivy]: https://github.com/kivy/kivy
|
||||||
[Prophet]: https://github.com/facebook/prophet
|
[Prophet]: https://github.com/facebook/prophet
|
||||||
[MyPy]: https://github.com/mypyc/mypy_mypyc-wheels
|
[MyPy]: https://github.com/mypyc/mypy_mypyc-wheels
|
||||||
[pydantic]: https://github.com/samuelcolvin/pydantic
|
|
||||||
[MemRay]: https://github.com/bloomberg/memray
|
[MemRay]: https://github.com/bloomberg/memray
|
||||||
|
[duckdb]: https://github.com/duckdb/duckdb
|
||||||
[uvloop]: https://github.com/MagicStack/uvloop
|
[uvloop]: https://github.com/MagicStack/uvloop
|
||||||
[psutil]: https://github.com/giampaolo/psutil
|
[psutil]: https://github.com/giampaolo/psutil
|
||||||
[duckdb]: https://github.com/duckdb/duckdb
|
|
||||||
[vaex]: https://github.com/vaexio/vaex
|
[vaex]: https://github.com/vaexio/vaex
|
||||||
[Google Benchmark]: https://github.com/google/benchmark
|
[Google Benchmark]: https://github.com/google/benchmark
|
||||||
[Apache Beam]: https://github.com/apache/beam
|
[Apache Beam]: https://github.com/apache/beam
|
||||||
|
[Triton]: https://github.com/openai/triton
|
||||||
[asyncpg]: https://github.com/MagicStack/asyncpg
|
[asyncpg]: https://github.com/MagicStack/asyncpg
|
||||||
[PyGame]: https://github.com/pygame/pygame
|
[PyGame]: https://github.com/pygame/pygame
|
||||||
[Triton]: https://github.com/openai/triton
|
|
||||||
[cmake]: https://github.com/scikit-build/cmake-python-distributions
|
[cmake]: https://github.com/scikit-build/cmake-python-distributions
|
||||||
[scikit-image]: https://github.com/scikit-image/scikit-image
|
[scikit-image]: https://github.com/scikit-image/scikit-image
|
||||||
[twisted-iocpsupport]: https://github.com/twisted/twisted-iocpsupport
|
[twisted-iocpsupport]: https://github.com/twisted/twisted-iocpsupport
|
||||||
@@ -143,8 +141,8 @@ title: Working examples
|
|||||||
[River]: https://github.com/online-ml/river
|
[River]: https://github.com/online-ml/river
|
||||||
[UltraJSON]: https://github.com/ultrajson/ultrajson
|
[UltraJSON]: https://github.com/ultrajson/ultrajson
|
||||||
[OpenSpiel]: https://github.com/deepmind/open_spiel
|
[OpenSpiel]: https://github.com/deepmind/open_spiel
|
||||||
[pyzmq]: https://github.com/zeromq/pyzmq
|
|
||||||
[aiortc]: https://github.com/aiortc/aiortc
|
[aiortc]: https://github.com/aiortc/aiortc
|
||||||
|
[pyzmq]: https://github.com/zeromq/pyzmq
|
||||||
[Confluent client for Kafka]: https://github.com/confluentinc/confluent-kafka-python
|
[Confluent client for Kafka]: https://github.com/confluentinc/confluent-kafka-python
|
||||||
[Implicit]: https://github.com/benfred/implicit
|
[Implicit]: https://github.com/benfred/implicit
|
||||||
[vispy]: https://github.com/vispy/vispy
|
[vispy]: https://github.com/vispy/vispy
|
||||||
@@ -155,12 +153,12 @@ title: Working examples
|
|||||||
[PyYAML]: https://github.com/yaml/pyyaml
|
[PyYAML]: https://github.com/yaml/pyyaml
|
||||||
[numexpr]: https://github.com/pydata/numexpr
|
[numexpr]: https://github.com/pydata/numexpr
|
||||||
[h5py]: https://github.com/h5py/h5py
|
[h5py]: https://github.com/h5py/h5py
|
||||||
[Wrapt]: https://github.com/GrahamDumpleton/wrapt
|
|
||||||
[PyAV]: https://github.com/PyAV-Org/PyAV
|
[PyAV]: https://github.com/PyAV-Org/PyAV
|
||||||
|
[Wrapt]: https://github.com/GrahamDumpleton/wrapt
|
||||||
[Line Profiler]: https://github.com/pyutils/line_profiler
|
[Line Profiler]: https://github.com/pyutils/line_profiler
|
||||||
[pikepdf]: https://github.com/pikepdf/pikepdf
|
[pikepdf]: https://github.com/pikepdf/pikepdf
|
||||||
[SimpleJSON]: https://github.com/simplejson/simplejson
|
|
||||||
[envd]: https://github.com/tensorchord/envd
|
[envd]: https://github.com/tensorchord/envd
|
||||||
|
[SimpleJSON]: https://github.com/simplejson/simplejson
|
||||||
[OpenColorIO]: https://github.com/AcademySoftwareFoundation/OpenColorIO
|
[OpenColorIO]: https://github.com/AcademySoftwareFoundation/OpenColorIO
|
||||||
[aioquic]: https://github.com/aiortc/aioquic
|
[aioquic]: https://github.com/aiortc/aioquic
|
||||||
[OpenTimelineIO]: https://github.com/PixarAnimationStudios/OpenTimelineIO
|
[OpenTimelineIO]: https://github.com/PixarAnimationStudios/OpenTimelineIO
|
||||||
@@ -171,15 +169,15 @@ title: Working examples
|
|||||||
[DeepForest]: https://github.com/LAMDA-NJU/Deep-Forest
|
[DeepForest]: https://github.com/LAMDA-NJU/Deep-Forest
|
||||||
[google neuroglancer]: https://github.com/google/neuroglancer
|
[google neuroglancer]: https://github.com/google/neuroglancer
|
||||||
[AutoPy]: https://github.com/autopilot-rs/autopy
|
[AutoPy]: https://github.com/autopilot-rs/autopy
|
||||||
|
[CTranslate2]: https://github.com/OpenNMT/CTranslate2
|
||||||
[H3-py]: https://github.com/uber/h3-py
|
[H3-py]: https://github.com/uber/h3-py
|
||||||
[Rtree]: https://github.com/Toblerity/rtree
|
[Rtree]: https://github.com/Toblerity/rtree
|
||||||
[markupsafe]: https://github.com/pallets/markupsafe
|
[markupsafe]: https://github.com/pallets/markupsafe
|
||||||
[CTranslate2]: https://github.com/OpenNMT/CTranslate2
|
|
||||||
[Picologging]: https://github.com/microsoft/picologging
|
[Picologging]: https://github.com/microsoft/picologging
|
||||||
[pybind11 cmake_example]: https://github.com/pybind/cmake_example
|
[pybind11 cmake_example]: https://github.com/pybind/cmake_example
|
||||||
[python-rapidjson]: https://github.com/python-rapidjson/python-rapidjson
|
[python-rapidjson]: https://github.com/python-rapidjson/python-rapidjson
|
||||||
[python-snappy]: https://github.com/andrix/python-snappy
|
|
||||||
[KDEpy]: https://github.com/tommyod/KDEpy
|
[KDEpy]: https://github.com/tommyod/KDEpy
|
||||||
|
[python-snappy]: https://github.com/andrix/python-snappy
|
||||||
[time-machine]: https://github.com/adamchainz/time-machine
|
[time-machine]: https://github.com/adamchainz/time-machine
|
||||||
[tgcalls]: https://github.com/MarshalX/tgcalls
|
[tgcalls]: https://github.com/MarshalX/tgcalls
|
||||||
[pybind11 python_example]: https://github.com/pybind/python_example
|
[pybind11 python_example]: https://github.com/pybind/python_example
|
||||||
@@ -188,8 +186,8 @@ title: Working examples
|
|||||||
[cyvcf2]: https://github.com/brentp/cyvcf2
|
[cyvcf2]: https://github.com/brentp/cyvcf2
|
||||||
[matrixprofile]: https://github.com/matrix-profile-foundation/matrixprofile
|
[matrixprofile]: https://github.com/matrix-profile-foundation/matrixprofile
|
||||||
[abess]: https://github.com/abess-team/abess
|
[abess]: https://github.com/abess-team/abess
|
||||||
[jq.py]: https://github.com/mwilliamson/jq.py
|
|
||||||
[mosec]: https://github.com/mosecorg/mosec
|
[mosec]: https://github.com/mosecorg/mosec
|
||||||
|
[jq.py]: https://github.com/mwilliamson/jq.py
|
||||||
[iminuit]: https://github.com/scikit-hep/iminuit
|
[iminuit]: https://github.com/scikit-hep/iminuit
|
||||||
[Tokenizer]: https://github.com/OpenNMT/Tokenizer
|
[Tokenizer]: https://github.com/OpenNMT/Tokenizer
|
||||||
[PyGLM]: https://github.com/Zuzu-Typ/PyGLM
|
[PyGLM]: https://github.com/Zuzu-Typ/PyGLM
|
||||||
@@ -199,16 +197,16 @@ title: Working examples
|
|||||||
[iDynTree]: https://github.com/robotology/idyntree
|
[iDynTree]: https://github.com/robotology/idyntree
|
||||||
[Python-WebRTC]: https://github.com/MarshalX/python-webrtc
|
[Python-WebRTC]: https://github.com/MarshalX/python-webrtc
|
||||||
[pybase64]: https://github.com/mayeut/pybase64
|
[pybase64]: https://github.com/mayeut/pybase64
|
||||||
[Arbor]: https://github.com/arbor-sim/arbor
|
|
||||||
[pillow-heif]: https://github.com/bigcat88/pillow_heif
|
[pillow-heif]: https://github.com/bigcat88/pillow_heif
|
||||||
|
[Arbor]: https://github.com/arbor-sim/arbor
|
||||||
[fathon]: https://github.com/stfbnc/fathon
|
[fathon]: https://github.com/stfbnc/fathon
|
||||||
[Imagecodecs (fork)]: https://github.com/czaki/imagecodecs_build
|
[Imagecodecs (fork)]: https://github.com/czaki/imagecodecs_build
|
||||||
[polaroid]: https://github.com/daggy1234/polaroid
|
[polaroid]: https://github.com/daggy1234/polaroid
|
||||||
[power-grid-model]: https://github.com/alliander-opensource/power-grid-model
|
[power-grid-model]: https://github.com/alliander-opensource/power-grid-model
|
||||||
[etebase-py]: https://github.com/etesync/etebase-py
|
[etebase-py]: https://github.com/etesync/etebase-py
|
||||||
[cf-units]: https://github.com/SciTools/cf-units
|
[cf-units]: https://github.com/SciTools/cf-units
|
||||||
[clang-format]: https://github.com/ssciwr/clang-format-wheel
|
|
||||||
[pybind11 scikit_build_example]: https://github.com/pybind/scikit_build_example
|
[pybind11 scikit_build_example]: https://github.com/pybind/scikit_build_example
|
||||||
|
[clang-format]: https://github.com/ssciwr/clang-format-wheel
|
||||||
[numpythia]: https://github.com/scikit-hep/numpythia
|
[numpythia]: https://github.com/scikit-hep/numpythia
|
||||||
[ninja]: https://github.com/scikit-build/ninja-python-distributions
|
[ninja]: https://github.com/scikit-build/ninja-python-distributions
|
||||||
[pyjet]: https://github.com/scikit-hep/pyjet
|
[pyjet]: https://github.com/scikit-hep/pyjet
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ stack: python 3.7
|
|||||||
init:
|
init:
|
||||||
- cmd: set PATH=C:\Python37;C:\Python37\Scripts;%PATH%
|
- cmd: set PATH=C:\Python37;C:\Python37\Scripts;%PATH%
|
||||||
|
|
||||||
install: python -m pip install cibuildwheel==2.12.1
|
install: python -m pip install cibuildwheel==2.12.3
|
||||||
|
|
||||||
build_script: python -m cibuildwheel --output-dir wheelhouse
|
build_script: python -m cibuildwheel --output-dir wheelhouse
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ jobs:
|
|||||||
- bash: |
|
- bash: |
|
||||||
set -o errexit
|
set -o errexit
|
||||||
python3 -m pip install --upgrade pip
|
python3 -m pip install --upgrade pip
|
||||||
pip3 install cibuildwheel==2.12.1
|
pip3 install cibuildwheel==2.12.3
|
||||||
displayName: Install dependencies
|
displayName: Install dependencies
|
||||||
- bash: cibuildwheel --output-dir wheelhouse .
|
- bash: cibuildwheel --output-dir wheelhouse .
|
||||||
displayName: Build wheels
|
displayName: Build wheels
|
||||||
@@ -20,7 +20,7 @@ jobs:
|
|||||||
- bash: |
|
- bash: |
|
||||||
set -o errexit
|
set -o errexit
|
||||||
python3 -m pip install --upgrade pip
|
python3 -m pip install --upgrade pip
|
||||||
python3 -m pip install cibuildwheel==2.12.1
|
python3 -m pip install cibuildwheel==2.12.3
|
||||||
displayName: Install dependencies
|
displayName: Install dependencies
|
||||||
- bash: cibuildwheel --output-dir wheelhouse .
|
- bash: cibuildwheel --output-dir wheelhouse .
|
||||||
displayName: Build wheels
|
displayName: Build wheels
|
||||||
@@ -34,7 +34,7 @@ jobs:
|
|||||||
- bash: |
|
- bash: |
|
||||||
set -o errexit
|
set -o errexit
|
||||||
python -m pip install --upgrade pip
|
python -m pip install --upgrade pip
|
||||||
pip install cibuildwheel==2.12.1
|
pip install cibuildwheel==2.12.3
|
||||||
displayName: Install dependencies
|
displayName: Install dependencies
|
||||||
- bash: cibuildwheel --output-dir wheelhouse .
|
- bash: cibuildwheel --output-dir wheelhouse .
|
||||||
displayName: Build wheels
|
displayName: Build wheels
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ jobs:
|
|||||||
- run:
|
- run:
|
||||||
name: Build the Linux wheels.
|
name: Build the Linux wheels.
|
||||||
command: |
|
command: |
|
||||||
pip3 install --user cibuildwheel==2.12.1
|
pip3 install --user cibuildwheel==2.12.3
|
||||||
cibuildwheel --output-dir wheelhouse
|
cibuildwheel --output-dir wheelhouse
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
path: wheelhouse/
|
path: wheelhouse/
|
||||||
@@ -28,7 +28,7 @@ jobs:
|
|||||||
- run:
|
- run:
|
||||||
name: Build the Linux aarch64 wheels.
|
name: Build the Linux aarch64 wheels.
|
||||||
command: |
|
command: |
|
||||||
python3 -m pip install --user cibuildwheel==2.12.1
|
python3 -m pip install --user cibuildwheel==2.12.3
|
||||||
python3 -m cibuildwheel --output-dir wheelhouse
|
python3 -m cibuildwheel --output-dir wheelhouse
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
path: wheelhouse/
|
path: wheelhouse/
|
||||||
@@ -42,7 +42,7 @@ jobs:
|
|||||||
- run:
|
- run:
|
||||||
name: Build the OS X wheels.
|
name: Build the OS X wheels.
|
||||||
command: |
|
command: |
|
||||||
pip3 install cibuildwheel==2.12.1
|
pip3 install cibuildwheel==2.12.3
|
||||||
cibuildwheel --output-dir wheelhouse
|
cibuildwheel --output-dir wheelhouse
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
path: wheelhouse/
|
path: wheelhouse/
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
build_and_store_wheels: &BUILD_AND_STORE_WHEELS
|
build_and_store_wheels: &BUILD_AND_STORE_WHEELS
|
||||||
install_cibuildwheel_script:
|
install_cibuildwheel_script:
|
||||||
- python -m pip install cibuildwheel==2.12.1
|
- python -m pip install cibuildwheel==2.12.3
|
||||||
run_cibuildwheel_script:
|
run_cibuildwheel_script:
|
||||||
- cibuildwheel
|
- cibuildwheel
|
||||||
wheels_artifacts:
|
wheels_artifacts:
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
build_and_store_wheels: &BUILD_AND_STORE_WHEELS
|
build_and_store_wheels: &BUILD_AND_STORE_WHEELS
|
||||||
install_cibuildwheel_script:
|
install_cibuildwheel_script:
|
||||||
- python -m pip install cibuildwheel==2.12.1
|
- python -m pip install cibuildwheel==2.12.3
|
||||||
run_cibuildwheel_script:
|
run_cibuildwheel_script:
|
||||||
- cibuildwheel
|
- cibuildwheel
|
||||||
wheels_artifacts:
|
wheels_artifacts:
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ jobs:
|
|||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Build wheels
|
- name: Build wheels
|
||||||
uses: pypa/cibuildwheel@v2.12.1
|
uses: pypa/cibuildwheel@v2.12.3
|
||||||
env:
|
env:
|
||||||
CIBW_ARCHS_MACOS: x86_64 arm64
|
CIBW_ARCHS_MACOS: x86_64 arm64
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ jobs:
|
|||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Build wheels
|
- name: Build wheels
|
||||||
uses: pypa/cibuildwheel@v2.12.1
|
uses: pypa/cibuildwheel@v2.12.3
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ jobs:
|
|||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Build wheels
|
- name: Build wheels
|
||||||
uses: pypa/cibuildwheel@v2.12.1
|
uses: pypa/cibuildwheel@v2.12.3
|
||||||
# env:
|
# env:
|
||||||
# CIBW_SOME_OPTION: value
|
# CIBW_SOME_OPTION: value
|
||||||
# ...
|
# ...
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ jobs:
|
|||||||
platforms: all
|
platforms: all
|
||||||
|
|
||||||
- name: Build wheels
|
- name: Build wheels
|
||||||
uses: pypa/cibuildwheel@v2.12.1
|
uses: pypa/cibuildwheel@v2.12.3
|
||||||
env:
|
env:
|
||||||
# configure cibuildwheel to build native archs ('auto'), and some
|
# configure cibuildwheel to build native archs ('auto'), and some
|
||||||
# emulated ones
|
# emulated ones
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ linux:
|
|||||||
DOCKER_TLS_CERTDIR: ""
|
DOCKER_TLS_CERTDIR: ""
|
||||||
script:
|
script:
|
||||||
- curl -sSL https://get.docker.com/ | sh
|
- curl -sSL https://get.docker.com/ | sh
|
||||||
- python -m pip install cibuildwheel==2.12.1
|
- python -m pip install cibuildwheel==2.12.3
|
||||||
- cibuildwheel --output-dir wheelhouse
|
- cibuildwheel --output-dir wheelhouse
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
@@ -23,7 +23,7 @@ windows:
|
|||||||
before_script:
|
before_script:
|
||||||
- choco install python -y --version 3.8.6
|
- choco install python -y --version 3.8.6
|
||||||
- choco install git.install -y
|
- choco install git.install -y
|
||||||
- py -m pip install cibuildwheel==2.12.1
|
- py -m pip install cibuildwheel==2.12.3
|
||||||
script:
|
script:
|
||||||
- py -m cibuildwheel --output-dir wheelhouse --platform windows
|
- py -m cibuildwheel --output-dir wheelhouse --platform windows
|
||||||
artifacts:
|
artifacts:
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ linux:
|
|||||||
- curl -sSL https://get.docker.com/ | sh
|
- curl -sSL https://get.docker.com/ | sh
|
||||||
# Warning: This is extremely slow, be careful with how many wheels you build
|
# Warning: This is extremely slow, be careful with how many wheels you build
|
||||||
- docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
- docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
||||||
- python -m pip install cibuildwheel==2.12.1
|
- python -m pip install cibuildwheel==2.12.3
|
||||||
# Assuming your CI runner's default architecture is x86_64...
|
# Assuming your CI runner's default architecture is x86_64...
|
||||||
- cibuildwheel --output-dir wheelhouse --platform linux --archs aarch64
|
- cibuildwheel --output-dir wheelhouse --platform linux --archs aarch64
|
||||||
artifacts:
|
artifacts:
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ jobs:
|
|||||||
- ln -s /c/Python38/python.exe /c/Python38/python3.exe
|
- ln -s /c/Python38/python.exe /c/Python38/python3.exe
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- python3 -m pip install cibuildwheel==2.12.1
|
- python3 -m pip install cibuildwheel==2.12.3
|
||||||
|
|
||||||
script:
|
script:
|
||||||
# build the wheels, put them into './dist'
|
# build the wheels, put them into './dist'
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ jobs:
|
|||||||
- ln -s /c/Python38/python.exe /c/Python38/python3.exe
|
- ln -s /c/Python38/python.exe /c/Python38/python3.exe
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- python3 -m pip install cibuildwheel==2.12.1
|
- python3 -m pip install cibuildwheel==2.12.3
|
||||||
|
|
||||||
script:
|
script:
|
||||||
# build the wheels, put them into './wheelhouse'
|
# build the wheels, put them into './wheelhouse'
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ jobs:
|
|||||||
- stage: deploy
|
- stage: deploy
|
||||||
name: Build and deploy Linux wheels
|
name: Build and deploy Linux wheels
|
||||||
services: docker
|
services: docker
|
||||||
install: python3 -m pip install cibuildwheel==2.12.1 twine
|
install: python3 -m pip install cibuildwheel==2.12.3 twine
|
||||||
script: python3 -m cibuildwheel --output-dir wheelhouse
|
script: python3 -m cibuildwheel --output-dir wheelhouse
|
||||||
after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl
|
after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl
|
||||||
# Deploy on windows
|
# Deploy on windows
|
||||||
@@ -62,7 +62,7 @@ jobs:
|
|||||||
name: Build and deploy Windows wheels
|
name: Build and deploy Windows wheels
|
||||||
os: windows
|
os: windows
|
||||||
language: shell
|
language: shell
|
||||||
install: python3 -m pip install cibuildwheel==2.12.1 twine
|
install: python3 -m pip install cibuildwheel==2.12.3 twine
|
||||||
script: python3 -m cibuildwheel --output-dir wheelhouse
|
script: python3 -m cibuildwheel --output-dir wheelhouse
|
||||||
after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl
|
after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl
|
||||||
|
|
||||||
|
|||||||
+47
-24
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[tool.black]
|
[tool.black]
|
||||||
line-length = 100
|
line-length = 100
|
||||||
target-version = ['py37', 'py38', 'py39', 'py310']
|
target-version = ['py37', 'py38', 'py39', 'py310', 'py311']
|
||||||
|
|
||||||
|
|
||||||
[tool.pytest.ini_options]
|
[tool.pytest.ini_options]
|
||||||
@@ -83,10 +83,10 @@ ignore = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[tool.pylint]
|
[tool.pylint]
|
||||||
master.py-version = "3.7"
|
py-version = "3.7"
|
||||||
master.jobs = "0"
|
jobs = "0"
|
||||||
master.fail-on = ["E", "F"]
|
fail-on = ["E", "F"]
|
||||||
master.fail-under = "9.8"
|
fail-under = "9.8"
|
||||||
reports.output-format = "colorized"
|
reports.output-format = "colorized"
|
||||||
messages_control.enable = [
|
messages_control.enable = [
|
||||||
"useless-suppression",
|
"useless-suppression",
|
||||||
@@ -120,30 +120,53 @@ messages_control.disable = [
|
|||||||
|
|
||||||
[tool.ruff]
|
[tool.ruff]
|
||||||
select = [
|
select = [
|
||||||
"E", "F", "W", # flake8
|
"E", "F", "W", # flake8
|
||||||
"B", "B904", # flake8-bugbear
|
"B", # flake8-bugbear
|
||||||
"I", # isort
|
"I", # isort
|
||||||
"ARG", # flake8-unused-arguments
|
"ARG", # flake8-unused-arguments
|
||||||
"C4", # flake8-comprehensions
|
"C4", # flake8-comprehensions
|
||||||
"EM", # flake8-errmsg
|
"EM", # flake8-errmsg
|
||||||
"ICN", # flake8-import-conventions
|
"ICN", # flake8-import-conventions
|
||||||
"ISC", # flake8-implicit-str-concat
|
"ISC", # flake8-implicit-str-concat
|
||||||
"PGH", # pygrep-hooks
|
"G", # flake8-logging-format
|
||||||
"PIE", # flake8-pie
|
"PGH", # pygrep-hooks
|
||||||
"PLC", "PLE", "PLW", # pylint
|
"PIE", # flake8-pie
|
||||||
"PT", # flake8-pytest-style
|
"PL", # pylint
|
||||||
"RET", # flake8-return
|
"PT", # flake8-pytest-style
|
||||||
"RUF", # Ruff-specific
|
"RET", # flake8-return
|
||||||
"SIM", # flake8-simplify
|
"RUF", # Ruff-specific
|
||||||
"UP", # pyupgrade
|
"SIM", # flake8-simplify
|
||||||
"YTT", # flake8-2020
|
"TID251", # flake8-tidy-imports.banned-api
|
||||||
|
"UP", # pyupgrade
|
||||||
|
"YTT", # flake8-2020
|
||||||
|
"EXE", # flake8-executable
|
||||||
]
|
]
|
||||||
extend-ignore = [
|
extend-ignore = [
|
||||||
"PLR2004", "E501",
|
"PLR", # Design related pylint codes
|
||||||
|
"E501", # Line too long
|
||||||
"RET504", "RET505", "RET508", # else after control flow
|
"RET504", "RET505", "RET508", # else after control flow
|
||||||
"PT004", # Rename suggested for returnless fixtures
|
"PT004", # Rename suggested for returnless fixtures
|
||||||
"PT007", # False positive (fixed upstream)
|
"PT007", # False positive (fixed upstream)
|
||||||
]
|
]
|
||||||
target-version = "py37"
|
target-version = "py37"
|
||||||
typing-modules = ["cibuildwheel.typing"]
|
typing-modules = ["cibuildwheel._compat.typing"]
|
||||||
flake8-unused-arguments.ignore-variadic-names = true
|
flake8-unused-arguments.ignore-variadic-names = true
|
||||||
|
|
||||||
|
[tool.ruff.flake8-tidy-imports.banned-api]
|
||||||
|
"typing.Mapping".msg = "Use collections.abc.Mapping instead."
|
||||||
|
"typing.Callable".msg = "Use collections.abc.Callable instead."
|
||||||
|
"typing.Iterator".msg = "Use collections.abc.Iterator instead."
|
||||||
|
"typing.Sequence".msg = "Use collections.abc.Sequence instead."
|
||||||
|
"typing.Set".msg = "Use collections.abc.Set instead."
|
||||||
|
"typing.Protocol".msg = "Use cibuildwheel._compat.typing.Protocol instead."
|
||||||
|
"typing.Final".msg = "Use cibuildwheel._compat.typing.Final instead."
|
||||||
|
"typing.Literal".msg = "Use cibuildwheel._compat.typing.Literal instead."
|
||||||
|
"typing.OrderedDict".msg = "Use cibuildwheel._compat.typing.OrderedDict instead."
|
||||||
|
"typing.TypedDict".msg = "Use cibuildwheel._compat.typing.TypedDict instead."
|
||||||
|
"typing.NotRequired".msg = "Use cibuildwheel._compat.typing.NotRequired instead."
|
||||||
|
"typing.assert_never".msg = "Use cibuildwheel._compat.typing.assert_never instead."
|
||||||
|
"tomllib".msg = "Use cibuildwheel._compat.tomllib instead."
|
||||||
|
"tomli".msg = "Use cibuildwheel._compat.tomllib instead."
|
||||||
|
|
||||||
|
[tool.ruff.per-file-ignores]
|
||||||
|
"unit_test/*" = ["PLC1901"]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[metadata]
|
[metadata]
|
||||||
name = cibuildwheel
|
name = cibuildwheel
|
||||||
version = 2.12.1
|
version = 2.12.3
|
||||||
description = Build Python wheels on CI with minimal configuration.
|
description = Build Python wheels on CI with minimal configuration.
|
||||||
long_description = file: README.md
|
long_description = file: README.md
|
||||||
long_description_content_type = text/markdown
|
long_description_content_type = text/markdown
|
||||||
|
|||||||
@@ -27,20 +27,9 @@ extras = {
|
|||||||
"rich>=9.6",
|
"rich>=9.6",
|
||||||
"packaging>=21.0",
|
"packaging>=21.0",
|
||||||
],
|
],
|
||||||
"mypy": [
|
|
||||||
"mypy>=0.901",
|
|
||||||
"types-jinja2",
|
|
||||||
"types-certifi",
|
|
||||||
"types-toml",
|
|
||||||
"types-jinja2",
|
|
||||||
"types-pyyaml",
|
|
||||||
"types-click",
|
|
||||||
"types-requests",
|
|
||||||
],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extras["dev"] = [
|
extras["dev"] = [
|
||||||
*extras["mypy"],
|
|
||||||
*extras["test"],
|
*extras["test"],
|
||||||
*extras["bin"],
|
*extras["bin"],
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -45,9 +45,7 @@ VERSION_REGEX = r"([\w-]+)==([^\s]+)"
|
|||||||
def get_versions_from_constraint_file(constraint_file):
|
def get_versions_from_constraint_file(constraint_file):
|
||||||
constraint_file_text = constraint_file.read_text(encoding="utf8")
|
constraint_file_text = constraint_file.read_text(encoding="utf8")
|
||||||
|
|
||||||
return {
|
return dict(re.findall(VERSION_REGEX, constraint_file_text))
|
||||||
package: version for package, version in re.findall(VERSION_REGEX, constraint_file_text)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("python_version", ["3.6", "3.8", "3.9"])
|
@pytest.mark.parametrize("python_version", ["3.6", "3.8", "3.9"])
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ basic_project = test_projects.new_c_project()
|
|||||||
|
|
||||||
|
|
||||||
def skip_if_no_msvc(arm64=False):
|
def skip_if_no_msvc(arm64=False):
|
||||||
programfiles = os.getenv("ProgramFiles(x86)", "") or os.getenv("ProgramFiles", "")
|
programfiles = os.getenv("PROGRAMFILES(X86)", "") or os.getenv("PROGRAMFILES", "")
|
||||||
if not programfiles:
|
if not programfiles:
|
||||||
pytest.skip("Requires %ProgramFiles(x86)% variable to be set")
|
pytest.skip("Requires %PROGRAMFILES(X86)% variable to be set")
|
||||||
|
|
||||||
vswhere = os.path.join(programfiles, "Microsoft Visual Studio", "Installer", "vswhere.exe")
|
vswhere = os.path.join(programfiles, "Microsoft Visual Studio", "Installer", "vswhere.exe")
|
||||||
if not os.path.isfile(vswhere):
|
if not os.path.isfile(vswhere):
|
||||||
|
|||||||
@@ -1,14 +1,8 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import sys
|
|
||||||
|
|
||||||
if sys.version_info >= (3, 11):
|
|
||||||
import tomllib
|
|
||||||
else:
|
|
||||||
import tomli as tomllib
|
|
||||||
|
|
||||||
from packaging.version import Version
|
from packaging.version import Version
|
||||||
|
|
||||||
|
from cibuildwheel._compat import tomllib
|
||||||
from cibuildwheel.extra import Printable, dump_python_configurations
|
from cibuildwheel.extra import Printable, dump_python_configurations
|
||||||
from cibuildwheel.util import resources_dir
|
from cibuildwheel.util import resources_dir
|
||||||
|
|
||||||
|
|||||||
@@ -6,12 +6,8 @@ from pathlib import Path
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
if sys.version_info >= (3, 11):
|
|
||||||
import tomllib
|
|
||||||
else:
|
|
||||||
import tomli as tomllib
|
|
||||||
|
|
||||||
from cibuildwheel.__main__ import main
|
from cibuildwheel.__main__ import main
|
||||||
|
from cibuildwheel._compat import tomllib
|
||||||
from cibuildwheel.environment import ParsedEnvironment
|
from cibuildwheel.environment import ParsedEnvironment
|
||||||
from cibuildwheel.options import BuildOptions, _get_pinned_container_images
|
from cibuildwheel.options import BuildOptions, _get_pinned_container_images
|
||||||
from cibuildwheel.util import BuildSelector, resources_dir, split_config_settings
|
from cibuildwheel.util import BuildSelector, resources_dir, split_config_settings
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ from __future__ import annotations
|
|||||||
import platform as platform_module
|
import platform as platform_module
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
|
import typing
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
from pathlib import PurePosixPath
|
from pathlib import PurePosixPath
|
||||||
from typing import cast
|
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
@@ -52,7 +52,7 @@ def test_build_default_launches(monkeypatch):
|
|||||||
|
|
||||||
main()
|
main()
|
||||||
|
|
||||||
build_in_container = cast(mock.Mock, linux.build_in_container)
|
build_in_container = typing.cast(mock.Mock, linux.build_in_container)
|
||||||
|
|
||||||
assert build_in_container.call_count == 4
|
assert build_in_container.call_count == 4
|
||||||
|
|
||||||
@@ -120,7 +120,7 @@ before-all = "true"
|
|||||||
|
|
||||||
main()
|
main()
|
||||||
|
|
||||||
build_in_container = cast(mock.Mock, linux.build_in_container)
|
build_in_container = typing.cast(mock.Mock, linux.build_in_container)
|
||||||
|
|
||||||
assert build_in_container.call_count == 6
|
assert build_in_container.call_count == 6
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from pathlib import Path
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from cibuildwheel.__main__ import get_build_identifiers
|
from cibuildwheel.__main__ import get_build_identifiers, get_platform_module
|
||||||
from cibuildwheel.bashlex_eval import local_environment_executor
|
from cibuildwheel.bashlex_eval import local_environment_executor
|
||||||
from cibuildwheel.environment import parse_environment
|
from cibuildwheel.environment import parse_environment
|
||||||
from cibuildwheel.options import (
|
from cibuildwheel.options import (
|
||||||
@@ -49,8 +49,9 @@ def test_options_1(tmp_path, monkeypatch):
|
|||||||
|
|
||||||
options = Options(platform="linux", command_line_arguments=args, env={})
|
options = Options(platform="linux", command_line_arguments=args, env={})
|
||||||
|
|
||||||
|
module = get_platform_module("linux")
|
||||||
identifiers = get_build_identifiers(
|
identifiers = get_build_identifiers(
|
||||||
platform="linux",
|
platform_module=module,
|
||||||
build_selector=options.globals.build_selector,
|
build_selector=options.globals.build_selector,
|
||||||
architectures=options.globals.architectures,
|
architectures=options.globals.architectures,
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user