Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e8db6ff3e0 | ||
|
|
471565cbfa | ||
|
|
ba0956c60c | ||
|
|
e82258a5d9 | ||
|
|
b43367de3a | ||
|
|
dbdabba01f |
@@ -1,31 +0,0 @@
|
||||
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
|
||||
@@ -14,7 +14,7 @@ repos:
|
||||
- id: trailing-whitespace
|
||||
|
||||
- repo: https://github.com/asottile/pyupgrade
|
||||
rev: v2.26.0
|
||||
rev: v2.25.0
|
||||
hooks:
|
||||
- id: pyupgrade
|
||||
name: PyUpgrade 3.6+
|
||||
@@ -31,7 +31,7 @@ repos:
|
||||
- id: isort
|
||||
|
||||
- repo: https://github.com/psf/black
|
||||
rev: 21.9b0
|
||||
rev: 21.8b0
|
||||
hooks:
|
||||
- id: black
|
||||
|
||||
|
||||
@@ -22,18 +22,17 @@ 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<br/>musllinux x86_64 | manylinux<br/>musllinux i686 | manylinux<br/>musllinux aarch64 | manylinux<br/>musllinux ppc64le | manylinux<br/>musllinux s390x |
|
||||
| | macOS Intel | macOS Apple Silicon | Windows 64bit | Windows 32bit | manylinux x86_64 | manylinux i686 | manylinux aarch64 | manylinux ppc64le | manylinux 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, musllinux, macOS 10.9+, and Windows wheels for CPython and PyPy
|
||||
- Builds manylinux, 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
|
||||
@@ -63,7 +62,7 @@ Usage
|
||||
Example setup
|
||||
-------------
|
||||
|
||||
To build manylinux, musllinux, macOS, and Windows wheels on GitHub Actions, you could use this `.github/workflows/wheels.yml`:
|
||||
To build manylinux, macOS, and Windows wheels on GitHub Actions, you could use this `.github/workflows/wheels.yml`:
|
||||
|
||||
```yaml
|
||||
name: Build
|
||||
@@ -85,7 +84,7 @@ jobs:
|
||||
- uses: actions/setup-python@v2
|
||||
|
||||
- name: Install cibuildwheel
|
||||
run: python -m pip install cibuildwheel==2.2.0a1
|
||||
run: python -m pip install cibuildwheel==2.1.3
|
||||
|
||||
- name: Build wheels
|
||||
run: python -m cibuildwheel --output-dir wheelhouse
|
||||
@@ -115,7 +114,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`<br/>`CIBW_MUSLLINUX_*_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#linux-image) | Specify alternative manylinux / musllinux Docker images |
|
||||
| | [`CIBW_MANYLINUX_*_IMAGE`](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image) | Specify alternative manylinux 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 |
|
||||
@@ -189,17 +188,11 @@ Changelog
|
||||
|
||||
<!-- this section was generated by bin/update_readme_changelog.py -- do not edit manually -->
|
||||
|
||||
### v2.2.0 (prerelease)
|
||||
### v2.1.3
|
||||
|
||||
_Currently in prerelease. The below release notes will be condensed into a single entry on final release._
|
||||
_6 October 2021_
|
||||
|
||||
_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)
|
||||
- 🛠 Updated CPython 3.10 to the 3.10.0 final release
|
||||
|
||||
### v2.1.2
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
jobs:
|
||||
- job: linux_38
|
||||
timeoutInMinutes: 120
|
||||
pool: {vmImage: 'Ubuntu-18.04'}
|
||||
steps:
|
||||
- task: UsePythonVersion@0
|
||||
|
||||
+1
-14
@@ -17,20 +17,7 @@ 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",
|
||||
*xdist_test_args,
|
||||
"-x",
|
||||
"--durations",
|
||||
"0",
|
||||
"--timeout=2400",
|
||||
"test",
|
||||
],
|
||||
[sys.executable, "-m", "pytest", "-x", "--durations", "0", "--timeout=2400", "test"],
|
||||
check=True,
|
||||
)
|
||||
|
||||
+3
-10
@@ -19,15 +19,14 @@ 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),
|
||||
# manylinux2010 images
|
||||
# 2010 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),
|
||||
# manylinux2014 images
|
||||
# 2014 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),
|
||||
@@ -36,7 +35,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),
|
||||
# manylinux_2_24 images
|
||||
# 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),
|
||||
@@ -45,12 +44,6 @@ 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 @@
|
||||
__version__ = "2.2.0a1"
|
||||
__version__ = "2.1.3"
|
||||
|
||||
@@ -41,14 +41,6 @@ MANYLINUX_ARCHS = (
|
||||
"pypy_i686",
|
||||
)
|
||||
|
||||
MUSLLINUX_ARCHS = (
|
||||
"x86_64",
|
||||
"i686",
|
||||
"aarch64",
|
||||
"ppc64le",
|
||||
"s390x",
|
||||
)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
platform: PlatformName
|
||||
@@ -175,13 +167,10 @@ 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 | musllinux_identifiers,
|
||||
"windows": manylinux_identifiers | musllinux_identifiers,
|
||||
"macos": manylinux_identifiers,
|
||||
"windows": manylinux_identifiers,
|
||||
}
|
||||
options = ConfigOptions(package_dir, args.config_file, platform=platform, disallow=disallow)
|
||||
output_dir = Path(
|
||||
@@ -289,7 +278,6 @@ 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()
|
||||
@@ -303,9 +291,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", ignore_empty=True)
|
||||
config_value = options(f"manylinux-{build_platform}-image")
|
||||
|
||||
if not config_value:
|
||||
if config_value is None:
|
||||
# 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:
|
||||
@@ -315,20 +303,6 @@ 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,
|
||||
@@ -346,7 +320,6 @@ 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,
|
||||
)
|
||||
|
||||
|
||||
@@ -61,7 +61,6 @@ 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"]),
|
||||
@@ -72,11 +71,6 @@ 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()
|
||||
|
||||
@@ -20,11 +20,6 @@ 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",
|
||||
|
||||
+7
-21
@@ -19,26 +19,15 @@ class ConfigOptionError(KeyError):
|
||||
pass
|
||||
|
||||
|
||||
def _dig_first(*pairs: Tuple[Mapping[str, Setting], str], ignore_empty: bool = False) -> Setting:
|
||||
def _dig_first(*pairs: Tuple[Mapping[str, Any], str]) -> Setting:
|
||||
"""
|
||||
Return the first dict item that matches from pairs of dicts and keys.
|
||||
Will throw a KeyError if missing.
|
||||
Final result is will throw a KeyError if missing.
|
||||
|
||||
_dig_first((dict1, "key1"), (dict2, "key2"), ...)
|
||||
"""
|
||||
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)
|
||||
(dict_like, key), *others = pairs
|
||||
return dict_like.get(key, _dig_first(*others)) if others else dict_like[key]
|
||||
|
||||
|
||||
class ConfigOptions:
|
||||
@@ -73,7 +62,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] = {}
|
||||
|
||||
@@ -86,7 +75,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')
|
||||
@@ -140,7 +129,6 @@ 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,
|
||||
@@ -148,8 +136,7 @@ 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']". Empty variables will not override if ignore_empty
|
||||
is True.
|
||||
with "table['sep']".
|
||||
"""
|
||||
|
||||
if name not in self.default_options and name not in self.default_platform_options:
|
||||
@@ -168,7 +155,6 @@ class ConfigOptions:
|
||||
(self.config_options, name),
|
||||
(self.default_platform_options, name),
|
||||
(self.default_options, name),
|
||||
ignore_empty=ignore_empty,
|
||||
)
|
||||
|
||||
if isinstance(result, dict):
|
||||
|
||||
@@ -28,31 +28,6 @@ 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]
|
||||
@@ -65,9 +40,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.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 = "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 = "pp37-macosx_x86_64", version = "3.7", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.5-osx64.tar.bz2" },
|
||||
]
|
||||
|
||||
@@ -81,7 +56,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-rc2", arch = "32" },
|
||||
{ identifier = "cp310-win_amd64", version = "3.10.0-rc2", arch = "64" },
|
||||
{ identifier = "cp310-win32", version = "3.10.0", arch = "32" },
|
||||
{ identifier = "cp310-win_amd64", version = "3.10.0", 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.9.1
|
||||
delocate==0.10.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.2
|
||||
distlib==0.3.3
|
||||
# via virtualenv
|
||||
filelock==3.0.12
|
||||
filelock==3.3.0
|
||||
# via virtualenv
|
||||
importlib-metadata==4.8.1
|
||||
# via
|
||||
@@ -18,23 +18,21 @@ importlib-metadata==4.8.1
|
||||
# virtualenv
|
||||
importlib-resources==5.2.2
|
||||
# via virtualenv
|
||||
platformdirs==2.3.0
|
||||
platformdirs==2.4.0
|
||||
# via virtualenv
|
||||
six==1.16.0
|
||||
# via
|
||||
# delocate
|
||||
# virtualenv
|
||||
# via virtualenv
|
||||
typing-extensions==3.10.0.2
|
||||
# via
|
||||
# delocate
|
||||
# importlib-metadata
|
||||
virtualenv==20.8.0
|
||||
virtualenv==20.8.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.37.0
|
||||
# via
|
||||
# -r cibuildwheel/resources/constraints.in
|
||||
# delocate
|
||||
zipp==3.5.0
|
||||
zipp==3.6.0
|
||||
# via
|
||||
# importlib-metadata
|
||||
# importlib-resources
|
||||
@@ -42,5 +40,5 @@ zipp==3.5.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.0.4
|
||||
setuptools==58.2.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -6,37 +6,35 @@
|
||||
#
|
||||
backports.entry-points-selectable==1.1.0
|
||||
# via virtualenv
|
||||
delocate==0.9.1
|
||||
delocate==0.10.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.2
|
||||
distlib==0.3.3
|
||||
# via virtualenv
|
||||
filelock==3.0.12
|
||||
filelock==3.3.0
|
||||
# via virtualenv
|
||||
importlib-metadata==4.8.1
|
||||
# via
|
||||
# backports.entry-points-selectable
|
||||
# virtualenv
|
||||
platformdirs==2.3.0
|
||||
platformdirs==2.4.0
|
||||
# via virtualenv
|
||||
six==1.16.0
|
||||
# via
|
||||
# delocate
|
||||
# virtualenv
|
||||
# via virtualenv
|
||||
typing-extensions==3.10.0.2
|
||||
# via
|
||||
# delocate
|
||||
# importlib-metadata
|
||||
virtualenv==20.8.0
|
||||
virtualenv==20.8.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.37.0
|
||||
# via
|
||||
# -r cibuildwheel/resources/constraints.in
|
||||
# delocate
|
||||
zipp==3.5.0
|
||||
zipp==3.6.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.0.4
|
||||
setuptools==58.2.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -6,21 +6,19 @@
|
||||
#
|
||||
backports.entry-points-selectable==1.1.0
|
||||
# via virtualenv
|
||||
delocate==0.9.1
|
||||
delocate==0.10.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.2
|
||||
distlib==0.3.3
|
||||
# via virtualenv
|
||||
filelock==3.0.12
|
||||
filelock==3.3.0
|
||||
# via virtualenv
|
||||
platformdirs==2.3.0
|
||||
platformdirs==2.4.0
|
||||
# via virtualenv
|
||||
six==1.16.0
|
||||
# via
|
||||
# delocate
|
||||
# virtualenv
|
||||
# via virtualenv
|
||||
typing-extensions==3.10.0.2
|
||||
# via delocate
|
||||
virtualenv==20.8.0
|
||||
virtualenv==20.8.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.37.0
|
||||
# via
|
||||
@@ -30,5 +28,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.0.4
|
||||
setuptools==58.2.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -6,21 +6,19 @@
|
||||
#
|
||||
backports.entry-points-selectable==1.1.0
|
||||
# via virtualenv
|
||||
delocate==0.9.1
|
||||
delocate==0.10.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.2
|
||||
distlib==0.3.3
|
||||
# via virtualenv
|
||||
filelock==3.0.12
|
||||
filelock==3.3.0
|
||||
# via virtualenv
|
||||
platformdirs==2.3.0
|
||||
platformdirs==2.4.0
|
||||
# via virtualenv
|
||||
six==1.16.0
|
||||
# via
|
||||
# delocate
|
||||
# virtualenv
|
||||
# via virtualenv
|
||||
typing-extensions==3.10.0.2
|
||||
# via delocate
|
||||
virtualenv==20.8.0
|
||||
virtualenv==20.8.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.37.0
|
||||
# via
|
||||
@@ -30,5 +28,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.0.4
|
||||
setuptools==58.2.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -6,21 +6,19 @@
|
||||
#
|
||||
backports.entry-points-selectable==1.1.0
|
||||
# via virtualenv
|
||||
delocate==0.9.1
|
||||
delocate==0.10.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.2
|
||||
distlib==0.3.3
|
||||
# via virtualenv
|
||||
filelock==3.0.12
|
||||
filelock==3.3.0
|
||||
# via virtualenv
|
||||
platformdirs==2.3.0
|
||||
platformdirs==2.4.0
|
||||
# via virtualenv
|
||||
six==1.16.0
|
||||
# via
|
||||
# delocate
|
||||
# virtualenv
|
||||
# via virtualenv
|
||||
typing-extensions==3.10.0.2
|
||||
# via delocate
|
||||
virtualenv==20.8.0
|
||||
virtualenv==20.8.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.37.0
|
||||
# via
|
||||
@@ -30,5 +28,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.0.4
|
||||
setuptools==58.2.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -27,12 +27,6 @@ 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}"
|
||||
|
||||
@@ -1,43 +1,43 @@
|
||||
[x86_64]
|
||||
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
|
||||
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
|
||||
|
||||
[i686]
|
||||
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
|
||||
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
|
||||
|
||||
[pypy_x86_64]
|
||||
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
|
||||
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
|
||||
|
||||
[pypy_i686]
|
||||
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
|
||||
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
|
||||
|
||||
[aarch64]
|
||||
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
|
||||
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
|
||||
|
||||
[ppc64le]
|
||||
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
|
||||
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
|
||||
|
||||
[s390x]
|
||||
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
|
||||
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
|
||||
|
||||
[pypy_aarch64]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2021-09-19-a5ef179
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2021-09-19-a5ef179
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2021-10-06-94da8f1
|
||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2021-10-06-94da8f1
|
||||
|
||||
|
||||
@@ -215,7 +215,6 @@ 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
|
||||
|
||||
+6
-12
@@ -2,17 +2,11 @@
|
||||
title: Changelog
|
||||
---
|
||||
|
||||
### v2.2.0 (prerelease)
|
||||
### v2.1.3
|
||||
|
||||
_Currently in prerelease. The below release notes will be condensed into a single entry on final release._
|
||||
_6 October 2021_
|
||||
|
||||
_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)
|
||||
- 🛠 Updated CPython 3.10 to the 3.10.0 final release
|
||||
|
||||
### v2.1.2
|
||||
|
||||
@@ -78,7 +72,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/#linux-image)
|
||||
images, set your [manylinux image](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-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
|
||||
@@ -333,7 +327,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/#linux-image)
|
||||
and [manylinux image](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-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)
|
||||
@@ -408,7 +402,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/#linux-image) option.
|
||||
build using the old manylinux1 image using the [manylinux image](https://cibuildwheel.readthedocs.io/en/stable/options/#manylinux-image) option.
|
||||
(#155)
|
||||
- 📚 Documentation is now on its [own mini-site](https://cibuildwheel.readthedocs.io),
|
||||
rather than on the README (#169)
|
||||
|
||||
@@ -383,10 +383,3 @@
|
||||
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
@@ -6,15 +6,15 @@ title: Tips and tricks
|
||||
|
||||
### Linux builds on Docker
|
||||
|
||||
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:
|
||||
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:
|
||||
|
||||
- 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.
|
||||
- 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.
|
||||
|
||||
`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`/`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.
|
||||
- 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.
|
||||
|
||||
### 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.2.0a1
|
||||
uses: pypa/cibuildwheel@v2.1.3
|
||||
```
|
||||
|
||||
This is a composite step that just runs cibuildwheel using pipx. You can set command-line options as `with:` parameters, and use `env:` as normal.
|
||||
@@ -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.2.0a1
|
||||
cibuildwheel==2.1.3
|
||||
```
|
||||
|
||||
Then your install step would have `python -m pip install -r requirements-cibw.txt` in it. Your `.github/dependabot.yml` file could look like this:
|
||||
|
||||
+27
-37
@@ -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 | 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 | |
|
||||
| | 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 | |
|
||||
|
||||
|
||||
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,39 +780,29 @@ Platform-specific environment variables are also available:<br/>
|
||||
In configuration mode, you can use an inline array, and the items will be joined with `&&`.
|
||||
|
||||
|
||||
<div class="link-target" id="manylinux-image"></div>
|
||||
### CIBW_MANYLINUX_*_IMAGE {: #manylinux-image}
|
||||
> Specify alternative manylinux Docker images
|
||||
|
||||
### `CIBW_MANYLINUX_*_IMAGE`, `CIBW_MUSLLINUX_*_IMAGE` {: #linux-image}
|
||||
> Specify alternative manylinux / musllinux Docker images
|
||||
The available options are:
|
||||
|
||||
The available options are (default value):
|
||||
- `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`
|
||||
|
||||
- `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))
|
||||
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).
|
||||
|
||||
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
|
||||
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 this option is blank, it will fall though to the next available definition (environment variable -> pyproject.toml -> default).
|
||||
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 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)"'`).
|
||||
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)"'`).
|
||||
|
||||
#### Examples
|
||||
|
||||
@@ -905,8 +895,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/musllinux image that cibuildwheel uses. To change
|
||||
dependency versions on Linux, use the [CIBW_MANYLINUX_* / CIBW_MUSLLINUX_*](#linux-image)
|
||||
are bundled with the manylinux image that cibuildwheel uses. To change
|
||||
dependency versions on Linux, use the [CIBW_MANYLINUX_*](#manylinux-image)
|
||||
options.
|
||||
|
||||
#### Examples
|
||||
@@ -1150,7 +1140,7 @@ With macOS `universal2` wheels, you can also skip the individual archs inside th
|
||||
|
||||
```yaml
|
||||
# Will avoid testing on emulated architectures
|
||||
CIBW_TEST_SKIP: "*-*linux_{aarch64,ppc64le,s390x}"
|
||||
CIBW_TEST_SKIP: "*-manylinux_{aarch64,ppc64le,s390x}"
|
||||
|
||||
# Skip trying to test arm64 builds on Intel Macs
|
||||
CIBW_TEST_SKIP: "*-macosx_arm64 *-macosx_universal2:arm64"
|
||||
@@ -1161,7 +1151,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 = "*-*linux_{aarch64,ppc64le,s390x}"
|
||||
test-skip = "*-manylinux_{aarch64,ppc64le,s390x}"
|
||||
|
||||
# Skip trying to test arm64 builds on Intel Macs
|
||||
test-skip = "*-macosx_arm64 *-macosx_universal2:arm64"
|
||||
|
||||
+2
-2
@@ -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.2.0a1
|
||||
run: pipx run cibuildwheel==2.1.3
|
||||
|
||||
- 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.2.0a1
|
||||
run: python -m pip install cibuildwheel==2.1.3
|
||||
|
||||
- name: Build wheels
|
||||
run: python -m cibuildwheel --output-dir wheelhouse
|
||||
|
||||
+78
-78
@@ -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 |
|
||||
| [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 |
|
||||
| [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. |
|
||||
| [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. |
|
||||
| [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 |
|
||||
| [python-rapidjson][] | ![travisci icon][] ![gitlab icon][] ![appveyor icon][] | ![windows icon][] ![linux icon][] | Python wrapper around rapidjson |
|
||||
| [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 |
|
||||
| [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. |
|
||||
| [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 |
|
||||
| [sourmash][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Quickly search, compare, and analyze genomic and metagenomic data sets. |
|
||||
| [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. |
|
||||
| [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. |
|
||||
| [iDynTree][] | ![github icon][] | ![linux icon][] | Uses manylinux_2_24 |
|
||||
| [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. |
|
||||
| [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. |
|
||||
| [ninja][] | ![github icon][] ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Multitagged binary builds for all supported platforms, using cibw 2 config configuration. |
|
||||
| [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
|
||||
[h5py]: https://github.com/h5py/h5py
|
||||
[Dependency Injector]: https://github.com/ets-labs/python-dependency-injector
|
||||
[h5py]: https://github.com/h5py/h5py
|
||||
[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
|
||||
[python-rapidjson]: https://github.com/python-rapidjson/python-rapidjson
|
||||
[H3-py]: https://github.com/uber/h3-py
|
||||
[python-rapidjson]: https://github.com/python-rapidjson/python-rapidjson
|
||||
[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
|
||||
[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
|
||||
[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
|
||||
[sourmash]: https://github.com/dib-lab/sourmash
|
||||
[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
|
||||
[iDynTree]: https://github.com/robotology/idyntree
|
||||
[boost-histogram]: https://github.com/scikit-hep/boost-histogram
|
||||
[iDynTree]: https://github.com/robotology/idyntree
|
||||
[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
|
||||
[ninja]: https://github.com/scikit-build/ninja-python-distributions
|
||||
[Imagecodecs (fork)]: https://github.com/czaki/imagecodecs_build
|
||||
[ninja]: https://github.com/scikit-build/ninja-python-distributions
|
||||
[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: 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 -->
|
||||
<!-- 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 -->
|
||||
|
||||
<!-- END bin/projects.py -->
|
||||
|
||||
|
||||
@@ -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.2.0a1
|
||||
install: python -m pip install cibuildwheel==2.1.3
|
||||
|
||||
build_script: python -m cibuildwheel --output-dir wheelhouse
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ jobs:
|
||||
- bash: |
|
||||
set -o errexit
|
||||
python3 -m pip install --upgrade pip
|
||||
pip3 install cibuildwheel==2.2.0a1
|
||||
pip3 install cibuildwheel==2.1.3
|
||||
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.2.0a1
|
||||
python3 -m pip install cibuildwheel==2.1.3
|
||||
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.2.0a1
|
||||
pip install cibuildwheel==2.1.3
|
||||
displayName: Install dependencies
|
||||
- bash: cibuildwheel --output-dir wheelhouse .
|
||||
displayName: Build wheels
|
||||
|
||||
@@ -11,7 +11,7 @@ jobs:
|
||||
- run:
|
||||
name: Build the Linux wheels.
|
||||
command: |
|
||||
pip3 install --user cibuildwheel==2.2.0a1
|
||||
pip3 install --user cibuildwheel==2.1.3
|
||||
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.2.0a1
|
||||
pip3 install cibuildwheel==2.1.3
|
||||
cibuildwheel --output-dir wheelhouse
|
||||
- store_artifacts:
|
||||
path: wheelhouse/
|
||||
|
||||
@@ -10,7 +10,7 @@ jobs:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Build wheels
|
||||
uses: pypa/cibuildwheel@v2.2.0a1
|
||||
uses: pypa/cibuildwheel@v2.1.3
|
||||
env:
|
||||
CIBW_ARCHS_MACOS: x86_64 universal2
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ jobs:
|
||||
python-version: '3.8'
|
||||
|
||||
- name: Build wheels
|
||||
uses: pypa/cibuildwheel@v2.2.0a1
|
||||
uses: pypa/cibuildwheel@v2.1.3
|
||||
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
|
||||
@@ -14,7 +14,7 @@ jobs:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Build wheels
|
||||
uses: pypa/cibuildwheel@v2.2.0a1
|
||||
uses: pypa/cibuildwheel@v2.1.3
|
||||
# to supply options, put them in 'env', like:
|
||||
# env:
|
||||
# CIBW_SOME_OPTION: value
|
||||
|
||||
@@ -25,7 +25,7 @@ jobs:
|
||||
platforms: all
|
||||
|
||||
- name: Build wheels
|
||||
uses: pypa/cibuildwheel@v2.2.0a1
|
||||
uses: pypa/cibuildwheel@v2.1.3
|
||||
env:
|
||||
# configure cibuildwheel to build native archs ('auto'), and some
|
||||
# emulated ones
|
||||
|
||||
@@ -12,7 +12,7 @@ linux:
|
||||
DOCKER_TLS_CERTDIR: ""
|
||||
script:
|
||||
- curl -sSL https://get.docker.com/ | sh
|
||||
- python -m pip install cibuildwheel==2.2.0a1
|
||||
- python -m pip install cibuildwheel==2.1.3
|
||||
- cibuildwheel --output-dir wheelhouse
|
||||
artifacts:
|
||||
paths:
|
||||
|
||||
@@ -19,7 +19,7 @@ jobs:
|
||||
- ln -s /c/Python38/python.exe /c/Python38/python3.exe
|
||||
|
||||
install:
|
||||
- python3 -m pip install cibuildwheel==2.2.0a1
|
||||
- python3 -m pip install cibuildwheel==2.1.3
|
||||
|
||||
script:
|
||||
# build the wheels, put them into './wheelhouse'
|
||||
|
||||
@@ -25,7 +25,7 @@ jobs:
|
||||
- ln -s /c/Python38/python.exe /c/Python38/python3.exe
|
||||
|
||||
install:
|
||||
- python3 -m pip install cibuildwheel==2.2.0a1
|
||||
- python3 -m pip install cibuildwheel==2.1.3
|
||||
|
||||
script:
|
||||
# build the wheels, put them into './wheelhouse'
|
||||
|
||||
@@ -57,7 +57,7 @@ jobs:
|
||||
- stage: deploy
|
||||
name: Build and deploy Linux wheels
|
||||
services: docker
|
||||
install: python3 -m pip install cibuildwheel==2.2.0a1
|
||||
install: python3 -m pip install cibuildwheel==2.1.3
|
||||
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.2.0a1
|
||||
install: python3 -m pip install cibuildwheel==2.1.3
|
||||
script: python3 -m cibuildwheel --output-dir wheelhouse
|
||||
after_success: |
|
||||
python3 -m pip install twine
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[metadata]
|
||||
name = cibuildwheel
|
||||
version = 2.2.0a1
|
||||
version = 2.1.3
|
||||
description = Build Python wheels on CI with minimal configuration.
|
||||
long_description = file: README.md
|
||||
long_description_content_type = text/markdown
|
||||
|
||||
@@ -11,7 +11,6 @@ extras = {
|
||||
"jinja2",
|
||||
"pytest>=6",
|
||||
"pytest-timeout",
|
||||
"pytest-xdist; sys_platform == 'linux'",
|
||||
],
|
||||
"bin": [
|
||||
"click",
|
||||
|
||||
@@ -56,6 +56,4 @@ 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
|
||||
), f"{expected_wheels} vs {build_identifiers}"
|
||||
assert len(expected_wheels) == len(build_identifiers)
|
||||
|
||||
@@ -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}-manylinux*",
|
||||
"CIBW_BUILD": "cp3{6,7,8,9}-*",
|
||||
},
|
||||
)
|
||||
|
||||
# also check that we got the right wheels built
|
||||
expected_wheels = [
|
||||
w
|
||||
for w in utils.expected_wheels("spam", "0.1.0", musllinux_versions=[])
|
||||
for w in utils.expected_wheels("spam", "0.1.0")
|
||||
if "-cp36-" in w or "-cp37-" in w or "-cp38-" in w or "-cp39-" in w
|
||||
]
|
||||
assert set(actual_wheels) == set(expected_wheels)
|
||||
|
||||
@@ -57,7 +57,6 @@ 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,
|
||||
@@ -80,10 +79,7 @@ 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]),
|
||||
musllinux_versions=[],
|
||||
"spam", "0.1.0", manylinux_versions=platform_tag_map.get(manylinux_image, [manylinux_image])
|
||||
)
|
||||
if manylinux_image in {"manylinux1"}:
|
||||
# remove PyPy & CPython 3.10 and above
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
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)
|
||||
@@ -103,7 +103,6 @@ def expected_wheels(
|
||||
package_name,
|
||||
package_version,
|
||||
manylinux_versions=None,
|
||||
musllinux_versions=None,
|
||||
macosx_deployment_target="10.9",
|
||||
machine_arch=None,
|
||||
):
|
||||
@@ -124,9 +123,6 @@ 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"]:
|
||||
@@ -159,16 +155,6 @@ 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"):
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import pytest
|
||||
|
||||
from cibuildwheel.options import ConfigOptionError, ConfigOptions, _dig_first
|
||||
from cibuildwheel.options import ConfigOptionError, ConfigOptions
|
||||
|
||||
PYPROJECT_1 = """
|
||||
[tool.cibuildwheel]
|
||||
@@ -181,68 +181,10 @@ def test_disallowed_a(tmp_path):
|
||||
tmp_path.joinpath("pyproject.toml").write_text(
|
||||
"""
|
||||
[tool.cibuildwheel.windows]
|
||||
manylinux-x86_64-image = "manylinux1"
|
||||
manylinux-x64_86-image = "manylinux1"
|
||||
"""
|
||||
)
|
||||
disallow = {"windows": {"manylinux-x86_64-image"}}
|
||||
disallow = {"windows": {"manylinux-x64_86-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,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user