Merge remote-tracking branch 'upstream/main' into arm64
This commit is contained in:
@@ -36,7 +36,7 @@ repos:
|
||||
exclude: ^cibuildwheel/resources/.*py$
|
||||
|
||||
- repo: https://github.com/psf/black
|
||||
rev: 22.6.0
|
||||
rev: 22.8.0
|
||||
hooks:
|
||||
- id: black
|
||||
|
||||
|
||||
@@ -50,6 +50,7 @@ images = [
|
||||
Image("manylinux_2_28", "x86_64", "quay.io/pypa/manylinux_2_28_x86_64", None),
|
||||
Image("manylinux_2_28", "aarch64", "quay.io/pypa/manylinux_2_28_aarch64", None),
|
||||
Image("manylinux_2_28", "ppc64le", "quay.io/pypa/manylinux_2_28_ppc64le", None),
|
||||
Image("manylinux_2_28", "s390x", "quay.io/pypa/manylinux_2_28_s390x", None),
|
||||
Image("manylinux_2_28", "pypy_x86_64", "quay.io/pypa/manylinux_2_28_x86_64", None),
|
||||
Image("manylinux_2_28", "pypy_aarch64", "quay.io/pypa/manylinux_2_28_aarch64", None),
|
||||
# musllinux_1_1 images
|
||||
|
||||
@@ -5,7 +5,6 @@ import os
|
||||
import shutil
|
||||
import sys
|
||||
import tarfile
|
||||
import tempfile
|
||||
import textwrap
|
||||
from pathlib import Path
|
||||
from tempfile import mkdtemp
|
||||
@@ -130,8 +129,8 @@ def main() -> None:
|
||||
return
|
||||
|
||||
# Tarfile builds require extraction and changing the directory
|
||||
with tempfile.TemporaryDirectory(prefix="cibw-sdist-") as temp_dir_str:
|
||||
temp_dir = Path(temp_dir_str)
|
||||
temp_dir = Path(mkdtemp(prefix="cibw-sdist-")).resolve(strict=True)
|
||||
try:
|
||||
with tarfile.open(args.package_dir) as tar:
|
||||
tar.extractall(path=temp_dir)
|
||||
|
||||
@@ -146,6 +145,12 @@ def main() -> None:
|
||||
|
||||
with chdir(temp_dir):
|
||||
build_in_directory(args)
|
||||
finally:
|
||||
# avoid https://github.com/python/cpython/issues/86962 by performing
|
||||
# cleanup manually
|
||||
shutil.rmtree(temp_dir, ignore_errors=sys.platform.startswith("win"))
|
||||
if temp_dir.exists():
|
||||
log.warning(f"Can't delete temporary folder '{str(temp_dir)}'")
|
||||
|
||||
|
||||
def build_in_directory(args: CommandLineArguments) -> None:
|
||||
@@ -253,6 +258,8 @@ def build_in_directory(args: CommandLineArguments) -> None:
|
||||
else:
|
||||
assert_never(platform)
|
||||
finally:
|
||||
# avoid https://github.com/python/cpython/issues/86962 by performing
|
||||
# cleanup manually
|
||||
shutil.rmtree(tmp_path, ignore_errors=sys.platform.startswith("win"))
|
||||
if tmp_path.exists():
|
||||
log.warning(f"Can't delete temporary folder '{str(tmp_path)}'")
|
||||
|
||||
@@ -20,6 +20,7 @@ from .util import (
|
||||
get_build_verbosity_extra_flags,
|
||||
prepare_command,
|
||||
read_python_configs,
|
||||
split_config_settings,
|
||||
unwrap,
|
||||
)
|
||||
|
||||
@@ -212,8 +213,10 @@ def build_in_container(
|
||||
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)
|
||||
|
||||
if build_options.build_frontend == "pip":
|
||||
extra_flags += verbosity_flags
|
||||
container.call(
|
||||
[
|
||||
"python",
|
||||
@@ -223,12 +226,13 @@ def build_in_container(
|
||||
container_package_dir,
|
||||
f"--wheel-dir={built_wheel_dir}",
|
||||
"--no-deps",
|
||||
*verbosity_flags,
|
||||
*extra_flags,
|
||||
],
|
||||
env=env,
|
||||
)
|
||||
elif build_options.build_frontend == "build":
|
||||
config_setting = " ".join(verbosity_flags)
|
||||
verbosity_setting = " ".join(verbosity_flags)
|
||||
extra_flags += (f"--config-setting={verbosity_setting}",)
|
||||
container.call(
|
||||
[
|
||||
"python",
|
||||
@@ -237,7 +241,7 @@ def build_in_container(
|
||||
container_package_dir,
|
||||
"--wheel",
|
||||
f"--outdir={built_wheel_dir}",
|
||||
f"--config-setting={config_setting}",
|
||||
*extra_flags,
|
||||
],
|
||||
env=env,
|
||||
)
|
||||
|
||||
@@ -34,6 +34,7 @@ from .util import (
|
||||
prepare_command,
|
||||
read_python_configs,
|
||||
shell,
|
||||
split_config_settings,
|
||||
unwrap,
|
||||
virtualenv,
|
||||
)
|
||||
@@ -345,8 +346,10 @@ def build(options: Options, tmp_path: Path) -> None:
|
||||
built_wheel_dir.mkdir()
|
||||
|
||||
verbosity_flags = get_build_verbosity_extra_flags(build_options.build_verbosity)
|
||||
extra_flags = split_config_settings(build_options.config_settings)
|
||||
|
||||
if build_options.build_frontend == "pip":
|
||||
extra_flags += verbosity_flags
|
||||
# Path.resolve() is needed. Without it pip wheel may try to fetch package from pypi.org
|
||||
# see https://github.com/pypa/cibuildwheel/pull/369
|
||||
call(
|
||||
@@ -357,11 +360,12 @@ def build(options: Options, tmp_path: Path) -> None:
|
||||
build_options.package_dir.resolve(),
|
||||
f"--wheel-dir={built_wheel_dir}",
|
||||
"--no-deps",
|
||||
*verbosity_flags,
|
||||
*extra_flags,
|
||||
env=env,
|
||||
)
|
||||
elif build_options.build_frontend == "build":
|
||||
config_setting = " ".join(verbosity_flags)
|
||||
verbosity_setting = " ".join(verbosity_flags)
|
||||
extra_flags += (f"--config-setting={verbosity_setting}",)
|
||||
build_env = env.copy()
|
||||
if build_options.dependency_constraints:
|
||||
constraint_path = (
|
||||
@@ -378,7 +382,7 @@ def build(options: Options, tmp_path: Path) -> None:
|
||||
build_options.package_dir,
|
||||
"--wheel",
|
||||
f"--outdir={built_wheel_dir}",
|
||||
f"--config-setting={config_setting}",
|
||||
*extra_flags,
|
||||
env=build_env,
|
||||
)
|
||||
else:
|
||||
|
||||
+24
-5
@@ -3,13 +3,14 @@ from __future__ import annotations
|
||||
import difflib
|
||||
import functools
|
||||
import os
|
||||
import shlex
|
||||
import sys
|
||||
import traceback
|
||||
from configparser import ConfigParser
|
||||
from contextlib import contextmanager
|
||||
from dataclasses import asdict, dataclass
|
||||
from pathlib import Path
|
||||
from typing import Any, Dict, Generator, List, Mapping, Union, cast
|
||||
from typing import Any, Dict, Generator, Iterator, List, Mapping, Union, cast
|
||||
|
||||
if sys.version_info >= (3, 11):
|
||||
import tomllib
|
||||
@@ -77,6 +78,7 @@ class BuildOptions:
|
||||
test_extras: str
|
||||
build_verbosity: int
|
||||
build_frontend: BuildFrontend
|
||||
config_settings: str
|
||||
|
||||
@property
|
||||
def package_dir(self) -> Path:
|
||||
@@ -293,8 +295,9 @@ class OptionsReader:
|
||||
accept platform versions of the environment variable. If this is an
|
||||
array it will be merged with "sep" before returning. If it is a table,
|
||||
it will be formatted with "table['item']" using {k} and {v} and merged
|
||||
with "table['sep']". Empty variables will not override if ignore_empty
|
||||
is True.
|
||||
with "table['sep']". If sep is also given, it will be used for arrays
|
||||
inside the table (must match table['sep']). Empty variables will not
|
||||
override if ignore_empty is True.
|
||||
"""
|
||||
|
||||
if name not in self.default_options and name not in self.default_platform_options:
|
||||
@@ -324,7 +327,9 @@ class OptionsReader:
|
||||
if isinstance(result, dict):
|
||||
if table is None:
|
||||
raise ConfigOptionError(f"{name!r} does not accept a table")
|
||||
return table["sep"].join(table["item"].format(k=k, v=v) for k, v in result.items())
|
||||
return table["sep"].join(
|
||||
item for k, v in result.items() for item in _inner_fmt(k, v, table["item"])
|
||||
)
|
||||
|
||||
if isinstance(result, list):
|
||||
if sep is None:
|
||||
@@ -337,6 +342,16 @@ class OptionsReader:
|
||||
return result
|
||||
|
||||
|
||||
def _inner_fmt(k: str, v: Any, table_item: str) -> Iterator[str]:
|
||||
if isinstance(v, list):
|
||||
for inner_v in v:
|
||||
qv = shlex.quote(inner_v)
|
||||
yield table_item.format(k=k, v=qv)
|
||||
else:
|
||||
qv = shlex.quote(v)
|
||||
yield table_item.format(k=k, v=qv)
|
||||
|
||||
|
||||
class Options:
|
||||
def __init__(self, platform: PlatformName, command_line_arguments: CommandLineArguments):
|
||||
self.platform = platform
|
||||
@@ -427,11 +442,14 @@ class Options:
|
||||
|
||||
build_frontend_str = self.reader.get("build-frontend", env_plat=False)
|
||||
environment_config = self.reader.get(
|
||||
"environment", table={"item": '{k}="{v}"', "sep": " "}
|
||||
"environment", table={"item": "{k}={v}", "sep": " "}
|
||||
)
|
||||
environment_pass = self.reader.get("environment-pass", sep=" ").split()
|
||||
before_build = self.reader.get("before-build", sep=" && ")
|
||||
repair_command = self.reader.get("repair-wheel-command", sep=" && ")
|
||||
config_settings = self.reader.get(
|
||||
"config-settings", table={"item": "{k}={v}", "sep": " "}
|
||||
)
|
||||
|
||||
dependency_versions = self.reader.get("dependency-versions")
|
||||
test_command = self.reader.get("test-command", sep=" && ")
|
||||
@@ -537,6 +555,7 @@ class Options:
|
||||
manylinux_images=manylinux_images or None,
|
||||
musllinux_images=musllinux_images or None,
|
||||
build_frontend=build_frontend,
|
||||
config_settings=config_settings,
|
||||
)
|
||||
|
||||
def check_for_invalid_configuration(self, identifiers: list[str]) -> None:
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#
|
||||
delocate==0.10.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.5
|
||||
distlib==0.3.6
|
||||
# via virtualenv
|
||||
filelock==3.8.0
|
||||
# via virtualenv
|
||||
@@ -14,7 +14,7 @@ platformdirs==2.5.2
|
||||
# via virtualenv
|
||||
typing-extensions==4.3.0
|
||||
# via delocate
|
||||
virtualenv==20.16.3
|
||||
virtualenv==20.16.4
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.37.1
|
||||
# via
|
||||
@@ -24,5 +24,5 @@ wheel==0.37.1
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
pip==22.2.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
setuptools==65.2.0
|
||||
setuptools==65.3.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#
|
||||
delocate==0.10.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.5
|
||||
distlib==0.3.6
|
||||
# via virtualenv
|
||||
filelock==3.8.0
|
||||
# via virtualenv
|
||||
@@ -14,7 +14,7 @@ platformdirs==2.5.2
|
||||
# via virtualenv
|
||||
typing-extensions==4.3.0
|
||||
# via delocate
|
||||
virtualenv==20.16.3
|
||||
virtualenv==20.16.4
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.37.1
|
||||
# via
|
||||
@@ -24,5 +24,5 @@ wheel==0.37.1
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
pip==22.2.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
setuptools==65.2.0
|
||||
setuptools==65.3.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#
|
||||
delocate==0.10.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.5
|
||||
distlib==0.3.6
|
||||
# via virtualenv
|
||||
filelock==3.4.1
|
||||
# via virtualenv
|
||||
@@ -20,7 +20,7 @@ typing-extensions==4.1.1
|
||||
# via
|
||||
# delocate
|
||||
# importlib-metadata
|
||||
virtualenv==20.16.3
|
||||
virtualenv==20.16.4
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.37.1
|
||||
# via
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#
|
||||
delocate==0.10.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.5
|
||||
distlib==0.3.6
|
||||
# via virtualenv
|
||||
filelock==3.8.0
|
||||
# via virtualenv
|
||||
@@ -18,7 +18,7 @@ typing-extensions==4.3.0
|
||||
# via
|
||||
# delocate
|
||||
# importlib-metadata
|
||||
virtualenv==20.16.3
|
||||
virtualenv==20.16.4
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.37.1
|
||||
# via
|
||||
@@ -30,5 +30,5 @@ zipp==3.8.1
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
pip==22.2.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
setuptools==65.2.0
|
||||
setuptools==65.3.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#
|
||||
delocate==0.10.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.5
|
||||
distlib==0.3.6
|
||||
# via virtualenv
|
||||
filelock==3.8.0
|
||||
# via virtualenv
|
||||
@@ -14,7 +14,7 @@ platformdirs==2.5.2
|
||||
# via virtualenv
|
||||
typing-extensions==4.3.0
|
||||
# via delocate
|
||||
virtualenv==20.16.3
|
||||
virtualenv==20.16.4
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.37.1
|
||||
# via
|
||||
@@ -24,5 +24,5 @@ wheel==0.37.1
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
pip==22.2.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
setuptools==65.2.0
|
||||
setuptools==65.3.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#
|
||||
delocate==0.10.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.5
|
||||
distlib==0.3.6
|
||||
# via virtualenv
|
||||
filelock==3.8.0
|
||||
# via virtualenv
|
||||
@@ -14,7 +14,7 @@ platformdirs==2.5.2
|
||||
# via virtualenv
|
||||
typing-extensions==4.3.0
|
||||
# via delocate
|
||||
virtualenv==20.16.3
|
||||
virtualenv==20.16.4
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.37.1
|
||||
# via
|
||||
@@ -24,5 +24,5 @@ wheel==0.37.1
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
pip==22.2.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
setuptools==65.2.0
|
||||
setuptools==65.3.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#
|
||||
delocate==0.10.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.5
|
||||
distlib==0.3.6
|
||||
# via virtualenv
|
||||
filelock==3.8.0
|
||||
# via virtualenv
|
||||
@@ -14,7 +14,7 @@ platformdirs==2.5.2
|
||||
# via virtualenv
|
||||
typing-extensions==4.3.0
|
||||
# via delocate
|
||||
virtualenv==20.16.3
|
||||
virtualenv==20.16.4
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.37.1
|
||||
# via
|
||||
@@ -24,5 +24,5 @@ wheel==0.37.1
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
pip==22.2.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
setuptools==65.2.0
|
||||
setuptools==65.3.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -5,6 +5,7 @@ test-skip = ""
|
||||
|
||||
archs = ["auto"]
|
||||
build-frontend = "pip"
|
||||
config-settings = {}
|
||||
dependency-versions = "pinned"
|
||||
environment = {}
|
||||
environment-pass = []
|
||||
|
||||
@@ -1,48 +1,49 @@
|
||||
[x86_64]
|
||||
manylinux1 = quay.io/pypa/manylinux1_x86_64:2022-08-21-7492cb5
|
||||
manylinux1 = quay.io/pypa/manylinux1_x86_64:2022-09-04-d1c2903
|
||||
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2022-08-21-92d3131
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-08-21-92d3131
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2022-08-21-92d3131
|
||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2022-08-21-92d3131
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2022-09-04-870f6a2
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-09-04-870f6a2
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2022-09-04-870f6a2
|
||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2022-09-04-870f6a2
|
||||
|
||||
[i686]
|
||||
manylinux1 = quay.io/pypa/manylinux1_i686:2022-08-21-7492cb5
|
||||
manylinux1 = quay.io/pypa/manylinux1_i686:2022-09-04-d1c2903
|
||||
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2022-08-21-92d3131
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-08-21-92d3131
|
||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2022-08-21-92d3131
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2022-09-04-870f6a2
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-09-04-870f6a2
|
||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2022-09-04-870f6a2
|
||||
|
||||
[pypy_x86_64]
|
||||
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2022-08-21-92d3131
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-08-21-92d3131
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2022-08-21-92d3131
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2022-09-04-870f6a2
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-09-04-870f6a2
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2022-09-04-870f6a2
|
||||
|
||||
[pypy_i686]
|
||||
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2022-08-21-92d3131
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-08-21-92d3131
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2022-09-04-870f6a2
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-09-04-870f6a2
|
||||
|
||||
[aarch64]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2022-08-21-92d3131
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-08-21-92d3131
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2022-08-21-92d3131
|
||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2022-08-21-92d3131
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2022-09-04-870f6a2
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-09-04-870f6a2
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2022-09-04-870f6a2
|
||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2022-09-04-870f6a2
|
||||
|
||||
[ppc64le]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2022-08-21-92d3131
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-08-21-92d3131
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2022-08-21-92d3131
|
||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2022-08-21-92d3131
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2022-09-04-870f6a2
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-09-04-870f6a2
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2022-09-04-870f6a2
|
||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2022-09-04-870f6a2
|
||||
|
||||
[s390x]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2022-08-21-92d3131
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-08-21-92d3131
|
||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2022-08-21-92d3131
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2022-09-04-870f6a2
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-09-04-870f6a2
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2022-09-04-870f6a2
|
||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2022-09-04-870f6a2
|
||||
|
||||
[pypy_aarch64]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2022-08-21-92d3131
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-08-21-92d3131
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2022-08-21-92d3131
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2022-09-04-870f6a2
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-09-04-870f6a2
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2022-09-04-870f6a2
|
||||
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
version = "20.16.3"
|
||||
url = "https://github.com/pypa/get-virtualenv/blob/20.16.3/public/virtualenv.pyz?raw=true"
|
||||
version = "20.16.4"
|
||||
url = "https://github.com/pypa/get-virtualenv/blob/20.16.4/public/virtualenv.pyz?raw=true"
|
||||
|
||||
@@ -60,6 +60,7 @@ __all__ = [
|
||||
"strtobool",
|
||||
"cached_property",
|
||||
"chdir",
|
||||
"split_config_settings",
|
||||
]
|
||||
|
||||
resources_dir: Final = Path(__file__).parent / "resources"
|
||||
@@ -205,6 +206,11 @@ def get_build_verbosity_extra_flags(level: int) -> list[str]:
|
||||
return []
|
||||
|
||||
|
||||
def split_config_settings(config_settings: str) -> list[str]:
|
||||
config_settings_list = shlex.split(config_settings)
|
||||
return [f"--config-setting={setting}" for setting in config_settings_list]
|
||||
|
||||
|
||||
def read_python_configs(config: PlatformName) -> list[dict[str, str]]:
|
||||
input_file = resources_dir / "build-platforms.toml"
|
||||
with input_file.open("rb") as f:
|
||||
|
||||
@@ -34,6 +34,7 @@ from .util import (
|
||||
prepare_command,
|
||||
read_python_configs,
|
||||
shell,
|
||||
split_config_settings,
|
||||
unwrap,
|
||||
virtualenv,
|
||||
)
|
||||
@@ -407,8 +408,10 @@ def build(options: Options, tmp_path: Path) -> None:
|
||||
built_wheel_dir.mkdir()
|
||||
|
||||
verbosity_flags = get_build_verbosity_extra_flags(build_options.build_verbosity)
|
||||
extra_flags = split_config_settings(build_options.config_settings)
|
||||
|
||||
if build_options.build_frontend == "pip":
|
||||
extra_flags += verbosity_flags
|
||||
# Path.resolve() is needed. Without it pip wheel may try to fetch package from pypi.org
|
||||
# see https://github.com/pypa/cibuildwheel/pull/369
|
||||
call(
|
||||
@@ -419,11 +422,12 @@ def build(options: Options, tmp_path: Path) -> None:
|
||||
options.globals.package_dir.resolve(),
|
||||
f"--wheel-dir={built_wheel_dir}",
|
||||
"--no-deps",
|
||||
*get_build_verbosity_extra_flags(build_options.build_verbosity),
|
||||
*extra_flags,
|
||||
env=env,
|
||||
)
|
||||
elif build_options.build_frontend == "build":
|
||||
config_setting = " ".join(verbosity_flags)
|
||||
verbosity_setting = " ".join(verbosity_flags)
|
||||
extra_flags += (f"--config-setting={verbosity_setting}",)
|
||||
build_env = env.copy()
|
||||
if build_options.dependency_constraints:
|
||||
constraints_path = (
|
||||
@@ -450,7 +454,7 @@ def build(options: Options, tmp_path: Path) -> None:
|
||||
build_options.package_dir,
|
||||
"--wheel",
|
||||
f"--outdir={built_wheel_dir}",
|
||||
f"--config-setting={config_setting}",
|
||||
*extra_flags,
|
||||
env=build_env,
|
||||
)
|
||||
else:
|
||||
|
||||
+31
-1
@@ -529,6 +529,36 @@ Choose which build backend to use. Can either be "pip", which will run
|
||||
build-frontend = "pip"
|
||||
```
|
||||
|
||||
### `CIBW_CONFIG_SETTINGS` {: #config-settings}
|
||||
> Specify config-settings for the build backend.
|
||||
|
||||
Specify config settings for the build backend. Each space separated
|
||||
item will be passed via `--config-setting`. In TOML, you can specify
|
||||
a table of items, including arrays.
|
||||
|
||||
!!! tip
|
||||
Currently, "build" supports arrays for options, but "pip" only supports
|
||||
single values.
|
||||
|
||||
Platform-specific environment variables also available:<br/>
|
||||
`CIBW_BEFORE_ALL_MACOS` | `CIBW_BEFORE_ALL_WINDOWS` | `CIBW_BEFORE_ALL_LINUX`
|
||||
|
||||
|
||||
#### Examples
|
||||
|
||||
!!! tab examples "Environment variables"
|
||||
|
||||
```yaml
|
||||
CIBW_CONFIG_SETTINGS: "--build-option=--use-mypyc"
|
||||
```
|
||||
|
||||
!!! tab examples "pyproject.toml"
|
||||
|
||||
```toml
|
||||
[tool.cibuildwheel.config-settings]
|
||||
--build-option = "--use-mypyc"
|
||||
```
|
||||
|
||||
|
||||
### `CIBW_ENVIRONMENT` {: #environment}
|
||||
> Set environment variables needed during the build
|
||||
@@ -911,7 +941,7 @@ The available options are (default value):
|
||||
Set an alternative Docker image to be used for building [manylinux / musllinux](https://github.com/pypa/manylinux) wheels.
|
||||
|
||||
For `CIBW_MANYLINUX_*_IMAGE`, the value of this option can either be set to `manylinux1`, `manylinux2010`, `manylinux2014`, `manylinux_2_24` or `manylinux_2_28` to use a pinned version of the [official manylinux images](https://github.com/pypa/manylinux). Alternatively, set these options to any other valid Docker image name. For PyPy, the `manylinux1` image is not available. For architectures other
|
||||
than x86 (x86\_64 and i686) `manylinux2014`, `manylinux_2_24` or `manylinux_2_28` must be used, because the first version of the manylinux specification that supports additional architectures is `manylinux2014`. `manylinux_2_28` is not supported for `i686` & `s390x` architectures.
|
||||
than x86 (x86\_64 and i686) `manylinux2014`, `manylinux_2_24` or `manylinux_2_28` must be used, because the first version of the manylinux specification that supports additional architectures is `manylinux2014`. `manylinux_2_28` is not supported for `i686` architecture.
|
||||
|
||||
For `CIBW_MUSLLINUX_*_IMAGE`, the value of this option can either be set to `musllinux_1_1` to use a pinned version of the [official musllinux images](https://github.com/pypa/musllinux). Alternatively, set these options to any other valid Docker image name.
|
||||
|
||||
|
||||
+110
-109
@@ -26,9 +26,9 @@ title: Working examples
|
||||
| [duckdb][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | DuckDB is an in-process SQL OLAP Database Management System |
|
||||
| [Apache Beam][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Apache Beam is a unified programming model for Batch and Streaming data processing. |
|
||||
| [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. |
|
||||
| [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. |
|
||||
| [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. |
|
||||
| [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. |
|
||||
| [twisted-iocpsupport][] | ![github icon][] | ![windows icon][] | A submodule of Twisted that hooks into native C APIs using Cython. |
|
||||
| [PyOxidizer][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A modern Python application packaging and distribution tool |
|
||||
| [websockets][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | Library for building WebSocket servers and clients. Mostly written in Python, with a small C 'speedups' extension module. |
|
||||
@@ -59,10 +59,10 @@ title: Working examples
|
||||
| [OpenTimelineIO][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Open Source API and interchange format for editorial timeline information. |
|
||||
| [aioquic][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | QUIC and HTTP/3 implementation in Python |
|
||||
| [ruptures][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Extensive Cython + NumPy [pyproject.toml](https://github.com/deepcharles/ruptures/blob/master/pyproject.toml) example. |
|
||||
| [DeepForest][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | An Efficient, Scalable and Optimized Python Framework for Deep Forest (2021.2.1) |
|
||||
| [Psycopg 3][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A modern implementation of a PostgreSQL adapter for Python |
|
||||
| [google neuroglancer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | WebGL-based viewer for volumetric data |
|
||||
| [DeepForest][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | An Efficient, Scalable and Optimized Python Framework for Deep Forest (2021.2.1) |
|
||||
| [envd][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | 🏕️ Development environment for machine learning |
|
||||
| [google neuroglancer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | WebGL-based viewer for volumetric data |
|
||||
| [Parselmouth][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python interface to the Praat software package, using pybind11, C++17 and CMake, with the core Praat static library built only once and shared between wheels. |
|
||||
| [AutoPy][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. |
|
||||
| [H3-py][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Python bindings for H3, a hierarchical hexagonal geospatial indexing system |
|
||||
@@ -85,8 +85,8 @@ title: Working examples
|
||||
| [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 |
|
||||
| [PyGLM][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Fast OpenGL Mathematics (GLM) for Python |
|
||||
| [boost-histogram][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Supports full range of wheels, including PyPy and alternate archs. |
|
||||
| [bx-python][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | A library that includes Cython extensions. |
|
||||
| [boost-histogram][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Supports full range of wheels, including PyPy and alternate archs. |
|
||||
| [TgCrypto][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. |
|
||||
| [iDynTree][] | ![github icon][] | ![linux icon][] | Uses manylinux_2_24 |
|
||||
| [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 |
|
||||
@@ -131,8 +131,8 @@ title: Working examples
|
||||
[Apache Beam]: https://github.com/apache/beam
|
||||
[asyncpg]: https://github.com/MagicStack/asyncpg
|
||||
[PyGame]: https://github.com/pygame/pygame
|
||||
[scikit-image]: https://github.com/scikit-image/scikit-image
|
||||
[cmake]: https://github.com/scikit-build/cmake-python-distributions
|
||||
[scikit-image]: https://github.com/scikit-image/scikit-image
|
||||
[twisted-iocpsupport]: https://github.com/twisted/twisted-iocpsupport
|
||||
[PyOxidizer]: https://github.com/indygreg/PyOxidizer
|
||||
[websockets]: https://github.com/aaugustin/websockets
|
||||
@@ -163,10 +163,10 @@ title: Working examples
|
||||
[OpenTimelineIO]: https://github.com/PixarAnimationStudios/OpenTimelineIO
|
||||
[aioquic]: https://github.com/aiortc/aioquic
|
||||
[ruptures]: https://github.com/deepcharles/ruptures
|
||||
[DeepForest]: https://github.com/LAMDA-NJU/Deep-Forest
|
||||
[Psycopg 3]: https://github.com/psycopg/psycopg
|
||||
[google neuroglancer]: https://github.com/google/neuroglancer
|
||||
[DeepForest]: https://github.com/LAMDA-NJU/Deep-Forest
|
||||
[envd]: https://github.com/tensorchord/envd
|
||||
[google neuroglancer]: https://github.com/google/neuroglancer
|
||||
[Parselmouth]: https://github.com/YannickJadoul/Parselmouth
|
||||
[AutoPy]: https://github.com/autopilot-rs/autopy
|
||||
[H3-py]: https://github.com/uber/h3-py
|
||||
@@ -189,8 +189,8 @@ title: Working examples
|
||||
[iminuit]: https://github.com/scikit-hep/iminuit
|
||||
[Tokenizer]: https://github.com/OpenNMT/Tokenizer
|
||||
[PyGLM]: https://github.com/Zuzu-Typ/PyGLM
|
||||
[boost-histogram]: https://github.com/scikit-hep/boost-histogram
|
||||
[bx-python]: https://github.com/bxlab/bx-python
|
||||
[boost-histogram]: https://github.com/scikit-hep/boost-histogram
|
||||
[TgCrypto]: https://github.com/pyrogram/tgcrypto
|
||||
[iDynTree]: https://github.com/robotology/idyntree
|
||||
[mosec]: https://github.com/mosecorg/mosec
|
||||
@@ -222,113 +222,114 @@ title: Working examples
|
||||
[circleci icon]: data/readme_icons/circleci.svg
|
||||
[gitlab icon]: data/readme_icons/gitlab.svg
|
||||
[travisci icon]: data/readme_icons/travisci.svg
|
||||
[cirrusci icon]: data/readme_icons/cirrusci.svg
|
||||
[windows icon]: data/readme_icons/windows.svg
|
||||
[apple icon]: data/readme_icons/apple.svg
|
||||
[linux icon]: data/readme_icons/linux.svg
|
||||
|
||||
<!-- scikit-learn: 51114, last pushed 0 days ago -->
|
||||
<!-- NumPy: 21249, last pushed 0 days ago -->
|
||||
<!-- Tornado: 20697, last pushed 6 days ago -->
|
||||
<!-- pytorch-fairseq: 18945, last pushed 3 days ago -->
|
||||
<!-- Matplotlib: 15998, last pushed 0 days ago -->
|
||||
<!-- NCNN: 15284, last pushed 0 days ago -->
|
||||
<!-- Kivy: 14913, last pushed 4 days ago -->
|
||||
<!-- Prophet: 14814, last pushed 16 days ago -->
|
||||
<!-- MyPy: 13635, last pushed 0 days ago -->
|
||||
<!-- pydantic: 10836, last pushed 0 days ago -->
|
||||
<!-- MemRay: 9119, last pushed 3 days ago -->
|
||||
<!-- uvloop: 8809, last pushed 5 days ago -->
|
||||
<!-- psutil: 8623, last pushed 3 days ago -->
|
||||
<!-- vaex: 7240, last pushed 2 days ago -->
|
||||
<!-- Google Benchmark: 6751, last pushed 0 days ago -->
|
||||
<!-- duckdb: 5977, last pushed 0 days ago -->
|
||||
<!-- Apache Beam: 5785, last pushed 0 days ago -->
|
||||
<!-- asyncpg: 5603, last pushed 8 days ago -->
|
||||
<!-- PyGame: 5145, last pushed 0 days ago -->
|
||||
<!-- scikit-image: 5019, last pushed 0 days ago -->
|
||||
<!-- cmake: 4999, last pushed 0 days ago -->
|
||||
<!-- twisted-iocpsupport: 4709, last pushed 0 days ago -->
|
||||
<!-- PyOxidizer: 4178, last pushed 0 days ago -->
|
||||
<!-- websockets: 4123, last pushed 3 days ago -->
|
||||
<!-- cvxpy: 4044, last pushed 4 days ago -->
|
||||
<!-- Triton: 3926, last pushed 0 days ago -->
|
||||
<!-- UltraJSON: 3801, last pushed 13 days ago -->
|
||||
<!-- River: 3532, last pushed 1 days ago -->
|
||||
<!-- OpenSpiel: 3291, last pushed 0 days ago -->
|
||||
<!-- pyzmq: 3139, last pushed 9 days ago -->
|
||||
<!-- aiortc: 3043, last pushed 6 days ago -->
|
||||
<!-- Implicit: 2918, last pushed 0 days ago -->
|
||||
<!-- vispy: 2915, last pushed 16 days ago -->
|
||||
<!-- Confluent client for Kafka: 2894, last pushed 3 days ago -->
|
||||
<!-- tinyobjloader: 2617, last pushed 47 days ago -->
|
||||
<!-- Dependency Injector: 2300, last pushed 18 days ago -->
|
||||
<!-- coverage.py: 2159, last pushed 0 days ago -->
|
||||
<!-- PyCryptodome: 2098, last pushed 1 days ago -->
|
||||
<!-- PyYAML: 1910, last pushed 7 days ago -->
|
||||
<!-- numexpr: 1796, last pushed 2 days ago -->
|
||||
<!-- h5py: 1764, last pushed 3 days ago -->
|
||||
<!-- Wrapt: 1728, last pushed 112 days ago -->
|
||||
<!-- PyAV: 1632, last pushed 6 days ago -->
|
||||
<!-- SimpleJSON: 1512, last pushed 51 days ago -->
|
||||
<!-- pikepdf: 1466, last pushed 1 days ago -->
|
||||
<!-- OpenColorIO: 1357, last pushed 40 days ago -->
|
||||
<!-- Line Profiler: 1322, last pushed 4 days ago -->
|
||||
<!-- PyTables: 1142, last pushed 0 days ago -->
|
||||
<!-- OpenTimelineIO: 1084, last pushed 3 days ago -->
|
||||
<!-- aioquic: 1031, last pushed 2 days ago -->
|
||||
<!-- ruptures: 1017, last pushed 45 days ago -->
|
||||
<!-- DeepForest: 773, last pushed 99 days ago -->
|
||||
<!-- Psycopg 3: 759, last pushed 1 days ago -->
|
||||
<!-- google neuroglancer: 747, last pushed 2 days ago -->
|
||||
<!-- envd: 736, last pushed 1 days ago -->
|
||||
<!-- Parselmouth: 675, last pushed 42 days ago -->
|
||||
<!-- AutoPy: 671, last pushed 239 days ago -->
|
||||
<!-- H3-py: 559, last pushed 0 days ago -->
|
||||
<!-- Rtree: 497, last pushed 124 days ago -->
|
||||
<!-- markupsafe: 487, last pushed 20 days ago -->
|
||||
<!-- python-rapidjson: 456, last pushed 32 days ago -->
|
||||
<!-- python-snappy: 444, last pushed 158 days ago -->
|
||||
<!-- pybind11 cmake_example: 431, last pushed 10 days ago -->
|
||||
<!-- KDEpy: 396, last pushed 192 days ago -->
|
||||
<!-- tgcalls: 385, last pushed 51 days ago -->
|
||||
<!-- pybind11 python_example: 356, last pushed 10 days ago -->
|
||||
<!-- dd-trace-py: 353, last pushed 2 days ago -->
|
||||
<!-- CTranslate2: 322, last pushed 16 days ago -->
|
||||
<!-- time-machine: 320, last pushed 5 days ago -->
|
||||
<!-- sourmash: 317, last pushed 0 days ago -->
|
||||
<!-- cyvcf2: 302, last pushed 6 days ago -->
|
||||
<!-- matrixprofile: 278, last pushed 48 days ago -->
|
||||
<!-- abess: 275, last pushed 0 days ago -->
|
||||
<!-- jq.py: 224, last pushed 196 days ago -->
|
||||
<!-- iminuit: 210, last pushed 5 days ago -->
|
||||
<!-- Tokenizer: 187, last pushed 16 days ago -->
|
||||
<!-- PyGLM: 149, last pushed 146 days ago -->
|
||||
<!-- boost-histogram: 116, last pushed 3 days ago -->
|
||||
<!-- bx-python: 114, last pushed 228 days ago -->
|
||||
<!-- TgCrypto: 110, last pushed 170 days ago -->
|
||||
<!-- iDynTree: 108, last pushed 3 days ago -->
|
||||
<!-- mosec: 102, last pushed 2 days ago -->
|
||||
<!-- Python-WebRTC: 93, last pushed 164 days ago -->
|
||||
<!-- pybase64: 87, last pushed 0 days ago -->
|
||||
<!-- scikit-learn: 51270, last pushed 0 days ago -->
|
||||
<!-- NumPy: 21357, last pushed 0 days ago -->
|
||||
<!-- Tornado: 20724, last pushed 6 days ago -->
|
||||
<!-- pytorch-fairseq: 19079, last pushed 2 days ago -->
|
||||
<!-- Matplotlib: 16066, last pushed 0 days ago -->
|
||||
<!-- NCNN: 15395, last pushed 0 days ago -->
|
||||
<!-- Kivy: 14970, last pushed 0 days ago -->
|
||||
<!-- Prophet: 14851, last pushed 0 days ago -->
|
||||
<!-- MyPy: 13708, last pushed 0 days ago -->
|
||||
<!-- pydantic: 10965, last pushed 1 days ago -->
|
||||
<!-- MemRay: 9186, last pushed 1 days ago -->
|
||||
<!-- uvloop: 8832, last pushed 2 days ago -->
|
||||
<!-- psutil: 8668, last pushed 0 days ago -->
|
||||
<!-- vaex: 7272, last pushed 3 days ago -->
|
||||
<!-- Google Benchmark: 6803, last pushed 1 days ago -->
|
||||
<!-- duckdb: 6189, last pushed 0 days ago -->
|
||||
<!-- Apache Beam: 5815, last pushed 0 days ago -->
|
||||
<!-- asyncpg: 5616, last pushed 22 days ago -->
|
||||
<!-- PyGame: 5173, last pushed 0 days ago -->
|
||||
<!-- cmake: 5036, last pushed 0 days ago -->
|
||||
<!-- scikit-image: 5035, last pushed 0 days ago -->
|
||||
<!-- twisted-iocpsupport: 4732, last pushed 0 days ago -->
|
||||
<!-- PyOxidizer: 4223, last pushed 12 days ago -->
|
||||
<!-- websockets: 4147, last pushed 10 days ago -->
|
||||
<!-- cvxpy: 4059, last pushed 2 days ago -->
|
||||
<!-- Triton: 3952, last pushed 0 days ago -->
|
||||
<!-- UltraJSON: 3825, last pushed 27 days ago -->
|
||||
<!-- River: 3571, last pushed 2 days ago -->
|
||||
<!-- OpenSpiel: 3304, last pushed 0 days ago -->
|
||||
<!-- pyzmq: 3150, last pushed 5 days ago -->
|
||||
<!-- aiortc: 3053, last pushed 20 days ago -->
|
||||
<!-- Implicit: 2932, last pushed 4 days ago -->
|
||||
<!-- vispy: 2924, last pushed 2 days ago -->
|
||||
<!-- Confluent client for Kafka: 2917, last pushed 3 days ago -->
|
||||
<!-- tinyobjloader: 2630, last pushed 61 days ago -->
|
||||
<!-- Dependency Injector: 2334, last pushed 32 days ago -->
|
||||
<!-- coverage.py: 2175, last pushed 0 days ago -->
|
||||
<!-- PyCryptodome: 2111, last pushed 2 days ago -->
|
||||
<!-- PyYAML: 1920, last pushed 7 days ago -->
|
||||
<!-- numexpr: 1804, last pushed 16 days ago -->
|
||||
<!-- h5py: 1776, last pushed 3 days ago -->
|
||||
<!-- Wrapt: 1739, last pushed 11 days ago -->
|
||||
<!-- PyAV: 1647, last pushed 6 days ago -->
|
||||
<!-- SimpleJSON: 1513, last pushed 65 days ago -->
|
||||
<!-- pikepdf: 1484, last pushed 4 days ago -->
|
||||
<!-- OpenColorIO: 1360, last pushed 4 days ago -->
|
||||
<!-- Line Profiler: 1353, last pushed 18 days ago -->
|
||||
<!-- PyTables: 1144, last pushed 11 days ago -->
|
||||
<!-- OpenTimelineIO: 1087, last pushed 0 days ago -->
|
||||
<!-- aioquic: 1045, last pushed 16 days ago -->
|
||||
<!-- ruptures: 1035, last pushed 10 days ago -->
|
||||
<!-- Psycopg 3: 776, last pushed 0 days ago -->
|
||||
<!-- DeepForest: 775, last pushed 114 days ago -->
|
||||
<!-- envd: 759, last pushed 0 days ago -->
|
||||
<!-- google neuroglancer: 750, last pushed 2 days ago -->
|
||||
<!-- Parselmouth: 684, last pushed 56 days ago -->
|
||||
<!-- AutoPy: 672, last pushed 253 days ago -->
|
||||
<!-- H3-py: 561, last pushed 7 days ago -->
|
||||
<!-- Rtree: 501, last pushed 138 days ago -->
|
||||
<!-- markupsafe: 491, last pushed 3 days ago -->
|
||||
<!-- python-rapidjson: 457, last pushed 46 days ago -->
|
||||
<!-- python-snappy: 445, last pushed 172 days ago -->
|
||||
<!-- pybind11 cmake_example: 433, last pushed 24 days ago -->
|
||||
<!-- KDEpy: 399, last pushed 206 days ago -->
|
||||
<!-- tgcalls: 388, last pushed 65 days ago -->
|
||||
<!-- pybind11 python_example: 358, last pushed 24 days ago -->
|
||||
<!-- dd-trace-py: 356, last pushed 2 days ago -->
|
||||
<!-- CTranslate2: 330, last pushed 2 days ago -->
|
||||
<!-- time-machine: 321, last pushed 8 days ago -->
|
||||
<!-- sourmash: 320, last pushed 0 days ago -->
|
||||
<!-- cyvcf2: 304, last pushed 20 days ago -->
|
||||
<!-- matrixprofile: 280, last pushed 62 days ago -->
|
||||
<!-- abess: 278, last pushed 9 days ago -->
|
||||
<!-- jq.py: 228, last pushed 3 days ago -->
|
||||
<!-- iminuit: 210, last pushed 9 days ago -->
|
||||
<!-- Tokenizer: 186, last pushed 4 days ago -->
|
||||
<!-- PyGLM: 150, last pushed 160 days ago -->
|
||||
<!-- bx-python: 116, last pushed 7 days ago -->
|
||||
<!-- boost-histogram: 116, last pushed 6 days ago -->
|
||||
<!-- TgCrypto: 110, last pushed 184 days ago -->
|
||||
<!-- iDynTree: 108, last pushed 4 days ago -->
|
||||
<!-- mosec: 104, last pushed 0 days ago -->
|
||||
<!-- Python-WebRTC: 93, last pushed 178 days ago -->
|
||||
<!-- pybase64: 87, last pushed 1 days ago -->
|
||||
<!-- Arbor: 78, last pushed 2 days ago -->
|
||||
<!-- fathon: 66, last pushed 80 days ago -->
|
||||
<!-- etebase-py: 58, last pushed 46 days ago -->
|
||||
<!-- polaroid: 52, last pushed 102 days ago -->
|
||||
<!-- fathon: 67, last pushed 94 days ago -->
|
||||
<!-- etebase-py: 58, last pushed 60 days ago -->
|
||||
<!-- polaroid: 53, last pushed 116 days ago -->
|
||||
<!-- cf-units: 49, last pushed 0 days ago -->
|
||||
<!-- Imagecodecs (fork): 47, last pushed 13 days ago -->
|
||||
<!-- pillow-heif: 44, last pushed 1 days ago -->
|
||||
<!-- power-grid-model: 43, last pushed 0 days ago -->
|
||||
<!-- clang-format: 41, last pushed 19 days ago -->
|
||||
<!-- numpythia: 34, last pushed 18 days ago -->
|
||||
<!-- pybind11 scikit_build_example: 33, last pushed 10 days ago -->
|
||||
<!-- pyjet: 33, last pushed 18 days ago -->
|
||||
<!-- Imagecodecs (fork): 47, last pushed 27 days ago -->
|
||||
<!-- pillow-heif: 46, last pushed 15 days ago -->
|
||||
<!-- power-grid-model: 46, last pushed 4 days ago -->
|
||||
<!-- clang-format: 43, last pushed 3 days ago -->
|
||||
<!-- numpythia: 34, last pushed 4 days ago -->
|
||||
<!-- pybind11 scikit_build_example: 33, last pushed 24 days ago -->
|
||||
<!-- pyjet: 33, last pushed 4 days ago -->
|
||||
<!-- ninja: 25, last pushed 4 days ago -->
|
||||
<!-- GSD: 19, last pushed 2 days ago -->
|
||||
<!-- pyinstrument_cext: 10, last pushed 317 days ago -->
|
||||
<!-- CorrectionLib: 10, last pushed 9 days ago -->
|
||||
<!-- xmlstarlet: 9, last pushed 6 days ago -->
|
||||
<!-- SiPM: 7, last pushed 81 days ago -->
|
||||
<!-- ril: 4, last pushed 2 days ago -->
|
||||
<!-- GSD: 19, last pushed 3 days ago -->
|
||||
<!-- pyinstrument_cext: 10, last pushed 331 days ago -->
|
||||
<!-- CorrectionLib: 10, last pushed 4 days ago -->
|
||||
<!-- xmlstarlet: 9, last pushed 20 days ago -->
|
||||
<!-- SiPM: 7, last pushed 95 days ago -->
|
||||
<!-- ril: 3, last pushed 16 days ago -->
|
||||
|
||||
<!-- END bin/projects.py -->
|
||||
|
||||
|
||||
@@ -59,8 +59,6 @@ def test(manylinux_image, tmp_path):
|
||||
elif platform.machine() not in ["x86_64", "i686"]:
|
||||
if manylinux_image in ["manylinux1", "manylinux2010"]:
|
||||
pytest.skip("manylinux1 and 2010 doesn't exist for non-x86 architectures")
|
||||
elif manylinux_image == "manylinux_2_28" and platform.machine() == "s390x":
|
||||
pytest.skip("manylinux_2_28 doesn't exist for s390x architecture")
|
||||
elif manylinux_image == "manylinux_2_28" and platform.machine() == "i686":
|
||||
pytest.skip("manylinux_2_28 doesn't exist for i686 architecture")
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ else:
|
||||
from cibuildwheel.__main__ import main
|
||||
from cibuildwheel.environment import ParsedEnvironment
|
||||
from cibuildwheel.options import BuildOptions, _get_pinned_container_images
|
||||
from cibuildwheel.util import BuildSelector, resources_dir
|
||||
from cibuildwheel.util import BuildSelector, resources_dir, split_config_settings
|
||||
|
||||
# CIBW_PLATFORM is tested in main_platform_test.py
|
||||
|
||||
@@ -263,6 +263,27 @@ def test_build_verbosity(
|
||||
assert build_options.build_verbosity == expected_verbosity
|
||||
|
||||
|
||||
@pytest.mark.parametrize("platform_specific", [False, True])
|
||||
def test_config_settings(platform_specific, platform, intercepted_build_args, monkeypatch):
|
||||
config_settings = 'setting=value setting=value2 other="something else"'
|
||||
if platform_specific:
|
||||
monkeypatch.setenv("CIBW_CONFIG_SETTINGS_" + platform.upper(), config_settings)
|
||||
monkeypatch.setenv("CIBW_CONFIG_SETTIGNS", "a=b")
|
||||
else:
|
||||
monkeypatch.setenv("CIBW_CONFIG_SETTINGS", config_settings)
|
||||
|
||||
main()
|
||||
build_options = intercepted_build_args.args[0].build_options(identifier=None)
|
||||
|
||||
assert build_options.config_settings == config_settings
|
||||
|
||||
assert split_config_settings(config_settings) == [
|
||||
"--config-setting=setting=value",
|
||||
"--config-setting=setting=value2",
|
||||
"--config-setting=other=something else",
|
||||
]
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"selector",
|
||||
[
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import platform as platform_module
|
||||
import textwrap
|
||||
|
||||
import pytest
|
||||
|
||||
@@ -58,7 +59,7 @@ test_command: 'pyproject'
|
||||
|
||||
default_build_options = options.build_options(identifier=None)
|
||||
|
||||
assert default_build_options.environment == parse_environment('FOO="BAR"')
|
||||
assert default_build_options.environment == parse_environment("FOO=BAR")
|
||||
|
||||
all_pinned_container_images = _get_pinned_container_images()
|
||||
pinned_x86_64_container_image = all_pinned_container_images["x86_64"]
|
||||
@@ -116,3 +117,32 @@ def test_passthrough_evil(tmp_path, monkeypatch, env_var_value):
|
||||
monkeypatch.setenv("ENV_VAR", env_var_value)
|
||||
parsed_environment = options.build_options(identifier=None).environment
|
||||
assert parsed_environment.as_dictionary(prev_environment={}) == {"ENV_VAR": env_var_value}
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"env_var_value",
|
||||
[
|
||||
"normal value",
|
||||
'"value wrapped in quotes"',
|
||||
'an unclosed double-quote: "',
|
||||
"string\nwith\ncarriage\nreturns\n",
|
||||
"a trailing backslash \\",
|
||||
],
|
||||
)
|
||||
def test_toml_environment_evil(tmp_path, monkeypatch, env_var_value):
|
||||
args = get_default_command_line_arguments()
|
||||
args.package_dir = tmp_path
|
||||
|
||||
with tmp_path.joinpath("pyproject.toml").open("w") as f:
|
||||
f.write(
|
||||
textwrap.dedent(
|
||||
f"""\
|
||||
[tool.cibuildwheel.environment]
|
||||
EXAMPLE='''{env_var_value}'''
|
||||
"""
|
||||
)
|
||||
)
|
||||
|
||||
options = Options(platform="linux", command_line_arguments=args)
|
||||
parsed_environment = options.build_options(identifier=None).environment
|
||||
assert parsed_environment.as_dictionary(prev_environment={}) == {"EXAMPLE": env_var_value}
|
||||
|
||||
@@ -331,3 +331,38 @@ test-command = "pyproject-override"
|
||||
|
||||
with pytest.raises(ConfigOptionError):
|
||||
OptionsReader(config_file_path=pyproject_toml, platform=platform)
|
||||
|
||||
|
||||
def test_config_settings(tmp_path):
|
||||
pyproject_toml: Path = tmp_path / "pyproject.toml"
|
||||
pyproject_toml.write_text(
|
||||
"""\
|
||||
[tool.cibuildwheel.config-settings]
|
||||
example = "one"
|
||||
other = ["two", "three"]
|
||||
"""
|
||||
)
|
||||
|
||||
options_reader = OptionsReader(config_file_path=pyproject_toml, platform="linux")
|
||||
assert (
|
||||
options_reader.get("config-settings", table={"item": '{k}="{v}"', "sep": " "})
|
||||
== 'example="one" other="two" other="three"'
|
||||
)
|
||||
|
||||
|
||||
def test_pip_config_settings(tmp_path):
|
||||
pyproject_toml: Path = tmp_path / "pyproject.toml"
|
||||
pyproject_toml.write_text(
|
||||
"""\
|
||||
[tool.cibuildwheel.config-settings]
|
||||
--build-option="--use-mypyc"
|
||||
"""
|
||||
)
|
||||
|
||||
options_reader = OptionsReader(config_file_path=pyproject_toml, platform="linux")
|
||||
assert (
|
||||
options_reader.get(
|
||||
"config-settings", table={"item": "--config-settings='{k}=\"{v}\"'", "sep": " "}
|
||||
)
|
||||
== "--config-settings='--build-option=\"--use-mypyc\"'"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user