Compare commits

..
18 Commits
Author SHA1 Message Date
Joe Rickerby 7833e45f5a Bump version: v2.2.0a1 2021-09-23 18:49:42 +01:00
Joe Rickerby c92a3123c4 Merge pull request #822 from pypa/joerick-patch-2
Create a bug report issue template
2021-09-21 08:56:18 +01:00
pre-commit-ci[bot]andpre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> 577cfe00b6 [pre-commit.ci] pre-commit autoupdate (#836)
updates:
- [github.com/psf/black: 21.8b0 → 21.9b0](https://github.com/psf/black/compare/21.8b0...21.9b0)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2021-09-20 17:16:50 -04:00
Joe Rickerby a9c86e791a Increase Azure linux job timeout 2021-09-20 11:09:03 -04:00
mayeut 542ad6099f Update dependencies 2021-09-20 11:09:03 -04:00
Matthieu Darbois 87b8de3d70 chore: remove test_unicode.py (#834)
This test was designed for python 2.7 in #352.
It's useless now that python 2.7 has been dropped.
2021-09-20 16:01:05 +02:00
Matthieu Darbois a85a2d7ea8 feat(CI): run linux tests with pytest-xdist (#831) 2021-09-20 12:32:05 +02:00
Joe Rickerby 7ddd1f9cb2 Try issue forms 2021-09-20 09:16:11 +01:00
Matthieu DarboisandJoe Rickerby 803c5e46ce feat: add musllinux support (PEP 656) (#768)
* feat: add musllinux support (PEP 656)

Add musllinux support (PEP 656) allowing to build wheels for musl libc based distros (e.g. Alpine)

* feat: add musllinux support (PEP 656) doc

* doc: combine `CIBW_MANYLINUX_*_IMAGE` & `CIBW_MUSLLINUX_*_IMAGE` options

* fix: doc to be squashed

* doc: combine manylinux /musllinux in README

* Update docs/options.md

Co-authored-by: Joe Rickerby <joerick@mac.com>

Co-authored-by: Joe Rickerby <joerick@mac.com>
2021-09-20 08:12:35 +02:00
Joe Rickerby d5add4261f Add CPython 3.10 to docs build id table (#832) 2021-09-19 17:12:05 +02:00
Alexander Piskunandpre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> 2ab5eed02f Update projects.yml (#828)
* Update projects.yml

Add `pillow-heif`

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2021-09-18 20:26:30 -04:00
cibuildwheel-bot[bot]andmayeut 27d4b6a2ca Update dependencies (#830)
Co-authored-by: mayeut <mayeut@users.noreply.github.com>
2021-09-18 16:55:49 +02:00
Henry Schreiner a665fb7746 fix: fallthrough empty manylinux images (#829)
* fix: fall through if empty for manylinux

* refactor: review cleanup
2021-09-17 15:52:43 -04:00
Joe Rickerby fded547220 Merge pull request #824 from pypa/pre-commit-ci-update-config
[pre-commit.ci] pre-commit autoupdate
2021-09-14 09:17:23 +01:00
pre-commit-ci[bot] a1ce6bb5d5 [pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/asottile/pyupgrade: v2.25.0 → v2.26.0](https://github.com/asottile/pyupgrade/compare/v2.25.0...v2.26.0)
2021-09-13 17:41:59 +00:00
Joe Rickerby 1a9db87741 More commenty style... 2021-09-10 15:34:24 +01:00
pre-commit-ci[bot] f07b8ca34e [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2021-09-10 14:31:56 +00:00
Joe Rickerby 5bb9f564c6 Create a bug report issue template 2021-09-10 15:30:39 +01:00
45 changed files with 490 additions and 267 deletions
+31
View File
@@ -0,0 +1,31 @@
name: General issue
description: Open a general issue
body:
- type: markdown
attributes:
value: |
Hi! If you're not sure whether your problem is a bug in cibuildwheel or something else, please consider asking a question in the Discussions tab first.
- type: textarea
id: description
attributes:
label: Description
- type: input
id: log
attributes:
label: Build log
description: If relevant, please provide a link to a build log that shows the problem
placeholder: https://...
validations:
required: false
- type: input
id: ci-config
attributes:
label: CI config
description: Link to the CI config that produced the build log above. e.g. the Github Actions workflow file
placeholder: https://...
validations:
required: false
+2 -2
View File
@@ -14,7 +14,7 @@ repos:
- id: trailing-whitespace
- repo: https://github.com/asottile/pyupgrade
rev: v2.25.0
rev: v2.26.0
hooks:
- id: pyupgrade
name: PyUpgrade 3.6+
@@ -31,7 +31,7 @@ repos:
- id: isort
- repo: https://github.com/psf/black
rev: 21.8b0
rev: 21.9b0
hooks:
- id: black
+16 -9
View File
@@ -22,17 +22,18 @@ Python wheels are great. Building them across **Mac, Linux, Windows**, on **mult
What does it do?
----------------
| | macOS Intel | macOS Apple Silicon | Windows 64bit | Windows 32bit | manylinux x86_64 | manylinux i686 | manylinux aarch64 | manylinux ppc64le | manylinux s390x |
| | macOS Intel | macOS Apple Silicon | Windows 64bit | Windows 32bit | manylinux<br/>musllinux x86_64 | manylinux<br/>musllinux i686 | manylinux<br/>musllinux aarch64 | manylinux<br/>musllinux ppc64le | manylinux<br/>musllinux s390x |
|---------------|----|-----|-----|-----|----|-----|----|-----|-----|
| CPython 3.6 | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| CPython 3.7 | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| CPython 3.8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| CPython 3.9 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| CPython 3.10 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| PyPy 3.7 v7.3 | ✅ | N/A | ✅ | N/A | ✅ | ✅ | ✅ | N/A | N/A |
| PyPy 3.7 v7.3 | ✅ | N/A | ✅ | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A |
<sup>¹ PyPy is only supported for manylinux wheels.</sup><br>
- Builds manylinux, macOS 10.9+, and Windows wheels for CPython and PyPy
- Builds manylinux, musllinux, macOS 10.9+, and Windows wheels for CPython and PyPy
- Works on GitHub Actions, Azure Pipelines, Travis CI, AppVeyor, CircleCI, and GitLab CI
- Bundles shared library dependencies on Linux and macOS through [auditwheel](https://github.com/pypa/auditwheel) and [delocate](https://github.com/matthew-brett/delocate)
- Runs your library's tests against the wheel-installed version of your library
@@ -62,7 +63,7 @@ Usage
Example setup
-------------
To build manylinux, macOS, and Windows wheels on GitHub Actions, you could use this `.github/workflows/wheels.yml`:
To build manylinux, musllinux, macOS, and Windows wheels on GitHub Actions, you could use this `.github/workflows/wheels.yml`:
```yaml
name: Build
@@ -84,7 +85,7 @@ jobs:
- uses: actions/setup-python@v2
- name: Install cibuildwheel
run: python -m pip install cibuildwheel==2.1.3
run: python -m pip install cibuildwheel==2.2.0a1
- name: Build wheels
run: python -m cibuildwheel --output-dir wheelhouse
@@ -114,7 +115,7 @@ Options
| | [`CIBW_BEFORE_ALL`](https://cibuildwheel.readthedocs.io/en/stable/options/#before-all) | Execute a shell command on the build system before any wheels are built. |
| | [`CIBW_BEFORE_BUILD`](https://cibuildwheel.readthedocs.io/en/stable/options/#before-build) | Execute a shell command preparing each wheel's build |
| | [`CIBW_REPAIR_WHEEL_COMMAND`](https://cibuildwheel.readthedocs.io/en/stable/options/#repair-wheel-command) | Execute a shell command to repair each (non-pure Python) built wheel |
| | [`CIBW_MANYLINUX_*_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image) | Specify alternative manylinux Docker images |
| | [`CIBW_MANYLINUX_*_IMAGE`<br/>`CIBW_MUSLLINUX_*_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#linux-image) | Specify alternative manylinux / musllinux Docker images |
| | [`CIBW_DEPENDENCY_VERSIONS`](https://cibuildwheel.readthedocs.io/en/stable/options/#dependency-versions) | Specify how cibuildwheel controls the versions of the tools it uses |
| **Testing** | [`CIBW_TEST_COMMAND`](https://cibuildwheel.readthedocs.io/en/stable/options/#test-command) | Execute a shell command to test each built wheel |
| | [`CIBW_BEFORE_TEST`](https://cibuildwheel.readthedocs.io/en/stable/options/#before-test) | Execute a shell command before testing each wheel |
@@ -188,11 +189,17 @@ Changelog
<!-- this section was generated by bin/update_readme_changelog.py -- do not edit manually -->
### v2.1.3
### v2.2.0 (prerelease)
_6 October 2021_
_Currently in prerelease. The below release notes will be condensed into a single entry on final release._
- 🛠 Updated CPython 3.10 to the 3.10.0 final release
_v2.2.0a1 (23 September 2021)_
- 🌟 Added support for [musllinux](https://www.python.org/dev/peps/pep-0656/). Support for this new wheel format lets projects build wheels for Linux distributions that use [musl libc](https://musl.libc.org/), notably, [Alpine](https://alpinelinux.org/) Docker containers.
Musllinux builds are enabled by default. To disable them on your project, add `*-musllinux_*` to your [`CIBW_SKIP`/`skip`](https://cibuildwheel.readthedocs.io/en/stable/options/#build-skip)
option. (#768)
- 🛠 Setting an empty string for the [`CIBW_*_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image) option will now fallthrough to the config file or cibuildwheel's default, rather than causing an error. This makes the option easier to use in CI build matricies. (#829)
### v2.1.2
+1
View File
@@ -1,5 +1,6 @@
jobs:
- job: linux_38
timeoutInMinutes: 120
pool: {vmImage: 'Ubuntu-18.04'}
steps:
- task: UsePythonVersion@0
+14 -1
View File
@@ -17,7 +17,20 @@ if __name__ == "__main__":
subprocess.run(unit_test_args, check=True)
# run the integration tests
xdist_test_args = []
if sys.platform.startswith("linux"):
xdist_test_args = ["-n", "2"]
subprocess.run(
[sys.executable, "-m", "pytest", "-x", "--durations", "0", "--timeout=2400", "test"],
[
sys.executable,
"-m",
"pytest",
*xdist_test_args,
"-x",
"--durations",
"0",
"--timeout=2400",
"test",
],
check=True,
)
+10 -3
View File
@@ -19,14 +19,15 @@ class Image(NamedTuple):
images = [
# manylinux1 images
Image("manylinux1", "x86_64", "quay.io/pypa/manylinux1_x86_64", None),
Image("manylinux1", "i686", "quay.io/pypa/manylinux1_i686", None),
# 2010 images
# manylinux2010 images
Image("manylinux2010", "x86_64", "quay.io/pypa/manylinux2010_x86_64", None),
Image("manylinux2010", "i686", "quay.io/pypa/manylinux2010_i686", None),
Image("manylinux2010", "pypy_x86_64", "quay.io/pypa/manylinux2010_x86_64", None),
Image("manylinux2010", "pypy_i686", "quay.io/pypa/manylinux2010_i686", None),
# 2014 images
# manylinux2014 images
Image("manylinux2014", "x86_64", "quay.io/pypa/manylinux2014_x86_64", None),
Image("manylinux2014", "i686", "quay.io/pypa/manylinux2014_i686", None),
Image("manylinux2014", "aarch64", "quay.io/pypa/manylinux2014_aarch64", None),
@@ -35,7 +36,7 @@ images = [
Image("manylinux2014", "pypy_x86_64", "quay.io/pypa/manylinux2014_x86_64", None),
Image("manylinux2014", "pypy_i686", "quay.io/pypa/manylinux2014_i686", None),
Image("manylinux2014", "pypy_aarch64", "quay.io/pypa/manylinux2014_aarch64", None),
# 2_24 images
# manylinux_2_24 images
Image("manylinux_2_24", "x86_64", "quay.io/pypa/manylinux_2_24_x86_64", None),
Image("manylinux_2_24", "i686", "quay.io/pypa/manylinux_2_24_i686", None),
Image("manylinux_2_24", "aarch64", "quay.io/pypa/manylinux_2_24_aarch64", None),
@@ -44,6 +45,12 @@ images = [
Image("manylinux_2_24", "pypy_x86_64", "quay.io/pypa/manylinux_2_24_x86_64", None),
Image("manylinux_2_24", "pypy_i686", "quay.io/pypa/manylinux_2_24_i686", None),
Image("manylinux_2_24", "pypy_aarch64", "quay.io/pypa/manylinux_2_24_aarch64", None),
# musllinux_1_1 images
Image("musllinux_1_1", "x86_64", "quay.io/pypa/musllinux_1_1_x86_64", None),
Image("musllinux_1_1", "i686", "quay.io/pypa/musllinux_1_1_i686", None),
Image("musllinux_1_1", "aarch64", "quay.io/pypa/musllinux_1_1_aarch64", None),
Image("musllinux_1_1", "ppc64le", "quay.io/pypa/musllinux_1_1_ppc64le", None),
Image("musllinux_1_1", "s390x", "quay.io/pypa/musllinux_1_1_s390x", None),
]
config = configparser.ConfigParser()
+1 -1
View File
@@ -1 +1 @@
__version__ = "2.1.3"
__version__ = "2.2.0a1"
+31 -4
View File
@@ -41,6 +41,14 @@ MANYLINUX_ARCHS = (
"pypy_i686",
)
MUSLLINUX_ARCHS = (
"x86_64",
"i686",
"aarch64",
"ppc64le",
"s390x",
)
def main() -> None:
platform: PlatformName
@@ -167,10 +175,13 @@ def main() -> None:
manylinux_identifiers = {
f"manylinux-{build_platform}-image" for build_platform in MANYLINUX_ARCHS
}
musllinux_identifiers = {
f"musllinux-{build_platform}-image" for build_platform in MUSLLINUX_ARCHS
}
disallow = {
"linux": {"dependency-versions"},
"macos": manylinux_identifiers,
"windows": manylinux_identifiers,
"macos": manylinux_identifiers | musllinux_identifiers,
"windows": manylinux_identifiers | musllinux_identifiers,
}
options = ConfigOptions(package_dir, args.config_file, platform=platform, disallow=disallow)
output_dir = Path(
@@ -278,6 +289,7 @@ def main() -> None:
sys.exit(0)
manylinux_images: Dict[str, str] = {}
musllinux_images: Dict[str, str] = {}
if platform == "linux":
pinned_docker_images_file = resources_dir / "pinned_docker_images.cfg"
all_pinned_docker_images = ConfigParser()
@@ -291,9 +303,9 @@ def main() -> None:
for build_platform in MANYLINUX_ARCHS:
pinned_images = all_pinned_docker_images[build_platform]
config_value = options(f"manylinux-{build_platform}-image")
config_value = options(f"manylinux-{build_platform}-image", ignore_empty=True)
if config_value is None:
if not config_value:
# default to manylinux2010 if it's available, otherwise manylinux2014
image = pinned_images.get("manylinux2010") or pinned_images.get("manylinux2014")
elif config_value in pinned_images:
@@ -303,6 +315,20 @@ def main() -> None:
manylinux_images[build_platform] = image
for build_platform in MUSLLINUX_ARCHS:
pinned_images = all_pinned_docker_images[build_platform]
config_value = options(f"musllinux-{build_platform}-image")
if config_value is None:
image = pinned_images.get("musllinux_1_1")
elif config_value in pinned_images:
image = pinned_images[config_value]
else:
image = config_value
musllinux_images[build_platform] = image
build_options = BuildOptions(
architectures=archs,
package_dir=package_dir,
@@ -320,6 +346,7 @@ def main() -> None:
environment=environment,
dependency_constraints=dependency_constraints,
manylinux_images=manylinux_images or None,
musllinux_images=musllinux_images or None,
build_frontend=build_frontend,
)
+6
View File
@@ -61,6 +61,7 @@ def build(options: BuildOptions) -> None:
sys.exit(2)
assert options.manylinux_images is not None
assert options.musllinux_images is not None
python_configurations = get_python_configurations(options.build_selector, options.architectures)
platforms = [
("cp", "manylinux_x86_64", options.manylinux_images["x86_64"]),
@@ -71,6 +72,11 @@ def build(options: BuildOptions) -> None:
("pp", "manylinux_x86_64", options.manylinux_images["pypy_x86_64"]),
("pp", "manylinux_aarch64", options.manylinux_images["pypy_aarch64"]),
("pp", "manylinux_i686", options.manylinux_images["pypy_i686"]),
("cp", "musllinux_x86_64", options.musllinux_images["x86_64"]),
("cp", "musllinux_i686", options.musllinux_images["i686"]),
("cp", "musllinux_aarch64", options.musllinux_images["aarch64"]),
("cp", "musllinux_ppc64le", options.musllinux_images["ppc64le"]),
("cp", "musllinux_s390x", options.musllinux_images["s390x"]),
]
cwd = Path.cwd()
+5
View File
@@ -20,6 +20,11 @@ PLATFORM_IDENTIFIER_DESCIPTIONS = {
"manylinux_aarch64": "manylinux aarch64",
"manylinux_ppc64le": "manylinux ppc64le",
"manylinux_s390x": "manylinux s390x",
"musllinux_x86_64": "musllinux x86_64",
"musllinux_i686": "musllinux i686",
"musllinux_aarch64": "musllinux aarch64",
"musllinux_ppc64le": "musllinux ppc64le",
"musllinux_s390x": "manylinux s390x",
"win32": "Windows 32bit",
"win_amd64": "Windows 64bit",
"macosx_x86_64": "macOS x86_64",
+21 -7
View File
@@ -19,15 +19,26 @@ class ConfigOptionError(KeyError):
pass
def _dig_first(*pairs: Tuple[Mapping[str, Any], str]) -> Setting:
def _dig_first(*pairs: Tuple[Mapping[str, Setting], str], ignore_empty: bool = False) -> Setting:
"""
Return the first dict item that matches from pairs of dicts and keys.
Final result is will throw a KeyError if missing.
Will throw a KeyError if missing.
_dig_first((dict1, "key1"), (dict2, "key2"), ...)
"""
(dict_like, key), *others = pairs
return dict_like.get(key, _dig_first(*others)) if others else dict_like[key]
if not pairs:
raise ValueError("pairs cannot be empty")
for dict_like, key in pairs:
if key in dict_like:
value = dict_like[key]
if ignore_empty and value == "":
continue
return value
raise KeyError(key)
class ConfigOptions:
@@ -62,7 +73,7 @@ class ConfigOptions:
defaults_path = resources_dir / "defaults.toml"
self.default_options, self.default_platform_options = self._load_file(defaults_path)
# load the project config file
# Load the project config file
config_options: Dict[str, Any] = {}
config_platform_options: Dict[str, Any] = {}
@@ -75,7 +86,7 @@ class ConfigOptions:
if pyproject_toml_path.exists():
config_options, config_platform_options = self._load_file(pyproject_toml_path)
# validate project config
# Validate project config
for option_name in config_options:
if not self._is_valid_global_option(option_name):
raise ConfigOptionError(f'Option "{option_name}" not supported in a config file')
@@ -129,6 +140,7 @@ class ConfigOptions:
env_plat: bool = True,
sep: Optional[str] = None,
table: Optional[TableFmt] = None,
ignore_empty: bool = False,
) -> str:
"""
Get and return the value for the named option from environment,
@@ -136,7 +148,8 @@ class ConfigOptions:
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']".
with "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:
@@ -155,6 +168,7 @@ class ConfigOptions:
(self.config_options, name),
(self.default_platform_options, name),
(self.default_options, name),
ignore_empty=ignore_empty,
)
if isinstance(result, dict):
+30 -5
View File
@@ -28,6 +28,31 @@ python_configurations = [
{ identifier = "cp310-manylinux_s390x", version = "3.10", path_str = "/opt/python/cp310-cp310" },
{ identifier = "pp37-manylinux_aarch64", version = "3.7", path_str = "/opt/python/pp37-pypy37_pp73" },
{ identifier = "pp37-manylinux_i686", version = "3.7", path_str = "/opt/python/pp37-pypy37_pp73" },
{ identifier = "cp36-musllinux_x86_64", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
{ identifier = "cp37-musllinux_x86_64", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
{ identifier = "cp38-musllinux_x86_64", version = "3.8", path_str = "/opt/python/cp38-cp38" },
{ identifier = "cp39-musllinux_x86_64", version = "3.9", path_str = "/opt/python/cp39-cp39" },
{ identifier = "cp310-musllinux_x86_64", version = "3.10", path_str = "/opt/python/cp310-cp310" },
{ identifier = "cp36-musllinux_i686", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
{ identifier = "cp37-musllinux_i686", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
{ identifier = "cp38-musllinux_i686", version = "3.8", path_str = "/opt/python/cp38-cp38" },
{ identifier = "cp39-musllinux_i686", version = "3.9", path_str = "/opt/python/cp39-cp39" },
{ identifier = "cp310-musllinux_i686", version = "3.10", path_str = "/opt/python/cp310-cp310" },
{ identifier = "cp36-musllinux_aarch64", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
{ identifier = "cp37-musllinux_aarch64", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
{ identifier = "cp38-musllinux_aarch64", version = "3.8", path_str = "/opt/python/cp38-cp38" },
{ identifier = "cp39-musllinux_aarch64", version = "3.9", path_str = "/opt/python/cp39-cp39" },
{ identifier = "cp310-musllinux_aarch64", version = "3.10", path_str = "/opt/python/cp310-cp310" },
{ identifier = "cp36-musllinux_ppc64le", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
{ identifier = "cp37-musllinux_ppc64le", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
{ identifier = "cp38-musllinux_ppc64le", version = "3.8", path_str = "/opt/python/cp38-cp38" },
{ identifier = "cp39-musllinux_ppc64le", version = "3.9", path_str = "/opt/python/cp39-cp39" },
{ identifier = "cp310-musllinux_ppc64le", version = "3.10", path_str = "/opt/python/cp310-cp310" },
{ identifier = "cp36-musllinux_s390x", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
{ identifier = "cp37-musllinux_s390x", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
{ identifier = "cp38-musllinux_s390x", version = "3.8", path_str = "/opt/python/cp38-cp38" },
{ identifier = "cp39-musllinux_s390x", version = "3.9", path_str = "/opt/python/cp39-cp39" },
{ identifier = "cp310-musllinux_s390x", version = "3.10", path_str = "/opt/python/cp310-cp310" },
]
[macos]
@@ -40,9 +65,9 @@ python_configurations = [
{ identifier = "cp39-macosx_x86_64", version = "3.9", url = "https://www.python.org/ftp/python/3.9.7/python-3.9.7-macos11.pkg" },
{ identifier = "cp39-macosx_arm64", version = "3.9", url = "https://www.python.org/ftp/python/3.9.7/python-3.9.7-macos11.pkg" },
{ identifier = "cp39-macosx_universal2", version = "3.9", url = "https://www.python.org/ftp/python/3.9.7/python-3.9.7-macos11.pkg" },
{ identifier = "cp310-macosx_x86_64", version = "3.10", url = "https://www.python.org/ftp/python/3.10.0/python-3.10.0-macos11.pkg" },
{ identifier = "cp310-macosx_arm64", version = "3.10", url = "https://www.python.org/ftp/python/3.10.0/python-3.10.0-macos11.pkg" },
{ identifier = "cp310-macosx_universal2", version = "3.10", url = "https://www.python.org/ftp/python/3.10.0/python-3.10.0-macos11.pkg" },
{ identifier = "cp310-macosx_x86_64", version = "3.10", url = "https://www.python.org/ftp/python/3.10.0/python-3.10.0rc2-macos11.pkg" },
{ identifier = "cp310-macosx_arm64", version = "3.10", url = "https://www.python.org/ftp/python/3.10.0/python-3.10.0rc2-macos11.pkg" },
{ identifier = "cp310-macosx_universal2", version = "3.10", url = "https://www.python.org/ftp/python/3.10.0/python-3.10.0rc2-macos11.pkg" },
{ identifier = "pp37-macosx_x86_64", version = "3.7", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.5-osx64.tar.bz2" },
]
@@ -56,7 +81,7 @@ python_configurations = [
{ identifier = "cp38-win_amd64", version = "3.8.10", arch = "64" },
{ identifier = "cp39-win32", version = "3.9.7", arch = "32" },
{ identifier = "cp39-win_amd64", version = "3.9.7", arch = "64" },
{ identifier = "cp310-win32", version = "3.10.0", arch = "32" },
{ identifier = "cp310-win_amd64", version = "3.10.0", arch = "64" },
{ identifier = "cp310-win32", version = "3.10.0-rc2", arch = "32" },
{ identifier = "cp310-win_amd64", version = "3.10.0-rc2", arch = "64" },
{ identifier = "pp37-win_amd64", version = "3.7", arch = "64", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.5-win64.zip" },
]
@@ -6,11 +6,11 @@
#
backports.entry-points-selectable==1.1.0
# via virtualenv
delocate==0.10.0
delocate==0.9.1
# via -r cibuildwheel/resources/constraints.in
distlib==0.3.3
distlib==0.3.2
# via virtualenv
filelock==3.3.0
filelock==3.0.12
# via virtualenv
importlib-metadata==4.8.1
# via
@@ -18,21 +18,23 @@ importlib-metadata==4.8.1
# virtualenv
importlib-resources==5.2.2
# via virtualenv
platformdirs==2.4.0
platformdirs==2.3.0
# via virtualenv
six==1.16.0
# via virtualenv
# via
# delocate
# virtualenv
typing-extensions==3.10.0.2
# via
# delocate
# importlib-metadata
virtualenv==20.8.1
virtualenv==20.8.0
# via -r cibuildwheel/resources/constraints.in
wheel==0.37.0
# via
# -r cibuildwheel/resources/constraints.in
# delocate
zipp==3.6.0
zipp==3.5.0
# via
# importlib-metadata
# importlib-resources
@@ -40,5 +42,5 @@ zipp==3.6.0
# The following packages are considered to be unsafe in a requirements file:
pip==21.2.4
# via -r cibuildwheel/resources/constraints.in
setuptools==58.2.0
setuptools==58.0.4
# via -r cibuildwheel/resources/constraints.in
@@ -6,35 +6,37 @@
#
backports.entry-points-selectable==1.1.0
# via virtualenv
delocate==0.10.0
delocate==0.9.1
# via -r cibuildwheel/resources/constraints.in
distlib==0.3.3
distlib==0.3.2
# via virtualenv
filelock==3.3.0
filelock==3.0.12
# via virtualenv
importlib-metadata==4.8.1
# via
# backports.entry-points-selectable
# virtualenv
platformdirs==2.4.0
platformdirs==2.3.0
# via virtualenv
six==1.16.0
# via virtualenv
# via
# delocate
# virtualenv
typing-extensions==3.10.0.2
# via
# delocate
# importlib-metadata
virtualenv==20.8.1
virtualenv==20.8.0
# via -r cibuildwheel/resources/constraints.in
wheel==0.37.0
# via
# -r cibuildwheel/resources/constraints.in
# delocate
zipp==3.6.0
zipp==3.5.0
# via importlib-metadata
# The following packages are considered to be unsafe in a requirements file:
pip==21.2.4
# via -r cibuildwheel/resources/constraints.in
setuptools==58.2.0
setuptools==58.0.4
# via -r cibuildwheel/resources/constraints.in
@@ -6,19 +6,21 @@
#
backports.entry-points-selectable==1.1.0
# via virtualenv
delocate==0.10.0
delocate==0.9.1
# via -r cibuildwheel/resources/constraints.in
distlib==0.3.3
distlib==0.3.2
# via virtualenv
filelock==3.3.0
filelock==3.0.12
# via virtualenv
platformdirs==2.4.0
platformdirs==2.3.0
# via virtualenv
six==1.16.0
# via virtualenv
# via
# delocate
# virtualenv
typing-extensions==3.10.0.2
# via delocate
virtualenv==20.8.1
virtualenv==20.8.0
# via -r cibuildwheel/resources/constraints.in
wheel==0.37.0
# via
@@ -28,5 +30,5 @@ wheel==0.37.0
# The following packages are considered to be unsafe in a requirements file:
pip==21.2.4
# via -r cibuildwheel/resources/constraints.in
setuptools==58.2.0
setuptools==58.0.4
# via -r cibuildwheel/resources/constraints.in
@@ -6,19 +6,21 @@
#
backports.entry-points-selectable==1.1.0
# via virtualenv
delocate==0.10.0
delocate==0.9.1
# via -r cibuildwheel/resources/constraints.in
distlib==0.3.3
distlib==0.3.2
# via virtualenv
filelock==3.3.0
filelock==3.0.12
# via virtualenv
platformdirs==2.4.0
platformdirs==2.3.0
# via virtualenv
six==1.16.0
# via virtualenv
# via
# delocate
# virtualenv
typing-extensions==3.10.0.2
# via delocate
virtualenv==20.8.1
virtualenv==20.8.0
# via -r cibuildwheel/resources/constraints.in
wheel==0.37.0
# via
@@ -28,5 +30,5 @@ wheel==0.37.0
# The following packages are considered to be unsafe in a requirements file:
pip==21.2.4
# via -r cibuildwheel/resources/constraints.in
setuptools==58.2.0
setuptools==58.0.4
# via -r cibuildwheel/resources/constraints.in
+9 -7
View File
@@ -6,19 +6,21 @@
#
backports.entry-points-selectable==1.1.0
# via virtualenv
delocate==0.10.0
delocate==0.9.1
# via -r cibuildwheel/resources/constraints.in
distlib==0.3.3
distlib==0.3.2
# via virtualenv
filelock==3.3.0
filelock==3.0.12
# via virtualenv
platformdirs==2.4.0
platformdirs==2.3.0
# via virtualenv
six==1.16.0
# via virtualenv
# via
# delocate
# virtualenv
typing-extensions==3.10.0.2
# via delocate
virtualenv==20.8.1
virtualenv==20.8.0
# via -r cibuildwheel/resources/constraints.in
wheel==0.37.0
# via
@@ -28,5 +30,5 @@ wheel==0.37.0
# The following packages are considered to be unsafe in a requirements file:
pip==21.2.4
# via -r cibuildwheel/resources/constraints.in
setuptools==58.2.0
setuptools==58.0.4
# via -r cibuildwheel/resources/constraints.in
+6
View File
@@ -27,6 +27,12 @@ manylinux-pypy_x86_64-image = "manylinux2010"
manylinux-pypy_i686-image = "manylinux2010"
manylinux-pypy_aarch64-image = "manylinux2014"
musllinux-x86_64-image = "musllinux_1_1"
musllinux-i686-image = "musllinux_1_1"
musllinux-aarch64-image = "musllinux_1_1"
musllinux-ppc64le-image = "musllinux_1_1"
musllinux-s390x-image = "musllinux_1_1"
[tool.cibuildwheel.linux]
repair-wheel-command = "auditwheel repair -w {dest_dir} {wheel}"
+27 -27
View File
@@ -1,43 +1,43 @@
[x86_64]
manylinux1 = quay.io/pypa/manylinux1_x86_64:2021-10-02-5ba76a5
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2021-10-06-94da8f1
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2021-10-06-94da8f1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2021-10-06-94da8f1
musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2021-10-06-94da8f1
manylinux1 = quay.io/pypa/manylinux1_x86_64:2021-09-19-4c6448f
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2021-09-19-a5ef179
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2021-09-19-a5ef179
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2021-09-19-a5ef179
musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2021-09-19-a5ef179
[i686]
manylinux1 = quay.io/pypa/manylinux1_i686:2021-10-02-5ba76a5
manylinux2010 = quay.io/pypa/manylinux2010_i686:2021-10-06-94da8f1
manylinux2014 = quay.io/pypa/manylinux2014_i686:2021-10-06-94da8f1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2021-10-06-94da8f1
musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2021-10-06-94da8f1
manylinux1 = quay.io/pypa/manylinux1_i686:2021-09-19-4c6448f
manylinux2010 = quay.io/pypa/manylinux2010_i686:2021-09-19-a5ef179
manylinux2014 = quay.io/pypa/manylinux2014_i686:2021-09-19-a5ef179
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2021-09-19-a5ef179
musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2021-09-19-a5ef179
[pypy_x86_64]
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2021-10-06-94da8f1
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2021-10-06-94da8f1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2021-10-06-94da8f1
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2021-09-19-a5ef179
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2021-09-19-a5ef179
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2021-09-19-a5ef179
[pypy_i686]
manylinux2010 = quay.io/pypa/manylinux2010_i686:2021-10-06-94da8f1
manylinux2014 = quay.io/pypa/manylinux2014_i686:2021-10-06-94da8f1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2021-10-06-94da8f1
manylinux2010 = quay.io/pypa/manylinux2010_i686:2021-09-19-a5ef179
manylinux2014 = quay.io/pypa/manylinux2014_i686:2021-09-19-a5ef179
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2021-09-19-a5ef179
[aarch64]
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2021-10-06-94da8f1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2021-10-06-94da8f1
musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2021-10-06-94da8f1
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2021-09-19-a5ef179
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2021-09-19-a5ef179
musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2021-09-19-a5ef179
[ppc64le]
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2021-10-06-94da8f1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2021-10-06-94da8f1
musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2021-10-06-94da8f1
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2021-09-19-a5ef179
manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2021-09-19-a5ef179
musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2021-09-19-a5ef179
[s390x]
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2021-10-06-94da8f1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2021-10-06-94da8f1
musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2021-10-06-94da8f1
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2021-09-19-a5ef179
manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2021-09-19-a5ef179
musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2021-09-19-a5ef179
[pypy_aarch64]
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2021-10-06-94da8f1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2021-10-06-94da8f1
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2021-09-19-a5ef179
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2021-09-19-a5ef179
+1
View File
@@ -215,6 +215,7 @@ class BuildOptions(NamedTuple):
before_build: Optional[str]
repair_command: str
manylinux_images: Optional[Dict[str, str]]
musllinux_images: Optional[Dict[str, str]]
dependency_constraints: Optional[DependencyConstraints]
test_command: Optional[str]
test_selector: TestSelector
+12 -6
View File
@@ -2,11 +2,17 @@
title: Changelog
---
### v2.1.3
### v2.2.0 (prerelease)
_6 October 2021_
_Currently in prerelease. The below release notes will be condensed into a single entry on final release._
- 🛠 Updated CPython 3.10 to the 3.10.0 final release
_v2.2.0a1 (23 September 2021)_
- 🌟 Added support for [musllinux](https://www.python.org/dev/peps/pep-0656/). Support for this new wheel format lets projects build wheels for Linux distributions that use [musl libc](https://musl.libc.org/), notably, [Alpine](https://alpinelinux.org/) Docker containers.
Musllinux builds are enabled by default. To disable them on your project, add `*-musllinux_*` to your [`CIBW_SKIP`/`skip`](https://cibuildwheel.readthedocs.io/en/stable/options/#build-skip)
option. (#768)
- 🛠 Setting an empty string for the [`CIBW_*_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image) option will now fallthrough to the config file or cibuildwheel's default, rather than causing an error. This makes the option easier to use in CI build matricies. (#829)
### v2.1.2
@@ -72,7 +78,7 @@ _1 May 2021_
_22 Feb 2021_
- ✨ Added `manylinux_2_24` support. To use these new Debian-based manylinux
images, set your [manylinux image](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image)
images, set your [manylinux image](https://cibuildwheel.readthedocs.io/en/stable/options/#linux-image)
options to `manylinux_2_24`.
- 🛠 On macOS, we now set `MACOSX_DEPLOYMENT_TARGET` in before running
`CIBW_BEFORE_ALL`. This is useful when using `CIBW_BEFORE_ALL` to build a
@@ -327,7 +333,7 @@ _2 May 2020_
Studio can still effect things.
This can be controlled using the [CIBW_DEPENDENCY_VERSIONS](https://cibuildwheel.readthedocs.io/en/stable/options/#dependency-versions)
and [manylinux image](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image)
and [manylinux image](https://cibuildwheel.readthedocs.io/en/stable/options/#linux-image)
options - if you always want to use the latest toolchain, you can still do
that, or you can specify your own pip constraints file and manylinux image.
(#256)
@@ -402,7 +408,7 @@ _10 November 2019_
build using the manylinux2010 images by default. If your project is still
manylinux1 compatible, you should get both manylinux1 and manylinux2010
wheels - you can upload both to PyPI. If you always require manylinux1 wheels, you can
build using the old manylinux1 image using the [manylinux image](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image) option.
build using the old manylinux1 image using the [manylinux image](https://cibuildwheel.readthedocs.io/en/stable/options/#linux-image) option.
(#155)
- 📚 Documentation is now on its [own mini-site](https://cibuildwheel.readthedocs.io),
rather than on the README (#169)
+7
View File
@@ -383,3 +383,10 @@
ci: [github]
os: [apple, windows]
notes: Python `pybind11` binding to Telegram's WebRTC library with third party dependencies like `OpenSSL`, `MozJPEG`, `FFmpeg`, etc.
- name: pillow-heif
gh: bigcat88/pillow_heif
pypi: pillow-heif
ci: [github]
os: [apple, linux]
notes: Python CFFI binding to libheif library with third party dependencies like `libde265`, `x265`, `libaom` with test & publishing on PyPi.
+5 -5
View File
@@ -6,15 +6,15 @@ title: Tips and tricks
### Linux builds on Docker
Linux wheels are built in the [`manylinux` docker images](https://github.com/pypa/manylinux) to provide binary compatible wheels on Linux, according to [PEP 571](https://www.python.org/dev/peps/pep-0571/). Because of this, when building with `cibuildwheel` on Linux, a few things should be taken into account:
Linux wheels are built in the [`manylinux`/`musllinux` docker images](https://github.com/pypa/manylinux) to provide binary compatible wheels on Linux, according to [PEP 600](https://www.python.org/dev/peps/pep-0600/) / [PEP 656](https://www.python.org/dev/peps/pep-0656/). Because of this, when building with `cibuildwheel` on Linux, a few things should be taken into account:
- Programs and libraries are not installed on the CI runner host, but rather should be installed inside of the Docker image - using `yum` for `manylinux2010` or `manylinux2014`, and `apt-get` for `manylinux_2_24`, or manually. The same goes for environment variables that are potentially needed to customize the wheel building.
- Programs and libraries are not installed on the CI runner host, but rather should be installed inside of the Docker image - using `yum` for `manylinux2010` or `manylinux2014`, `apt-get` for `manylinux_2_24` and `apk` for `musllinux_1_1`, or manually. The same goes for environment variables that are potentially needed to customize the wheel building.
`cibuildwheel` supports this by providing the [`CIBW_ENVIRONMENT`](options.md#environment) and [`CIBW_BEFORE_ALL`](options.md#before-all) options to setup the build environment inside the running Docker image.
- The project directory is mounted in the running Docker instance as `/project`, the output directory for the wheels as `/output`. In general, this is handled transparently by `cibuildwheel`. For a more finegrained level of control however, the root of the host file system is mounted as `/host`, allowing for example to access shared files, caches, etc. on the host file system. Note that `/host` is not available on CircleCI due to their Docker policies.
- Alternative Docker images can be specified with the `CIBW_MANYLINUX_*_IMAGE` options to allow for a custom, preconfigured build environment for the Linux builds. See [options](options.md#manylinux-image) for more details.
- Alternative Docker images can be specified with the `CIBW_MANYLINUX_*_IMAGE`/`CIBW_MUSLLINUX_*_IMAGE` options to allow for a custom, preconfigured build environment for the Linux builds. See [options](options.md#linux-image) for more details.
### Building macOS wheels for Apple Silicon {: #apple-silicon}
@@ -127,7 +127,7 @@ There are two suggested methods for keeping cibuildwheel up to date that instead
If you use GitHub Actions for builds, you can use cibuildwheel as an action:
```yaml
uses: pypa/cibuildwheel@v2.1.3
uses: pypa/cibuildwheel@v2.2.0a1
```
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.
@@ -153,7 +153,7 @@ The second option, and the only one that supports other CI systems, is using a `
```bash
# requirements-cibw.txt
cibuildwheel==2.1.3
cibuildwheel==2.2.0a1
```
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:
+37 -27
View File
@@ -151,14 +151,14 @@ When setting the options, you can use shell-style globbing syntax, as per [fnmat
<div class="build-id-table-marker"></div>
| | macOS | Windows | Manylinux Intel | Manylinux Other |
|--------------|---------------------------------------------------------------------|-------------------------------|-----------------------------------------------|----------------------------------------------------------------------------|
| Python 3.6 | cp36-macosx_x86_64 | cp36-win_amd64<br/>cp36-win32 | cp36-manylinux_x86_64<br/>cp36-manylinux_i686 | cp36-manylinux_aarch64<br/>cp36-manylinux_ppc64le<br/>cp36-manylinux_s390x |
| Python 3.7 | cp37-macosx_x86_64 | cp37-win_amd64<br/>cp37-win32 | cp37-manylinux_x86_64<br/>cp37-manylinux_i686 | cp37-manylinux_aarch64<br/>cp37-manylinux_ppc64le<br/>cp37-manylinux_s390x |
| Python 3.8 | cp38-macosx_x86_64<br/>cp38-macosx_universal2<br/>cp38-macosx_arm64 | cp38-win_amd64<br/>cp38-win32 | cp38-manylinux_x86_64<br/>cp38-manylinux_i686 | cp38-manylinux_aarch64<br/>cp38-manylinux_ppc64le<br/>cp38-manylinux_s390x |
| Python 3.9 | cp39-macosx_x86_64<br/>cp39-macosx_universal2<br/>cp39-macosx_arm64 | cp39-win_amd64<br/>cp39-win32 | cp39-manylinux_x86_64<br/>cp39-manylinux_i686 | cp39-manylinux_aarch64<br/>cp39-manylinux_ppc64le<br/>cp39-manylinux_s390x |
| PyPy3.7 v7.3 | pp37-macosx_x86_64 | pp37-win_amd64 | pp37-manylinux_x86_64 | |
| | macOS | Windows | Linux Intel | Linux Other |
|--------------|------------------------------------------------------------------------|----------------------------------|-----------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Python 3.6 | cp36-macosx_x86_64 | cp36-win_amd64<br/>cp36-win32 | cp36-manylinux_x86_64<br/>cp36-manylinux_i686<br/>cp36-musllinux_x86_64<br/>cp36-musllinux_i686 | cp36-manylinux_aarch64<br/>cp36-manylinux_ppc64le<br/>cp36-manylinux_s390x<br/>cp36-musllinux_aarch64<br/>cp36-musllinux_ppc64le<br/>cp36-musllinux_s390x |
| Python 3.7 | cp37-macosx_x86_64 | cp37-win_amd64<br/>cp37-win32 | cp37-manylinux_x86_64<br/>cp37-manylinux_i686<br/>cp37-musllinux_x86_64<br/>cp37-musllinux_i686 | cp37-manylinux_aarch64<br/>cp37-manylinux_ppc64le<br/>cp37-manylinux_s390x<br/>cp37-musllinux_aarch64<br/>cp37-musllinux_ppc64le<br/>cp37-musllinux_s390x |
| Python 3.8 | cp38-macosx_x86_64<br/>cp38-macosx_universal2<br/>cp38-macosx_arm64 | cp38-win_amd64<br/>cp38-win32 | cp38-manylinux_x86_64<br/>cp38-manylinux_i686<br/>cp38-musllinux_x86_64<br/>cp38-musllinux_i686 | cp38-manylinux_aarch64<br/>cp38-manylinux_ppc64le<br/>cp38-manylinux_s390x<br/>cp38-musllinux_aarch64<br/>cp38-musllinux_ppc64le<br/>cp38-musllinux_s390x |
| Python 3.9 | cp39-macosx_x86_64<br/>cp39-macosx_universal2<br/>cp39-macosx_arm64 | cp39-win_amd64<br/>cp39-win32 | cp39-manylinux_x86_64<br/>cp39-manylinux_i686<br/>cp39-musllinux_x86_64<br/>cp39-musllinux_i686 | cp39-manylinux_aarch64<br/>cp39-manylinux_ppc64le<br/>cp39-manylinux_s390x<br/>cp39-musllinux_aarch64<br/>cp39-musllinux_ppc64le<br/>cp39-musllinux_s390x |
| Python 3.10 | cp310-macosx_x86_64<br/>cp310-macosx_universal2<br/>cp310-macosx_arm64 | cp310-win_amd64<br/>cp310-win32 | cp310-manylinux_x86_64<br/>cp310-manylinux_i686<br/>cp310-musllinux_x86_64<br/>cp310-musllinux_i686 | cp310-manylinux_aarch64<br/>cp310-manylinux_ppc64le<br/>cp310-manylinux_s390x<br/>cp310-musllinux_aarch64<br/>cp310-musllinux_ppc64le<br/>cp310-musllinux_s390x |
| PyPy3.7 v7.3 | pp37-macosx_x86_64 | pp37-win_amd64 | pp37-manylinux_x86_64 | |
The list of supported and currently selected build identifiers can also be retrieved by passing the `--print-build-identifiers` flag to cibuildwheel.
The format is `python_tag-platform_tag`, with tags similar to those in [PEP 425](https://www.python.org/dev/peps/pep-0425/#details).
@@ -780,29 +780,39 @@ Platform-specific environment variables are also available:<br/>
In configuration mode, you can use an inline array, and the items will be joined with `&&`.
### CIBW_MANYLINUX_*_IMAGE {: #manylinux-image}
> Specify alternative manylinux Docker images
<div class="link-target" id="manylinux-image"></div>
The available options are:
### `CIBW_MANYLINUX_*_IMAGE`, `CIBW_MUSLLINUX_*_IMAGE` {: #linux-image}
> Specify alternative manylinux / musllinux Docker images
- `CIBW_MANYLINUX_X86_64_IMAGE`
- `CIBW_MANYLINUX_I686_IMAGE`
- `CIBW_MANYLINUX_PYPY_X86_64_IMAGE`
- `CIBW_MANYLINUX_AARCH64_IMAGE`
- `CIBW_MANYLINUX_PPC64LE_IMAGE`
- `CIBW_MANYLINUX_S390X_IMAGE`
- `CIBW_MANYLINUX_PYPY_AARCH64_IMAGE`
- `CIBW_MANYLINUX_PYPY_I686_IMAGE`
The available options are (default value):
Set an alternative Docker image to be used for building [manylinux](https://github.com/pypa/manylinux) wheels. cibuildwheel will then pull these instead of the default images, [`quay.io/pypa/manylinux2010_x86_64`](https://quay.io/pypa/manylinux2010_x86_64), [`quay.io/pypa/manylinux2010_i686`](https://quay.io/pypa/manylinux2010_i686), [`quay.io/pypa/manylinux2010_x86_64`](https://quay.io/pypa/manylinux2010_x86_64), [`quay.io/pypa/manylinux2014_aarch64`](https://quay.io/pypa/manylinux2014_aarch64), [`quay.io/pypa/manylinux2014_ppc64le`](https://quay.io/pypa/manylinux2014_ppc64le), and [`quay.io/pypa/manylinux2014_s390x`](https://quay.io/pypa/manylinux2010_s390x).
- `CIBW_MANYLINUX_X86_64_IMAGE` ([`quay.io/pypa/manylinux2010_x86_64`](https://quay.io/pypa/manylinux2010_x86_64))
- `CIBW_MANYLINUX_I686_IMAGE` ([`quay.io/pypa/manylinux2010_i686`](https://quay.io/pypa/manylinux2010_i686))
- `CIBW_MANYLINUX_PYPY_X86_64_IMAGE` ([`quay.io/pypa/manylinux2010_x86_64`](https://quay.io/pypa/manylinux2010_x86_64))
- `CIBW_MANYLINUX_AARCH64_IMAGE` ([`quay.io/pypa/manylinux2014_aarch64`](https://quay.io/pypa/manylinux2014_aarch64))
- `CIBW_MANYLINUX_PPC64LE_IMAGE` ([`quay.io/pypa/manylinux2014_ppc64le`](https://quay.io/pypa/manylinux2014_ppc64le))
- `CIBW_MANYLINUX_S390X_IMAGE` ([`quay.io/pypa/manylinux2014_s390x`](https://quay.io/pypa/manylinux2010_s390x))
- `CIBW_MANYLINUX_PYPY_AARCH64_IMAGE` ([`quay.io/pypa/manylinux2014_aarch64`](https://quay.io/pypa/manylinux2014_aarch64))
- `CIBW_MANYLINUX_PYPY_I686_IMAGE` ([`quay.io/pypa/manylinux2010_i686`](https://quay.io/pypa/manylinux2010_i686))
- `CIBW_MUSLLINUX_X86_64_IMAGE` ([`quay.io/pypa/musllinux_1_1_x86_64`](https://quay.io/pypa/musllinux_1_1_x86_64))
- `CIBW_MUSLLINUX_I686_IMAGE` ([`quay.io/pypa/musllinux_1_1_i686`](https://quay.io/pypa/musllinux_1_1_i686))
- `CIBW_MUSLLINUX_AARCH64_IMAGE` ([`quay.io/pypa/musllinux_1_1_aarch64`](https://quay.io/pypa/musllinux_1_1_aarch64))
- `CIBW_MUSLLINUX_PPC64LE_IMAGE` ([`quay.io/pypa/musllinux_1_1_ppc64le`](https://quay.io/pypa/musllinux_1_1_ppc64le))
- `CIBW_MUSLLINUX_S390X_IMAGE` ([`quay.io/pypa/musllinux_1_1_s390x`](https://quay.io/pypa/musllinux_1_1_s390x))
The value of this option can either be set to `manylinux1`, `manylinux2010`, `manylinux2014` or `manylinux_2_24` 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
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` or `manylinux_2_24` 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` or `manylinux_2_24` must be used, because the first version of the manylinux specification that supports additional architectures is `manylinux2014`.
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.
If setting a custom Docker image, you'll need to make sure it can be used in the same way as the official, default Docker images: all necessary Python and pip versions need to be present in `/opt/python/`, and the auditwheel tool needs to be present for cibuildwheel to work. Apart from that, the architecture and relevant shared system libraries need to be compatible to the relevant standard to produce valid manylinux1/manylinux2010/manylinux2014/manylinux_2_24 wheels (see [pypa/manylinux on GitHub](https://github.com/pypa/manylinux), [PEP 513](https://www.python.org/dev/peps/pep-0513/), [PEP 571](https://www.python.org/dev/peps/pep-0571/), [PEP 599](https://www.python.org/dev/peps/pep-0599/) and [PEP 600](https://www.python.org/dev/peps/pep-0600/) for more details).
If this option is blank, it will fall though to the next available definition (environment variable -> pyproject.toml -> default).
Auditwheel detects the version of the manylinux standard in the Docker image through the `AUDITWHEEL_PLAT` environment variable, as cibuildwheel has no way of detecting the correct `--plat` command line argument to pass to auditwheel for a custom image. If a Docker image does not correctly set this `AUDITWHEEL_PLAT` environment variable, the `CIBW_ENVIRONMENT` option can be used to do so (e.g., `CIBW_ENVIRONMENT='AUDITWHEEL_PLAT="manylinux2010_$(uname -m)"'`).
If setting a custom Docker image, you'll need to make sure it can be used in the same way as the official, default Docker images: all necessary Python and pip versions need to be present in `/opt/python/`, and the auditwheel tool needs to be present for cibuildwheel to work. Apart from that, the architecture and relevant shared system libraries need to be compatible to the relevant standard to produce valid manylinux1/manylinux2010/manylinux2014/manylinux_2_24/musllinux_1_1 wheels (see [pypa/manylinux on GitHub](https://github.com/pypa/manylinux), [PEP 513](https://www.python.org/dev/peps/pep-0513/), [PEP 571](https://www.python.org/dev/peps/pep-0571/), [PEP 599](https://www.python.org/dev/peps/pep-0599/), [PEP 600](https://www.python.org/dev/peps/pep-0600/) and [PEP 656](https://www.python.org/dev/peps/pep-0656/) for more details).
Auditwheel detects the version of the manylinux / musllinux standard in the Docker image through the `AUDITWHEEL_PLAT` environment variable, as cibuildwheel has no way of detecting the correct `--plat` command line argument to pass to auditwheel for a custom image. If a Docker image does not correctly set this `AUDITWHEEL_PLAT` environment variable, the `CIBW_ENVIRONMENT` option can be used to do so (e.g., `CIBW_ENVIRONMENT='AUDITWHEEL_PLAT="manylinux2010_$(uname -m)"'`).
#### Examples
@@ -895,8 +905,8 @@ Platform-specific environment variables are also available:<br/>
!!! note
This option does not affect the tools used on the Linux build - those versions
are bundled with the manylinux image that cibuildwheel uses. To change
dependency versions on Linux, use the [CIBW_MANYLINUX_*](#manylinux-image)
are bundled with the manylinux/musllinux image that cibuildwheel uses. To change
dependency versions on Linux, use the [CIBW_MANYLINUX_* / CIBW_MUSLLINUX_*](#linux-image)
options.
#### Examples
@@ -1140,7 +1150,7 @@ With macOS `universal2` wheels, you can also skip the individual archs inside th
```yaml
# Will avoid testing on emulated architectures
CIBW_TEST_SKIP: "*-manylinux_{aarch64,ppc64le,s390x}"
CIBW_TEST_SKIP: "*-*linux_{aarch64,ppc64le,s390x}"
# Skip trying to test arm64 builds on Intel Macs
CIBW_TEST_SKIP: "*-macosx_arm64 *-macosx_universal2:arm64"
@@ -1151,7 +1161,7 @@ With macOS `universal2` wheels, you can also skip the individual archs inside th
```toml
[tool.cibuildwheel]
# Will avoid testing on emulated architectures
test-skip = "*-manylinux_{aarch64,ppc64le,s390x}"
test-skip = "*-*linux_{aarch64,ppc64le,s390x}"
# Skip trying to test arm64 builds on Intel Macs
test-skip = "*-macosx_arm64 *-macosx_universal2:arm64"
+2 -2
View File
@@ -118,7 +118,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/
- uses: actions/checkout@v2
- name: Build wheels
run: pipx run cibuildwheel==2.1.3
run: pipx run cibuildwheel==2.2.0a1
- uses: actions/upload-artifact@v2
with:
@@ -153,7 +153,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/
- uses: actions/setup-python@v2
- name: Install cibuildwheel
run: python -m pip install cibuildwheel==2.1.3
run: python -m pip install cibuildwheel==2.2.0a1
- name: Build wheels
run: python -m cibuildwheel --output-dir wheelhouse
+76 -76
View File
@@ -21,8 +21,8 @@ title: Working examples
| [River][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | 🌊 Online machine learning in Python |
| [coverage.py][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The coverage tool for Python |
| [numexpr][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast numerical array expression evaluator for Python, NumPy, PyTables, pandas, bcolz and more |
| [Dependency Injector][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Dependency injection framework for Python, uses Windows TravisCI |
| [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. |
| [Dependency Injector][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Dependency injection framework for Python, uses Windows TravisCI |
| [PyAV][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Pythonic bindings for FFmpeg's libraries. |
| [PyTables][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python package to manage extremely large amounts of data |
| [ruptures][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Extensive Cython + NumPy [pyproject.toml](https://github.com/deepcharles/ruptures/blob/master/pyproject.toml) example. |
@@ -32,18 +32,18 @@ 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) |
| [AutoPy][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. |
| [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. |
| [H3-py][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Python bindings for H3, a hierarchical hexagonal geospatial indexing system |
| [python-rapidjson][] | ![travisci icon][] ![gitlab icon][] ![appveyor icon][] | ![windows icon][] ![linux icon][] | Python wrapper around rapidjson |
| [H3-py][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Python bindings for H3, a hierarchical hexagonal geospatial indexing system |
| [markupsafe][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Safely add untrusted strings to HTML/XML markup. |
| [Rtree][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Rtree: spatial index for Python GIS ¶ |
| [python-snappy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Python bindings for the snappy google library |
| [pybind11 cmake_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a CMake-based build system |
| [KDEpy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Kernel Density Estimation in Python |
| [tgcalls][] | ![github icon][] | ![apple icon][] ![windows icon][] | Python `pybind11` binding to Telegram's WebRTC library with third party dependencies like `OpenSSL`, `MozJPEG`, `FFmpeg`, etc. |
| [dd-trace-py][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Uses custom alternate arch emulation on GitHub |
| [pybind11 python_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a Python-based build system |
| [cyvcf2][] | ![github icon][] | ![apple icon][] ![linux icon][] | cython + htslib == fast VCF and BCF processing |
| [pybind11 python_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a Python-based build system |
| [dd-trace-py][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Uses custom alternate arch emulation on GitHub |
| [sourmash][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Quickly search, compare, and analyze genomic and metagenomic data sets. |
| [tgcalls][] | ![github icon][] | ![apple icon][] ![windows icon][] | Python `pybind11` binding to Telegram's WebRTC library with third party dependencies like `OpenSSL`, `MozJPEG`, `FFmpeg`, etc. |
| [time-machine][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Time mocking library using only the CPython C API. |
| [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. |
| [CTranslate2][] | ![github icon][] | ![apple icon][] ![linux icon][] | Includes libraries from the [Intel oneAPI toolkit](https://software.intel.com/content/www/us/en/develop/tools/oneapi/base-toolkit.html). The Linux wheels also include CUDA libraries for GPU execution. |
@@ -52,8 +52,8 @@ title: Working examples
| [Tokenizer][] | ![github icon][] ![travisci 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 |
| [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. |
| [iDynTree][] | ![github icon][] | ![linux icon][] | Uses manylinux_2_24 |
| [boost-histogram][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Supports full range of wheels, including PyPy and alternate archs. |
| [pybase64][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast Base64 encoding/decoding in Python |
| [TgCrypto][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. |
| [etebase-py][] | ![travisci icon][] | ![linux icon][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. |
@@ -61,8 +61,8 @@ title: Working examples
| [pyjet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The interface between FastJet and NumPy |
| [numpythia][] | ![github icon][] | ![apple icon][] ![linux icon][] | The interface between PYTHIA and NumPy |
| [polaroid][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Full range of wheels for setuptools rust, with auto release and PyPI deploy. |
| [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. |
| [ninja][] | ![github icon][] ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Multitagged binary builds for all supported platforms, using cibw 2 config configuration. |
| [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. |
| [pybind11 scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | An example combining scikit-build and pybind11 |
| [GSD][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Cython and NumPy project with 64-bit wheels. |
| [pyinstrument_cext][] | ![travisci icon][] ![appveyor icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A simple C extension, without external dependencies |
@@ -84,8 +84,8 @@ title: Working examples
[River]: https://github.com/online-ml/river
[coverage.py]: https://github.com/nedbat/coveragepy
[numexpr]: https://github.com/pydata/numexpr
[Dependency Injector]: https://github.com/ets-labs/python-dependency-injector
[h5py]: https://github.com/h5py/h5py
[Dependency Injector]: https://github.com/ets-labs/python-dependency-injector
[PyAV]: https://github.com/PyAV-Org/PyAV
[PyTables]: https://github.com/PyTables/PyTables
[ruptures]: https://github.com/deepcharles/ruptures
@@ -95,18 +95,18 @@ title: Working examples
[DeepForest]: https://github.com/LAMDA-NJU/Deep-Forest
[AutoPy]: https://github.com/autopilot-rs/autopy
[Parselmouth]: https://github.com/YannickJadoul/Parselmouth
[H3-py]: https://github.com/uber/h3-py
[python-rapidjson]: https://github.com/python-rapidjson/python-rapidjson
[H3-py]: https://github.com/uber/h3-py
[markupsafe]: https://github.com/pallets/markupsafe
[Rtree]: https://github.com/Toblerity/rtree
[python-snappy]: https://github.com/andrix/python-snappy
[pybind11 cmake_example]: https://github.com/pybind/cmake_example
[KDEpy]: https://github.com/tommyod/KDEpy
[tgcalls]: https://github.com/MarshalX/tgcalls
[dd-trace-py]: https://github.com/DataDog/dd-trace-py
[pybind11 python_example]: https://github.com/pybind/python_example
[cyvcf2]: https://github.com/brentp/cyvcf2
[pybind11 python_example]: https://github.com/pybind/python_example
[dd-trace-py]: https://github.com/DataDog/dd-trace-py
[sourmash]: https://github.com/dib-lab/sourmash
[tgcalls]: https://github.com/MarshalX/tgcalls
[time-machine]: https://github.com/adamchainz/time-machine
[matrixprofile]: https://github.com/matrix-profile-foundation/matrixprofile
[CTranslate2]: https://github.com/OpenNMT/CTranslate2
@@ -115,8 +115,8 @@ title: Working examples
[Tokenizer]: https://github.com/OpenNMT/Tokenizer
[PyGLM]: https://github.com/Zuzu-Typ/PyGLM
[bx-python]: https://github.com/bxlab/bx-python
[boost-histogram]: https://github.com/scikit-hep/boost-histogram
[iDynTree]: https://github.com/robotology/idyntree
[boost-histogram]: https://github.com/scikit-hep/boost-histogram
[pybase64]: https://github.com/mayeut/pybase64
[TgCrypto]: https://github.com/pyrogram/tgcrypto
[etebase-py]: https://github.com/etesync/etebase-py
@@ -124,8 +124,8 @@ title: Working examples
[pyjet]: https://github.com/scikit-hep/pyjet
[numpythia]: https://github.com/scikit-hep/numpythia
[polaroid]: https://github.com/daggy1234/polaroid
[Imagecodecs (fork)]: https://github.com/czaki/imagecodecs_build
[ninja]: https://github.com/scikit-build/ninja-python-distributions
[Imagecodecs (fork)]: https://github.com/czaki/imagecodecs_build
[pybind11 scikit_build_example]: https://github.com/pybind/scikit_build_example
[GSD]: https://github.com/glotzerlab/gsd
[pyinstrument_cext]: https://github.com/joerick/pyinstrument_cext
@@ -144,68 +144,68 @@ title: Working examples
[apple icon]: data/readme_icons/apple.svg
[linux icon]: data/readme_icons/linux.svg
<!-- scikit-learn: 47447, last pushed 0 days ago -->
<!-- Matplotlib: 14298, last pushed 0 days ago -->
<!-- MyPy: 11423, last pushed 0 days ago -->
<!-- psutil: 7713, last pushed 0 days ago -->
<!-- scikit-image: 4542, last pushed 0 days ago -->
<!-- twisted-iocpsupport: 4379, last pushed 0 days ago -->
<!-- cmake: 4182, last pushed 0 days ago -->
<!-- websockets: 3592, last pushed 1 days ago -->
<!-- pyzmq: 2921, last pushed 1 days ago -->
<!-- aiortc: 2601, last pushed 0 days ago -->
<!-- River: 2571, last pushed 0 days ago -->
<!-- coverage.py: 1742, last pushed 0 days ago -->
<!-- numexpr: 1654, last pushed 10 days ago -->
<!-- Dependency Injector: 1602, last pushed 0 days ago -->
<!-- h5py: 1592, last pushed 1 days ago -->
<!-- PyAV: 1356, last pushed 9 days ago -->
<!-- PyTables: 1065, last pushed 9 days ago -->
<!-- ruptures: 804, last pushed 0 days ago -->
<!-- pikepdf: 759, last pushed 0 days ago -->
<!-- aioquic: 748, last pushed 8 days ago -->
<!-- google neuroglancer: 689, last pushed 1 days ago -->
<!-- DeepForest: 661, last pushed 74 days ago -->
<!-- AutoPy: 577, last pushed 110 days ago -->
<!-- Parselmouth: 561, last pushed 1 days ago -->
<!-- H3-py: 434, last pushed 28 days ago -->
<!-- python-rapidjson: 429, last pushed 102 days ago -->
<!-- markupsafe: 426, last pushed 1 days ago -->
<!-- Rtree: 421, last pushed 199 days ago -->
<!-- python-snappy: 407, last pushed 76 days ago -->
<!-- pybind11 cmake_example: 315, last pushed 21 days ago -->
<!-- KDEpy: 302, last pushed 124 days ago -->
<!-- tgcalls: 273, last pushed 15 days ago -->
<!-- dd-trace-py: 272, last pushed 0 days ago -->
<!-- pybind11 python_example: 271, last pushed 20 days ago -->
<!-- cyvcf2: 269, last pushed 35 days ago -->
<!-- sourmash: 262, last pushed 2 days ago -->
<!-- time-machine: 213, last pushed 0 days ago -->
<!-- matrixprofile: 201, last pushed 102 days ago -->
<!-- CTranslate2: 189, last pushed 1 days ago -->
<!-- iminuit: 186, last pushed 0 days ago -->
<!-- jq.py: 175, last pushed 64 days ago -->
<!-- Tokenizer: 156, last pushed 5 days ago -->
<!-- PyGLM: 119, last pushed 6 days ago -->
<!-- bx-python: 106, last pushed 88 days ago -->
<!-- boost-histogram: 92, last pushed 0 days ago -->
<!-- iDynTree: 88, last pushed 2 days ago -->
<!-- pybase64: 73, last pushed 0 days ago -->
<!-- TgCrypto: 73, last pushed 2 days ago -->
<!-- etebase-py: 52, last pushed 274 days ago -->
<!-- fathon: 38, last pushed 125 days ago -->
<!-- pyjet: 31, last pushed 20 days ago -->
<!-- numpythia: 31, last pushed 20 days ago -->
<!-- polaroid: 24, last pushed 3 days ago -->
<!-- Imagecodecs (fork): 21, last pushed 40 days ago -->
<!-- ninja: 19, last pushed 1 days ago -->
<!-- pybind11 scikit_build_example: 17, last pushed 20 days ago -->
<!-- GSD: 17, last pushed 33 days ago -->
<!-- pyinstrument_cext: 10, last pushed 49 days ago -->
<!-- xmlstarlet: 7, last pushed 75 days ago -->
<!-- CorrectionLib: 7, last pushed 20 days ago -->
<!-- SiPM: 4, last pushed 9 days ago -->
<!-- pillow-heif: 2, last pushed 19 days ago -->
<!-- scikit-learn: 47240, last pushed 0 days ago -->
<!-- Matplotlib: 14229, last pushed 0 days ago -->
<!-- MyPy: 11299, last pushed 0 days ago -->
<!-- psutil: 7668, last pushed 7 days ago -->
<!-- scikit-image: 4523, last pushed 0 days ago -->
<!-- twisted-iocpsupport: 4373, last pushed 0 days ago -->
<!-- cmake: 4161, last pushed 0 days ago -->
<!-- websockets: 3569, last pushed 0 days ago -->
<!-- pyzmq: 2911, last pushed 3 days ago -->
<!-- aiortc: 2575, last pushed 3 days ago -->
<!-- River: 1993, last pushed 0 days ago -->
<!-- coverage.py: 1722, last pushed 11 days ago -->
<!-- numexpr: 1643, last pushed 74 days ago -->
<!-- h5py: 1585, last pushed 5 days ago -->
<!-- Dependency Injector: 1565, last pushed 3 days ago -->
<!-- PyAV: 1344, last pushed 17 days ago -->
<!-- PyTables: 1061, last pushed 18 days ago -->
<!-- ruptures: 793, last pushed 2 days ago -->
<!-- pikepdf: 747, last pushed 4 days ago -->
<!-- aioquic: 740, last pushed 12 days ago -->
<!-- google neuroglancer: 685, last pushed 4 days ago -->
<!-- DeepForest: 655, last pushed 58 days ago -->
<!-- AutoPy: 572, last pushed 94 days ago -->
<!-- Parselmouth: 555, last pushed 6 days ago -->
<!-- python-rapidjson: 429, last pushed 86 days ago -->
<!-- H3-py: 428, last pushed 12 days ago -->
<!-- markupsafe: 424, last pushed 11 days ago -->
<!-- Rtree: 420, last pushed 183 days ago -->
<!-- python-snappy: 407, last pushed 60 days ago -->
<!-- pybind11 cmake_example: 310, last pushed 5 days ago -->
<!-- KDEpy: 299, last pushed 108 days ago -->
<!-- cyvcf2: 268, last pushed 19 days ago -->
<!-- pybind11 python_example: 265, last pushed 5 days ago -->
<!-- dd-trace-py: 265, last pushed 0 days ago -->
<!-- sourmash: 260, last pushed 0 days ago -->
<!-- tgcalls: 248, last pushed 2 days ago -->
<!-- time-machine: 206, last pushed 5 days ago -->
<!-- matrixprofile: 198, last pushed 86 days ago -->
<!-- CTranslate2: 188, last pushed 4 days ago -->
<!-- iminuit: 184, last pushed 11 days ago -->
<!-- jq.py: 174, last pushed 48 days ago -->
<!-- Tokenizer: 156, last pushed 2 days ago -->
<!-- PyGLM: 117, last pushed 5 days ago -->
<!-- bx-python: 105, last pushed 72 days ago -->
<!-- iDynTree: 87, last pushed 3 days ago -->
<!-- boost-histogram: 83, last pushed 2 days ago -->
<!-- pybase64: 73, last pushed 1 days ago -->
<!-- TgCrypto: 71, last pushed 112 days ago -->
<!-- etebase-py: 51, last pushed 258 days ago -->
<!-- fathon: 35, last pushed 109 days ago -->
<!-- pyjet: 31, last pushed 4 days ago -->
<!-- numpythia: 31, last pushed 4 days ago -->
<!-- polaroid: 24, last pushed 55 days ago -->
<!-- ninja: 20, last pushed 6 days ago -->
<!-- Imagecodecs (fork): 19, last pushed 25 days ago -->
<!-- pybind11 scikit_build_example: 17, last pushed 5 days ago -->
<!-- GSD: 17, last pushed 17 days ago -->
<!-- pyinstrument_cext: 10, last pushed 33 days ago -->
<!-- xmlstarlet: 7, last pushed 59 days ago -->
<!-- CorrectionLib: 6, last pushed 4 days ago -->
<!-- SiPM: 4, last pushed 72 days ago -->
<!-- pillow-heif: 2, last pushed 3 days ago -->
<!-- END bin/projects.py -->
+1 -1
View File
@@ -12,7 +12,7 @@ stack: python 3.7
init:
- cmd: set PATH=C:\Python37;C:\Python37\Scripts;%PATH%
install: python -m pip install cibuildwheel==2.1.3
install: python -m pip install cibuildwheel==2.2.0a1
build_script: python -m cibuildwheel --output-dir wheelhouse
+3 -3
View File
@@ -6,7 +6,7 @@ jobs:
- bash: |
set -o errexit
python3 -m pip install --upgrade pip
pip3 install cibuildwheel==2.1.3
pip3 install cibuildwheel==2.2.0a1
displayName: Install dependencies
- bash: cibuildwheel --output-dir wheelhouse .
displayName: Build wheels
@@ -20,7 +20,7 @@ jobs:
- bash: |
set -o errexit
python3 -m pip install --upgrade pip
python3 -m pip install cibuildwheel==2.1.3
python3 -m pip install cibuildwheel==2.2.0a1
displayName: Install dependencies
- bash: cibuildwheel --output-dir wheelhouse .
displayName: Build wheels
@@ -34,7 +34,7 @@ jobs:
- bash: |
set -o errexit
python -m pip install --upgrade pip
pip install cibuildwheel==2.1.3
pip install cibuildwheel==2.2.0a1
displayName: Install dependencies
- bash: cibuildwheel --output-dir wheelhouse .
displayName: Build wheels
+2 -2
View File
@@ -11,7 +11,7 @@ jobs:
- run:
name: Build the Linux wheels.
command: |
pip3 install --user cibuildwheel==2.1.3
pip3 install --user cibuildwheel==2.2.0a1
cibuildwheel --output-dir wheelhouse
- store_artifacts:
path: wheelhouse/
@@ -25,7 +25,7 @@ jobs:
- run:
name: Build the OS X wheels.
command: |
pip3 install cibuildwheel==2.1.3
pip3 install cibuildwheel==2.2.0a1
cibuildwheel --output-dir wheelhouse
- store_artifacts:
path: wheelhouse/
+1 -1
View File
@@ -10,7 +10,7 @@ jobs:
- uses: actions/checkout@v2
- name: Build wheels
uses: pypa/cibuildwheel@v2.1.3
uses: pypa/cibuildwheel@v2.2.0a1
env:
CIBW_ARCHS_MACOS: x86_64 universal2
+1 -1
View File
@@ -27,7 +27,7 @@ jobs:
python-version: '3.8'
- name: Build wheels
uses: pypa/cibuildwheel@v2.1.3
uses: pypa/cibuildwheel@v2.2.0a1
- uses: actions/upload-artifact@v2
with:
+1 -1
View File
@@ -14,7 +14,7 @@ jobs:
- uses: actions/checkout@v2
- name: Build wheels
uses: pypa/cibuildwheel@v2.1.3
uses: pypa/cibuildwheel@v2.2.0a1
# to supply options, put them in 'env', like:
# env:
# CIBW_SOME_OPTION: value
+1 -1
View File
@@ -25,7 +25,7 @@ jobs:
platforms: all
- name: Build wheels
uses: pypa/cibuildwheel@v2.1.3
uses: pypa/cibuildwheel@v2.2.0a1
env:
# configure cibuildwheel to build native archs ('auto'), and some
# emulated ones
+1 -1
View File
@@ -12,7 +12,7 @@ linux:
DOCKER_TLS_CERTDIR: ""
script:
- curl -sSL https://get.docker.com/ | sh
- python -m pip install cibuildwheel==2.1.3
- python -m pip install cibuildwheel==2.2.0a1
- cibuildwheel --output-dir wheelhouse
artifacts:
paths:
+1 -1
View File
@@ -19,7 +19,7 @@ jobs:
- ln -s /c/Python38/python.exe /c/Python38/python3.exe
install:
- python3 -m pip install cibuildwheel==2.1.3
- python3 -m pip install cibuildwheel==2.2.0a1
script:
# build the wheels, put them into './wheelhouse'
+1 -1
View File
@@ -25,7 +25,7 @@ jobs:
- ln -s /c/Python38/python.exe /c/Python38/python3.exe
install:
- python3 -m pip install cibuildwheel==2.1.3
- python3 -m pip install cibuildwheel==2.2.0a1
script:
# build the wheels, put them into './wheelhouse'
+2 -2
View File
@@ -57,7 +57,7 @@ jobs:
- stage: deploy
name: Build and deploy Linux wheels
services: docker
install: python3 -m pip install cibuildwheel==2.1.3
install: python3 -m pip install cibuildwheel==2.2.0a1
script: python3 -m cibuildwheel --output-dir wheelhouse
after_success: |
python3 -m pip install twine
@@ -67,7 +67,7 @@ jobs:
name: Build and deploy Windows wheels
os: windows
language: shell
install: python3 -m pip install cibuildwheel==2.1.3
install: python3 -m pip install cibuildwheel==2.2.0a1
script: python3 -m cibuildwheel --output-dir wheelhouse
after_success: |
python3 -m pip install twine
+1 -1
View File
@@ -1,6 +1,6 @@
[metadata]
name = cibuildwheel
version = 2.1.3
version = 2.2.0a1
description = Build Python wheels on CI with minimal configuration.
long_description = file: README.md
long_description_content_type = text/markdown
+1
View File
@@ -11,6 +11,7 @@ extras = {
"jinja2",
"pytest>=6",
"pytest-timeout",
"pytest-xdist; sys_platform == 'linux'",
],
"bin": [
"click",
+3 -1
View File
@@ -56,4 +56,6 @@ def test_build_identifiers(tmp_path):
build_identifiers = utils.cibuildwheel_get_build_identifiers(
project_dir, prerelease_pythons=True
)
assert len(expected_wheels) == len(build_identifiers)
assert len(expected_wheels) == len(
build_identifiers
), f"{expected_wheels} vs {build_identifiers}"
+2 -2
View File
@@ -37,14 +37,14 @@ def test(tmp_path):
add_env={
"CIBW_MANYLINUX_X86_64_IMAGE": "dockcross/manylinux2010-x64",
"CIBW_MANYLINUX_I686_IMAGE": "dockcross/manylinux2010-x86",
"CIBW_BUILD": "cp3{6,7,8,9}-*",
"CIBW_BUILD": "cp3{6,7,8,9}-manylinux*",
},
)
# also check that we got the right wheels built
expected_wheels = [
w
for w in utils.expected_wheels("spam", "0.1.0")
for w in utils.expected_wheels("spam", "0.1.0", musllinux_versions=[])
if "-cp36-" in w or "-cp37-" in w or "-cp38-" in w or "-cp39-" in w
]
assert set(actual_wheels) == set(expected_wheels)
+5 -1
View File
@@ -57,6 +57,7 @@ def test(manylinux_image, tmp_path):
# CFLAGS environment variable is necessary to fail on 'malloc_info' (on manylinux1) during compilation/linking,
# rather than when dynamically loading the Python
add_env = {
"CIBW_BUILD": "*-manylinux*",
"CIBW_ENVIRONMENT": 'CFLAGS="$CFLAGS -O0 -Werror=implicit-function-declaration"',
"CIBW_MANYLINUX_X86_64_IMAGE": manylinux_image,
"CIBW_MANYLINUX_I686_IMAGE": manylinux_image,
@@ -79,7 +80,10 @@ def test(manylinux_image, tmp_path):
"manylinux2014": ["manylinux_2_17", "manylinux2014"],
}
expected_wheels = utils.expected_wheels(
"spam", "0.1.0", manylinux_versions=platform_tag_map.get(manylinux_image, [manylinux_image])
"spam",
"0.1.0",
manylinux_versions=platform_tag_map.get(manylinux_image, [manylinux_image]),
musllinux_versions=[],
)
if manylinux_image in {"manylinux1"}:
# remove PyPy & CPython 3.10 and above
-32
View File
@@ -1,32 +0,0 @@
import textwrap
import pytest
from . import test_projects, utils
project_with_unicode = test_projects.new_c_project(
spam_c_function_add=textwrap.dedent(
r"""
{
Py_XDECREF(PyUnicode_FromStringAndSize("foo", 4));
}
"""
),
)
def test(tmp_path):
if utils.platform != "linux":
pytest.skip("the docker test is only relevant to the linux build")
project_dir = tmp_path / "project"
project_with_unicode.generate(project_dir)
# build the wheels
actual_wheels = utils.cibuildwheel_run(
project_dir, add_env={"CIBW_TEST_COMMAND": 'python -c "import spam"'}
)
# check that the expected wheels are produced
expected_wheels = utils.expected_wheels("spam", "0.1.0")
assert set(actual_wheels) == set(expected_wheels)
+14
View File
@@ -103,6 +103,7 @@ def expected_wheels(
package_name,
package_version,
manylinux_versions=None,
musllinux_versions=None,
macosx_deployment_target="10.9",
machine_arch=None,
):
@@ -123,6 +124,9 @@ def expected_wheels(
else:
manylinux_versions = ["manylinux_2_17", "manylinux2014"]
if musllinux_versions is None:
musllinux_versions = ["musllinux_1_1"]
python_abi_tags = ["cp36-cp36m", "cp37-cp37m", "cp38-cp38", "cp39-cp39", "cp310-cp310"]
if machine_arch in ["x86_64", "AMD64", "x86", "aarch64"]:
@@ -155,6 +159,16 @@ def expected_wheels(
)
for architecture in architectures
]
if len(musllinux_versions) > 0 and not python_abi_tag.startswith("pp"):
platform_tags.extend(
[
".".join(
f"{musllinux_version}_{architecture}"
for musllinux_version in musllinux_versions
)
for architecture in architectures
]
)
elif platform == "windows":
if python_abi_tag.startswith("cp"):
+61 -3
View File
@@ -1,6 +1,6 @@
import pytest
from cibuildwheel.options import ConfigOptionError, ConfigOptions
from cibuildwheel.options import ConfigOptionError, ConfigOptions, _dig_first
PYPROJECT_1 = """
[tool.cibuildwheel]
@@ -181,10 +181,68 @@ def test_disallowed_a(tmp_path):
tmp_path.joinpath("pyproject.toml").write_text(
"""
[tool.cibuildwheel.windows]
manylinux-x64_86-image = "manylinux1"
manylinux-x86_64-image = "manylinux1"
"""
)
disallow = {"windows": {"manylinux-x64_86-image"}}
disallow = {"windows": {"manylinux-x86_64-image"}}
ConfigOptions(tmp_path, platform="linux", disallow=disallow)
with pytest.raises(ConfigOptionError):
ConfigOptions(tmp_path, platform="windows", disallow=disallow)
def test_environment_override_empty(tmp_path, monkeypatch):
tmp_path.joinpath("pyproject.toml").write_text(
"""
[tool.cibuildwheel]
manylinux-i686-image = "manylinux1"
manylinux-x86_64-image = ""
"""
)
monkeypatch.setenv("CIBW_MANYLINUX_I686_IMAGE", "")
monkeypatch.setenv("CIBW_MANYLINUX_AARCH64_IMAGE", "manylinux1")
options = ConfigOptions(tmp_path, platform="linux")
assert options("manylinux-x86_64-image") == ""
assert options("manylinux-i686-image") == ""
assert options("manylinux-aarch64-image") == "manylinux1"
assert options("manylinux-x86_64-image", ignore_empty=True) == "manylinux2010"
assert options("manylinux-i686-image", ignore_empty=True) == "manylinux1"
assert options("manylinux-aarch64-image", ignore_empty=True) == "manylinux1"
@pytest.mark.parametrize("ignore_empty", (True, False))
def test_dig_first(ignore_empty):
d1 = {"random": "thing"}
d2 = {"this": "that", "empty": ""}
d3 = {"other": "hi"}
d4 = {"this": "d4", "empty": "not"}
answer = _dig_first(
(d1, "empty"),
(d2, "empty"),
(d3, "empty"),
(d4, "empty"),
ignore_empty=ignore_empty,
)
assert answer == ("not" if ignore_empty else "")
answer = _dig_first(
(d1, "this"),
(d2, "this"),
(d3, "this"),
(d4, "this"),
ignore_empty=ignore_empty,
)
assert answer == "that"
with pytest.raises(KeyError):
_dig_first(
(d1, "this"),
(d2, "other"),
(d3, "this"),
(d4, "other"),
ignore_empty=ignore_empty,
)