Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
67a7175578 | ||
|
|
53aa7f7a4f | ||
|
|
01504b889c | ||
|
|
eb39da0b10 | ||
|
|
3a46bde3fb | ||
|
|
3597095948 | ||
|
|
6a9b39af49 | ||
|
|
3ebce17339 | ||
|
|
6f17a09d06 | ||
|
|
2dfeb94026 | ||
|
|
ed73b75efe | ||
|
|
0117165b02 | ||
|
|
35ffadc277 | ||
|
|
65f7c68354 | ||
|
|
93986db68c | ||
|
|
d22703a7ce | ||
|
|
f0e9518e79 | ||
|
|
8537b1670f | ||
|
|
eb463fd198 | ||
|
|
99dc2ed515 | ||
|
|
0bc70cac93 | ||
|
|
3ea4526c63 | ||
|
|
2723bbab17 | ||
|
|
bd512e9065 | ||
|
|
c50d72c03c | ||
|
|
ccd29d8402 | ||
|
|
8d71ecace2 | ||
|
|
dce8c221b7 | ||
|
|
ffeccfe807 | ||
|
|
ce8e3fe68d | ||
|
|
2812f8b588 | ||
|
|
67071395fa | ||
|
|
623b39eb5a | ||
|
|
2b35f3c658 | ||
|
|
b39dc5bb5e | ||
|
|
2bf4c14249 | ||
|
|
4bc6bd3c5f | ||
|
|
225ff6347f | ||
|
|
75c93112dc | ||
|
|
4cfe1a3fff | ||
|
|
ed290fac3d | ||
|
|
c9216ba01c | ||
|
|
f708df11c7 | ||
|
|
888771972a |
+57
@@ -0,0 +1,57 @@
|
|||||||
|
run_tests: &RUN_TESTS
|
||||||
|
install_cibuildwheel_script:
|
||||||
|
- python -m pip install -e ".[dev]" pytest-custom-exit-code
|
||||||
|
run_cibuildwheel_tests_script:
|
||||||
|
- python ./bin/run_tests.py
|
||||||
|
|
||||||
|
|
||||||
|
linux_x86_task:
|
||||||
|
compute_engine_instance:
|
||||||
|
image_project: cirrus-images
|
||||||
|
image: family/docker-builder
|
||||||
|
platform: linux
|
||||||
|
cpu: 8
|
||||||
|
memory: 8G
|
||||||
|
|
||||||
|
install_pre_requirements_script:
|
||||||
|
- apt install -y python3-venv python-is-python3
|
||||||
|
<<: *RUN_TESTS
|
||||||
|
|
||||||
|
linux_aarch64_task:
|
||||||
|
compute_engine_instance:
|
||||||
|
image_project: cirrus-images
|
||||||
|
image: family/docker-builder-arm64
|
||||||
|
architecture: arm64
|
||||||
|
platform: linux
|
||||||
|
cpu: 4
|
||||||
|
memory: 4G
|
||||||
|
|
||||||
|
install_pre_requirements_script:
|
||||||
|
- apt install -y python3-venv python-is-python3
|
||||||
|
<<: *RUN_TESTS
|
||||||
|
|
||||||
|
windows_x86_task:
|
||||||
|
# The task takes ~55 minutes while the timeout happens
|
||||||
|
# after 60 minutes by default, let's allow some wiggle room.
|
||||||
|
timeout_in: 90m
|
||||||
|
windows_container:
|
||||||
|
image: cirrusci/windowsservercore:visualstudio2022
|
||||||
|
cpu: 8
|
||||||
|
memory: 8G
|
||||||
|
|
||||||
|
install_pre_requirements_script:
|
||||||
|
- choco install -y --no-progress python3 --version 3.10.6
|
||||||
|
- refreshenv
|
||||||
|
- echo PATH=%PATH% >> "%CIRRUS_ENV%"
|
||||||
|
<<: *RUN_TESTS
|
||||||
|
|
||||||
|
macos_arm64_task:
|
||||||
|
macos_instance:
|
||||||
|
image: ghcr.io/cirruslabs/macos-monterey-xcode
|
||||||
|
|
||||||
|
env:
|
||||||
|
PATH: /opt/homebrew/opt/python@3.10/bin:$PATH
|
||||||
|
install_pre_requirements_script:
|
||||||
|
- brew install python@3.10
|
||||||
|
- ln -s python3 /opt/homebrew/opt/python@3.10/bin/python
|
||||||
|
<<: *RUN_TESTS
|
||||||
@@ -36,7 +36,7 @@ repos:
|
|||||||
exclude: ^cibuildwheel/resources/.*py$
|
exclude: ^cibuildwheel/resources/.*py$
|
||||||
|
|
||||||
- repo: https://github.com/psf/black
|
- repo: https://github.com/psf/black
|
||||||
rev: 22.6.0
|
rev: 22.8.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: black
|
- id: black
|
||||||
|
|
||||||
@@ -84,7 +84,7 @@ repos:
|
|||||||
rev: 5.0.4
|
rev: 5.0.4
|
||||||
hooks:
|
hooks:
|
||||||
- id: flake8
|
- id: flake8
|
||||||
exclude: cibuildwheel/resources/
|
exclude: ^cibuildwheel/resources/
|
||||||
additional_dependencies: *flake8-dependencies
|
additional_dependencies: *flake8-dependencies
|
||||||
|
|
||||||
- repo: https://github.com/pre-commit/pygrep-hooks
|
- repo: https://github.com/pre-commit/pygrep-hooks
|
||||||
@@ -109,6 +109,7 @@ repos:
|
|||||||
entry: PyBind|Numpy|Cmake|Github|PyTest
|
entry: PyBind|Numpy|Cmake|Github|PyTest
|
||||||
types:
|
types:
|
||||||
- markdown
|
- markdown
|
||||||
|
exclude: ^docs/working-examples\.md$ # Autogenerated
|
||||||
- id: update-readme-changelog
|
- id: update-readme-changelog
|
||||||
name: Update README changelog
|
name: Update README changelog
|
||||||
language: python
|
language: python
|
||||||
@@ -116,7 +117,8 @@ repos:
|
|||||||
files: ^docs/changelog.md$
|
files: ^docs/changelog.md$
|
||||||
|
|
||||||
- repo: https://github.com/codespell-project/codespell
|
- repo: https://github.com/codespell-project/codespell
|
||||||
rev: v2.1.0
|
rev: v2.2.1
|
||||||
hooks:
|
hooks:
|
||||||
- id: codespell
|
- id: codespell
|
||||||
args: ["-L", "sur"]
|
args: ["-L", "sur"]
|
||||||
|
exclude: ^docs/working-examples\.md$ # Autogenerated
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
This is a summary of the Python versions and platforms covered by the different CI platforms:
|
This is a summary of the Python versions and platforms covered by the different CI platforms:
|
||||||
|
|
||||||
| | 3.7 | 3.8 | 3.9 | 3.10 |
|
| | 3.7 | 3.8 | 3.9 | 3.10 |
|
||||||
|----------|-----------------------|---------------------------|----------|----------------|
|
|----------|-----------------------|---------------------------|----------|---------------------------|
|
||||||
| Linux | AppVeyor¹ / Travis CI | Azure Pipelines / GitLab | CircleCI | GitHub Actions |
|
| Linux | AppVeyor¹ / Travis CI | Azure Pipelines / GitLab | CircleCI | GitHub Actions, Cirrus CI |
|
||||||
| macOS | AppVeyor¹ / Travis CI | Azure Pipelines | CircleCI | GitHub Actions |
|
| macOS | AppVeyor¹ / Travis CI | Azure Pipelines | CircleCI | GitHub Actions, Cirrus CI |
|
||||||
| Windows | AppVeyor¹ / Travis CI | Azure Pipelines | | GitHub Actions |
|
| Windows | AppVeyor¹ / Travis CI | Azure Pipelines | | GitHub Actions, Cirrus CI |
|
||||||
|
|
||||||
> ¹ AppVeyor only runs the "basic" test to reduce load.
|
> ¹ AppVeyor only runs the "basic" test to reduce load.
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ cibuildwheel
|
|||||||
[](https://ci.appveyor.com/project/joerick/cibuildwheel/branch/main)
|
[](https://ci.appveyor.com/project/joerick/cibuildwheel/branch/main)
|
||||||
[](https://circleci.com/gh/pypa/cibuildwheel)
|
[](https://circleci.com/gh/pypa/cibuildwheel)
|
||||||
[](https://dev.azure.com/joerick0429/cibuildwheel/_build/latest?definitionId=4&branchName=main)
|
[](https://dev.azure.com/joerick0429/cibuildwheel/_build/latest?definitionId=4&branchName=main)
|
||||||
|
[](https://cirrus-ci.com/github/pypa/cibuildwheel)
|
||||||
|
|
||||||
|
|
||||||
[Documentation](https://cibuildwheel.readthedocs.org)
|
[Documentation](https://cibuildwheel.readthedocs.org)
|
||||||
@@ -39,7 +40,7 @@ What does it do?
|
|||||||
<sup>³ Alpine 3.14 and very briefly 3.15's default python3 [was not able to load](https://github.com/pypa/cibuildwheel/issues/934) musllinux wheels. This has been fixed; please upgrade the python package if using Alpine from before the fix.</sup><br>
|
<sup>³ Alpine 3.14 and very briefly 3.15's default python3 [was not able to load](https://github.com/pypa/cibuildwheel/issues/934) musllinux wheels. This has been fixed; please upgrade the python package if using Alpine from before the fix.</sup><br>
|
||||||
|
|
||||||
- Builds manylinux, musllinux, 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
|
- Works on GitHub Actions, Azure Pipelines, Travis CI, AppVeyor, CircleCI, GitLab CI, and Cirrus CI
|
||||||
- Bundles shared library dependencies on Linux and macOS through [auditwheel](https://github.com/pypa/auditwheel) and [delocate](https://github.com/matthew-brett/delocate)
|
- 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
|
- Runs your library's tests against the wheel-installed version of your library
|
||||||
|
|
||||||
@@ -50,16 +51,19 @@ Usage
|
|||||||
|
|
||||||
`cibuildwheel` runs inside a CI service. Supported platforms depend on which service you're using:
|
`cibuildwheel` runs inside a CI service. Supported platforms depend on which service you're using:
|
||||||
|
|
||||||
| | Linux | macOS | Windows | Linux ARM |
|
| | Linux | macOS | Windows | Linux ARM | macOS ARM |
|
||||||
|-----------------|-------|-------|---------|--------------|
|
|-----------------|-------|-------|---------|-----------|-----------|
|
||||||
| GitHub Actions | ✅ | ✅ | ✅ | ✅¹ |
|
| GitHub Actions | ✅ | ✅ | ✅ | ✅¹ | ✅² |
|
||||||
| Azure Pipelines | ✅ | ✅ | ✅ | |
|
| Azure Pipelines | ✅ | ✅ | ✅ | | ✅² |
|
||||||
| Travis CI | ✅ | | ✅ | ✅ |
|
| Travis CI | ✅ | | ✅ | ✅ | |
|
||||||
| AppVeyor | ✅ | ✅ | ✅ | |
|
| AppVeyor | ✅ | ✅ | ✅ | | ✅² |
|
||||||
| CircleCI | ✅ | ✅ | | |
|
| CircleCI | ✅ | ✅ | | | ✅² |
|
||||||
| Gitlab CI | ✅ | | | |
|
| Gitlab CI | ✅ | | | | |
|
||||||
|
| Cirrus CI | ✅ | ✅³ | ✅ | ✅ | ✅ |
|
||||||
|
|
||||||
<sup>¹ [Requires emulation](https://cibuildwheel.readthedocs.io/en/stable/faq/#emulation), distributed separately. Other services may also support Linux ARM through emulation or third-party build hosts, but these are not tested in our CI.</sup><br>
|
<sup>¹ [Requires emulation](https://cibuildwheel.readthedocs.io/en/stable/faq/#emulation), distributed separately. Other services may also support Linux ARM through emulation or third-party build hosts, but these are not tested in our CI.</sup><br>
|
||||||
|
<sup>² [Uses cross-compilation](https://cibuildwheel.readthedocs.io/en/stable/faq/#universal2). It is not possible to test `arm64` and the `arm64` part of a `universal2` wheel on this CI platform.</sup><br>
|
||||||
|
<sup>³ [Uses cross-compilation](https://cibuildwheel.readthedocs.io/en/stable/faq/#universal2). Thanks to Rosetta 2 emulation, it is possible to test `x86_64` and both parts of a `universal2` wheel on this CI platform.</sup><br>
|
||||||
|
|
||||||
<!--intro-end-->
|
<!--intro-end-->
|
||||||
|
|
||||||
@@ -88,7 +92,7 @@ jobs:
|
|||||||
- uses: actions/setup-python@v3
|
- uses: actions/setup-python@v3
|
||||||
|
|
||||||
- name: Install cibuildwheel
|
- name: Install cibuildwheel
|
||||||
run: python -m pip install cibuildwheel==2.9.0
|
run: python -m pip install cibuildwheel==2.10.0
|
||||||
|
|
||||||
- name: Build wheels
|
- name: Build wheels
|
||||||
run: python -m cibuildwheel --output-dir wheelhouse
|
run: python -m cibuildwheel --output-dir wheelhouse
|
||||||
@@ -179,6 +183,7 @@ Here are some repos that use cibuildwheel.
|
|||||||
[circleci icon]: docs/data/readme_icons/circleci.svg
|
[circleci icon]: docs/data/readme_icons/circleci.svg
|
||||||
[gitlab icon]: docs/data/readme_icons/gitlab.svg
|
[gitlab icon]: docs/data/readme_icons/gitlab.svg
|
||||||
[travisci icon]: docs/data/readme_icons/travisci.svg
|
[travisci icon]: docs/data/readme_icons/travisci.svg
|
||||||
|
[cirrusci icon]: docs/data/readme_icons/cirrusci.svg
|
||||||
[windows icon]: docs/data/readme_icons/windows.svg
|
[windows icon]: docs/data/readme_icons/windows.svg
|
||||||
[apple icon]: docs/data/readme_icons/apple.svg
|
[apple icon]: docs/data/readme_icons/apple.svg
|
||||||
[linux icon]: docs/data/readme_icons/linux.svg
|
[linux icon]: docs/data/readme_icons/linux.svg
|
||||||
@@ -203,6 +208,18 @@ Changelog
|
|||||||
|
|
||||||
<!-- this section was generated by bin/update_readme_changelog.py -- do not edit manually -->
|
<!-- this section was generated by bin/update_readme_changelog.py -- do not edit manually -->
|
||||||
|
|
||||||
|
### v2.10.0
|
||||||
|
|
||||||
|
_13 September 2022_
|
||||||
|
|
||||||
|
- 🌟 Adds support for [building wheels on Cirrus CI](https://cibuildwheel.readthedocs.io/en/stable/setup/#cirrus-ci). This is exciting for us, as it's the first public CI platform that natively supports macOS Apple Silicon (aka. M1, `arm64`) runners. As such, it's the first platform that you can natively build _and test_ macOS `arm64` wheels. It also has native Linux ARM (aarch64) runners, for fast, native builds there. (#1191)
|
||||||
|
- 🌟 Adds support for running cibuildwheel on Apple Silicon machines. For a while, we've supported cross-compilation of Apple Silicon wheels on `x86_64`, but now that we have Cirrus CI we can run our test suite and officially support running cibuildwheel on `arm64`. (#1191)
|
||||||
|
- ✨ Adds the `--only` [command line option](https://cibuildwheel.readthedocs.io/en/stable/options/#command-line), to specify a single build to run. Previously, it could be cumbersome to set all the build selection options to target a specific build - for example, you might have to run something like `CIBW_BUILD=cp39-manylinux_x86_64 cibuildwheel --platform linux --archs x86_64`. The new `--only` option overrides all the build selection options to simplify running a single build, which now looks like `cibuildwheel --only cp39-manylinux_x86_64`. (#1098)
|
||||||
|
- ✨ Adds the [`CIBW_CONFIG_SETTINGS`](https://cibuildwheel.readthedocs.io/en/stable/options/#config-settings) option, so you can pass arguments to your package's build backend (#1244)
|
||||||
|
- 🛠 Updates the CPython 3.11 version to the latest release candidate - v3.11.0rc2. (#1265)
|
||||||
|
- 🐛 Fix a bug that can cause a RecursionError on Windows when building from an sdist. (#1253)
|
||||||
|
- 🛠 Add support for the s390x architecture on manylinux_2_28 (#1255)
|
||||||
|
|
||||||
### v2.9.0
|
### v2.9.0
|
||||||
|
|
||||||
_11 August 2022_
|
_11 August 2022_
|
||||||
@@ -243,12 +260,6 @@ _17 June 2022_
|
|||||||
- ✨ You can now build Linux wheels on Windows, as long as you have Docker installed and set to 'Linux containers' (#1117)
|
- ✨ You can now build Linux wheels on Windows, as long as you have Docker installed and set to 'Linux containers' (#1117)
|
||||||
- 🐛 Fix a bug on macOS that caused cibuildwheel to crash trying to overwrite a previously-built wheel of the same name. (#1129)
|
- 🐛 Fix a bug on macOS that caused cibuildwheel to crash trying to overwrite a previously-built wheel of the same name. (#1129)
|
||||||
|
|
||||||
### v2.6.1
|
|
||||||
|
|
||||||
_7 June 2022_
|
|
||||||
|
|
||||||
- 🛠 Update the prerelease CPython 3.11 to 3.11.0b3
|
|
||||||
|
|
||||||
<!-- END bin/update_readme_changelog.py -->
|
<!-- END bin/update_readme_changelog.py -->
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -273,6 +284,7 @@ Maintainers
|
|||||||
- Yannick Jadoul [@YannickJadoul](https://github.com/YannickJadoul)
|
- Yannick Jadoul [@YannickJadoul](https://github.com/YannickJadoul)
|
||||||
- Matthieu Darbois [@mayeut](https://github.com/mayeut)
|
- Matthieu Darbois [@mayeut](https://github.com/mayeut)
|
||||||
- Henry Schreiner [@henryiii](https://github.com/henryiii)
|
- Henry Schreiner [@henryiii](https://github.com/henryiii)
|
||||||
|
- Grzegorz Bokota [@Czaki](https://github.com/Czaki)
|
||||||
|
|
||||||
Credits
|
Credits
|
||||||
-------
|
-------
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ inputs:
|
|||||||
description: 'File containing the config, defaults to {package}/pyproject.toml'
|
description: 'File containing the config, defaults to {package}/pyproject.toml'
|
||||||
required: false
|
required: false
|
||||||
default: ''
|
default: ''
|
||||||
|
only:
|
||||||
|
description: 'Build a specific wheel only. No need for arch/platform if this is set'
|
||||||
|
required: false
|
||||||
|
default: ''
|
||||||
branding:
|
branding:
|
||||||
icon: package
|
icon: package
|
||||||
color: yellow
|
color: yellow
|
||||||
@@ -36,5 +40,6 @@ runs:
|
|||||||
${{ inputs.package-dir }}
|
${{ inputs.package-dir }}
|
||||||
--output-dir ${{ inputs.output-dir }}
|
--output-dir ${{ inputs.output-dir }}
|
||||||
--config-file "${{ inputs.config-file }}"
|
--config-file "${{ inputs.config-file }}"
|
||||||
|
--only "${{ inputs.only }}"
|
||||||
2>&1
|
2>&1
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ ICONS = (
|
|||||||
"circleci",
|
"circleci",
|
||||||
"gitlab",
|
"gitlab",
|
||||||
"travisci",
|
"travisci",
|
||||||
|
"cirrusci",
|
||||||
"windows",
|
"windows",
|
||||||
"apple",
|
"apple",
|
||||||
"linux",
|
"linux",
|
||||||
|
|||||||
@@ -66,6 +66,11 @@ services = [
|
|||||||
dst_config_path=".gitlab-ci.yml",
|
dst_config_path=".gitlab-ci.yml",
|
||||||
badge_md="[](https://gitlab.com/pypa/cibuildwheel/-/commits/{branch})",
|
badge_md="[](https://gitlab.com/pypa/cibuildwheel/-/commits/{branch})",
|
||||||
),
|
),
|
||||||
|
CIService(
|
||||||
|
name="cirrus-ci",
|
||||||
|
dst_config_path=".cirrus.yml",
|
||||||
|
badge_md="[](https://cirrus-ci.com/github/pypa/cibuildwheel/{branch})",
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ images = [
|
|||||||
Image("manylinux_2_28", "x86_64", "quay.io/pypa/manylinux_2_28_x86_64", None),
|
Image("manylinux_2_28", "x86_64", "quay.io/pypa/manylinux_2_28_x86_64", None),
|
||||||
Image("manylinux_2_28", "aarch64", "quay.io/pypa/manylinux_2_28_aarch64", None),
|
Image("manylinux_2_28", "aarch64", "quay.io/pypa/manylinux_2_28_aarch64", None),
|
||||||
Image("manylinux_2_28", "ppc64le", "quay.io/pypa/manylinux_2_28_ppc64le", None),
|
Image("manylinux_2_28", "ppc64le", "quay.io/pypa/manylinux_2_28_ppc64le", None),
|
||||||
|
Image("manylinux_2_28", "s390x", "quay.io/pypa/manylinux_2_28_s390x", None),
|
||||||
Image("manylinux_2_28", "pypy_x86_64", "quay.io/pypa/manylinux_2_28_x86_64", None),
|
Image("manylinux_2_28", "pypy_x86_64", "quay.io/pypa/manylinux_2_28_x86_64", None),
|
||||||
Image("manylinux_2_28", "pypy_aarch64", "quay.io/pypa/manylinux_2_28_aarch64", None),
|
Image("manylinux_2_28", "pypy_aarch64", "quay.io/pypa/manylinux_2_28_aarch64", None),
|
||||||
# musllinux_1_1 images
|
# musllinux_1_1 images
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
__version__ = "2.9.0"
|
__version__ = "2.10.0"
|
||||||
|
|||||||
+57
-13
@@ -5,8 +5,8 @@ import os
|
|||||||
import shutil
|
import shutil
|
||||||
import sys
|
import sys
|
||||||
import tarfile
|
import tarfile
|
||||||
import tempfile
|
|
||||||
import textwrap
|
import textwrap
|
||||||
|
import typing
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from tempfile import mkdtemp
|
from tempfile import mkdtemp
|
||||||
|
|
||||||
@@ -41,7 +41,7 @@ def main() -> None:
|
|||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--platform",
|
"--platform",
|
||||||
choices=["auto", "linux", "macos", "windows"],
|
choices=["auto", "linux", "macos", "windows"],
|
||||||
default=os.environ.get("CIBW_PLATFORM", "auto"),
|
default=None,
|
||||||
help="""
|
help="""
|
||||||
Platform to build for. Use this option to override the
|
Platform to build for. Use this option to override the
|
||||||
auto-detected platform or to run cibuildwheel on your development
|
auto-detected platform or to run cibuildwheel on your development
|
||||||
@@ -65,6 +65,16 @@ def main() -> None:
|
|||||||
""",
|
""",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--only",
|
||||||
|
default=None,
|
||||||
|
help="""
|
||||||
|
Force a single wheel build when given an identifier. Overrides
|
||||||
|
CIBW_BUILD/CIBW_SKIP. --platform and --arch cannot be specified
|
||||||
|
if this is given.
|
||||||
|
""",
|
||||||
|
)
|
||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--output-dir",
|
"--output-dir",
|
||||||
type=Path,
|
type=Path,
|
||||||
@@ -130,8 +140,8 @@ def main() -> None:
|
|||||||
return
|
return
|
||||||
|
|
||||||
# Tarfile builds require extraction and changing the directory
|
# Tarfile builds require extraction and changing the directory
|
||||||
with tempfile.TemporaryDirectory(prefix="cibw-sdist-") as temp_dir_str:
|
temp_dir = Path(mkdtemp(prefix="cibw-sdist-")).resolve(strict=True)
|
||||||
temp_dir = Path(temp_dir_str)
|
try:
|
||||||
with tarfile.open(args.package_dir) as tar:
|
with tarfile.open(args.package_dir) as tar:
|
||||||
tar.extractall(path=temp_dir)
|
tar.extractall(path=temp_dir)
|
||||||
|
|
||||||
@@ -146,13 +156,49 @@ def main() -> None:
|
|||||||
|
|
||||||
with chdir(temp_dir):
|
with chdir(temp_dir):
|
||||||
build_in_directory(args)
|
build_in_directory(args)
|
||||||
|
finally:
|
||||||
|
# avoid https://github.com/python/cpython/issues/86962 by performing
|
||||||
|
# cleanup manually
|
||||||
|
shutil.rmtree(temp_dir, ignore_errors=sys.platform.startswith("win"))
|
||||||
|
if temp_dir.exists():
|
||||||
|
log.warning(f"Can't delete temporary folder '{str(temp_dir)}'")
|
||||||
|
|
||||||
|
|
||||||
def build_in_directory(args: CommandLineArguments) -> None:
|
def build_in_directory(args: CommandLineArguments) -> None:
|
||||||
|
platform_option_value = args.platform or os.environ.get("CIBW_PLATFORM", "auto")
|
||||||
platform: PlatformName
|
platform: PlatformName
|
||||||
|
|
||||||
if args.platform != "auto":
|
if args.only:
|
||||||
platform = args.platform
|
if "linux_" in args.only:
|
||||||
|
platform = "linux"
|
||||||
|
elif "macosx_" in args.only:
|
||||||
|
platform = "macos"
|
||||||
|
elif "win_" in args.only:
|
||||||
|
platform = "windows"
|
||||||
|
else:
|
||||||
|
print(
|
||||||
|
f"Invalid --only='{args.only}', must be a build selector with a known platform",
|
||||||
|
file=sys.stderr,
|
||||||
|
)
|
||||||
|
sys.exit(2)
|
||||||
|
if args.platform is not None:
|
||||||
|
print(
|
||||||
|
"--platform cannot be specified with --only, it is computed from --only",
|
||||||
|
file=sys.stderr,
|
||||||
|
)
|
||||||
|
sys.exit(2)
|
||||||
|
if args.archs is not None:
|
||||||
|
print(
|
||||||
|
"--arch cannot be specified with --only, it is computed from --only",
|
||||||
|
file=sys.stderr,
|
||||||
|
)
|
||||||
|
sys.exit(2)
|
||||||
|
elif platform_option_value != "auto":
|
||||||
|
if platform_option_value not in PLATFORMS:
|
||||||
|
print(f"cibuildwheel: Unsupported platform: {platform_option_value}", file=sys.stderr)
|
||||||
|
sys.exit(2)
|
||||||
|
|
||||||
|
platform = typing.cast(PlatformName, platform_option_value)
|
||||||
else:
|
else:
|
||||||
ci_provider = detect_ci_provider()
|
ci_provider = detect_ci_provider()
|
||||||
if ci_provider is None:
|
if ci_provider is None:
|
||||||
@@ -160,9 +206,9 @@ def build_in_directory(args: CommandLineArguments) -> None:
|
|||||||
textwrap.dedent(
|
textwrap.dedent(
|
||||||
"""
|
"""
|
||||||
cibuildwheel: Unable to detect platform. cibuildwheel should run on your CI server;
|
cibuildwheel: Unable to detect platform. cibuildwheel should run on your CI server;
|
||||||
Travis CI, AppVeyor, Azure Pipelines, GitHub Actions, CircleCI, and Gitlab are
|
Travis CI, AppVeyor, Azure Pipelines, GitHub Actions, CircleCI, Gitlab, and Cirrus CI
|
||||||
supported. You can run on your development machine or other CI providers using the
|
are supported. You can run on your development machine or other CI providers
|
||||||
--platform argument. Check --help output for more information.
|
using the --platform argument. Check --help output for more information.
|
||||||
"""
|
"""
|
||||||
),
|
),
|
||||||
file=sys.stderr,
|
file=sys.stderr,
|
||||||
@@ -182,10 +228,6 @@ def build_in_directory(args: CommandLineArguments) -> None:
|
|||||||
)
|
)
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
|
|
||||||
if platform not in PLATFORMS:
|
|
||||||
print(f"cibuildwheel: Unsupported platform: {platform}", file=sys.stderr)
|
|
||||||
sys.exit(2)
|
|
||||||
|
|
||||||
options = compute_options(platform=platform, command_line_arguments=args)
|
options = compute_options(platform=platform, command_line_arguments=args)
|
||||||
|
|
||||||
package_dir = options.globals.package_dir
|
package_dir = options.globals.package_dir
|
||||||
@@ -253,6 +295,8 @@ def build_in_directory(args: CommandLineArguments) -> None:
|
|||||||
else:
|
else:
|
||||||
assert_never(platform)
|
assert_never(platform)
|
||||||
finally:
|
finally:
|
||||||
|
# avoid https://github.com/python/cpython/issues/86962 by performing
|
||||||
|
# cleanup manually
|
||||||
shutil.rmtree(tmp_path, ignore_errors=sys.platform.startswith("win"))
|
shutil.rmtree(tmp_path, ignore_errors=sys.platform.startswith("win"))
|
||||||
if tmp_path.exists():
|
if tmp_path.exists():
|
||||||
log.warning(f"Can't delete temporary folder '{str(tmp_path)}'")
|
log.warning(f"Can't delete temporary folder '{str(tmp_path)}'")
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ from .util import (
|
|||||||
get_build_verbosity_extra_flags,
|
get_build_verbosity_extra_flags,
|
||||||
prepare_command,
|
prepare_command,
|
||||||
read_python_configs,
|
read_python_configs,
|
||||||
|
split_config_settings,
|
||||||
unwrap,
|
unwrap,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -212,8 +213,10 @@ def build_in_container(
|
|||||||
container.call(["mkdir", "-p", built_wheel_dir])
|
container.call(["mkdir", "-p", built_wheel_dir])
|
||||||
|
|
||||||
verbosity_flags = get_build_verbosity_extra_flags(build_options.build_verbosity)
|
verbosity_flags = get_build_verbosity_extra_flags(build_options.build_verbosity)
|
||||||
|
extra_flags = split_config_settings(build_options.config_settings)
|
||||||
|
|
||||||
if build_options.build_frontend == "pip":
|
if build_options.build_frontend == "pip":
|
||||||
|
extra_flags += verbosity_flags
|
||||||
container.call(
|
container.call(
|
||||||
[
|
[
|
||||||
"python",
|
"python",
|
||||||
@@ -223,12 +226,13 @@ def build_in_container(
|
|||||||
container_package_dir,
|
container_package_dir,
|
||||||
f"--wheel-dir={built_wheel_dir}",
|
f"--wheel-dir={built_wheel_dir}",
|
||||||
"--no-deps",
|
"--no-deps",
|
||||||
*verbosity_flags,
|
*extra_flags,
|
||||||
],
|
],
|
||||||
env=env,
|
env=env,
|
||||||
)
|
)
|
||||||
elif build_options.build_frontend == "build":
|
elif build_options.build_frontend == "build":
|
||||||
config_setting = " ".join(verbosity_flags)
|
verbosity_setting = " ".join(verbosity_flags)
|
||||||
|
extra_flags += (f"--config-setting={verbosity_setting}",)
|
||||||
container.call(
|
container.call(
|
||||||
[
|
[
|
||||||
"python",
|
"python",
|
||||||
@@ -237,7 +241,7 @@ def build_in_container(
|
|||||||
container_package_dir,
|
container_package_dir,
|
||||||
"--wheel",
|
"--wheel",
|
||||||
f"--outdir={built_wheel_dir}",
|
f"--outdir={built_wheel_dir}",
|
||||||
f"--config-setting={config_setting}",
|
*extra_flags,
|
||||||
],
|
],
|
||||||
env=env,
|
env=env,
|
||||||
)
|
)
|
||||||
@@ -349,6 +353,7 @@ def build(options: Options, tmp_path: Path) -> None: # pylint: disable=unused-a
|
|||||||
If you're building on Travis CI, add `services: [docker]` to
|
If you're building on Travis CI, add `services: [docker]` to
|
||||||
your .travis.yml. If you're building on Circle CI in Linux,
|
your .travis.yml. If you're building on Circle CI in Linux,
|
||||||
add a `setup_remote_docker` step to your .circleci/config.yml.
|
add a `setup_remote_docker` step to your .circleci/config.yml.
|
||||||
|
If you're building on Cirrus CI, use `docker_builder` task.
|
||||||
"""
|
"""
|
||||||
),
|
),
|
||||||
file=sys.stderr,
|
file=sys.stderr,
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ from .util import (
|
|||||||
prepare_command,
|
prepare_command,
|
||||||
read_python_configs,
|
read_python_configs,
|
||||||
shell,
|
shell,
|
||||||
|
split_config_settings,
|
||||||
unwrap,
|
unwrap,
|
||||||
virtualenv,
|
virtualenv,
|
||||||
)
|
)
|
||||||
@@ -345,8 +346,10 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
built_wheel_dir.mkdir()
|
built_wheel_dir.mkdir()
|
||||||
|
|
||||||
verbosity_flags = get_build_verbosity_extra_flags(build_options.build_verbosity)
|
verbosity_flags = get_build_verbosity_extra_flags(build_options.build_verbosity)
|
||||||
|
extra_flags = split_config_settings(build_options.config_settings)
|
||||||
|
|
||||||
if build_options.build_frontend == "pip":
|
if build_options.build_frontend == "pip":
|
||||||
|
extra_flags += verbosity_flags
|
||||||
# Path.resolve() is needed. Without it pip wheel may try to fetch package from pypi.org
|
# Path.resolve() is needed. Without it pip wheel may try to fetch package from pypi.org
|
||||||
# see https://github.com/pypa/cibuildwheel/pull/369
|
# see https://github.com/pypa/cibuildwheel/pull/369
|
||||||
call(
|
call(
|
||||||
@@ -357,11 +360,12 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
build_options.package_dir.resolve(),
|
build_options.package_dir.resolve(),
|
||||||
f"--wheel-dir={built_wheel_dir}",
|
f"--wheel-dir={built_wheel_dir}",
|
||||||
"--no-deps",
|
"--no-deps",
|
||||||
*verbosity_flags,
|
*extra_flags,
|
||||||
env=env,
|
env=env,
|
||||||
)
|
)
|
||||||
elif build_options.build_frontend == "build":
|
elif build_options.build_frontend == "build":
|
||||||
config_setting = " ".join(verbosity_flags)
|
verbosity_setting = " ".join(verbosity_flags)
|
||||||
|
extra_flags += (f"--config-setting={verbosity_setting}",)
|
||||||
build_env = env.copy()
|
build_env = env.copy()
|
||||||
if build_options.dependency_constraints:
|
if build_options.dependency_constraints:
|
||||||
constraint_path = (
|
constraint_path = (
|
||||||
@@ -378,7 +382,7 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
build_options.package_dir,
|
build_options.package_dir,
|
||||||
"--wheel",
|
"--wheel",
|
||||||
f"--outdir={built_wheel_dir}",
|
f"--outdir={built_wheel_dir}",
|
||||||
f"--config-setting={config_setting}",
|
*extra_flags,
|
||||||
env=build_env,
|
env=build_env,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
|
|||||||
+39
-10
@@ -3,13 +3,14 @@ from __future__ import annotations
|
|||||||
import difflib
|
import difflib
|
||||||
import functools
|
import functools
|
||||||
import os
|
import os
|
||||||
|
import shlex
|
||||||
import sys
|
import sys
|
||||||
import traceback
|
import traceback
|
||||||
from configparser import ConfigParser
|
from configparser import ConfigParser
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
from dataclasses import asdict, dataclass
|
from dataclasses import asdict, dataclass
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Dict, Generator, List, Mapping, Union, cast
|
from typing import Any, Dict, Generator, Iterator, List, Mapping, Union, cast
|
||||||
|
|
||||||
if sys.version_info >= (3, 11):
|
if sys.version_info >= (3, 11):
|
||||||
import tomllib
|
import tomllib
|
||||||
@@ -41,9 +42,10 @@ from .util import (
|
|||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class CommandLineArguments:
|
class CommandLineArguments:
|
||||||
platform: Literal["auto", "linux", "macos", "windows"]
|
platform: Literal["auto", "linux", "macos", "windows"] | None
|
||||||
archs: str | None
|
archs: str | None
|
||||||
output_dir: Path
|
output_dir: Path
|
||||||
|
only: str | None
|
||||||
config_file: str
|
config_file: str
|
||||||
package_dir: Path
|
package_dir: Path
|
||||||
print_build_identifiers: bool
|
print_build_identifiers: bool
|
||||||
@@ -77,6 +79,7 @@ class BuildOptions:
|
|||||||
test_extras: str
|
test_extras: str
|
||||||
build_verbosity: int
|
build_verbosity: int
|
||||||
build_frontend: BuildFrontend
|
build_frontend: BuildFrontend
|
||||||
|
config_settings: str
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def package_dir(self) -> Path:
|
def package_dir(self) -> Path:
|
||||||
@@ -293,8 +296,9 @@ class OptionsReader:
|
|||||||
accept platform versions of the environment variable. If this is an
|
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,
|
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
|
it will be formatted with "table['item']" using {k} and {v} and merged
|
||||||
with "table['sep']". Empty variables will not override if ignore_empty
|
with "table['sep']". If sep is also given, it will be used for arrays
|
||||||
is True.
|
inside the table (must match table['sep']). Empty variables will not
|
||||||
|
override if ignore_empty is True.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if name not in self.default_options and name not in self.default_platform_options:
|
if name not in self.default_options and name not in self.default_platform_options:
|
||||||
@@ -324,7 +328,9 @@ class OptionsReader:
|
|||||||
if isinstance(result, dict):
|
if isinstance(result, dict):
|
||||||
if table is None:
|
if table is None:
|
||||||
raise ConfigOptionError(f"{name!r} does not accept a table")
|
raise ConfigOptionError(f"{name!r} does not accept a table")
|
||||||
return table["sep"].join(table["item"].format(k=k, v=v) for k, v in result.items())
|
return table["sep"].join(
|
||||||
|
item for k, v in result.items() for item in _inner_fmt(k, v, table["item"])
|
||||||
|
)
|
||||||
|
|
||||||
if isinstance(result, list):
|
if isinstance(result, list):
|
||||||
if sep is None:
|
if sep is None:
|
||||||
@@ -337,6 +343,16 @@ class OptionsReader:
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def _inner_fmt(k: str, v: Any, table_item: str) -> Iterator[str]:
|
||||||
|
if isinstance(v, list):
|
||||||
|
for inner_v in v:
|
||||||
|
qv = shlex.quote(inner_v)
|
||||||
|
yield table_item.format(k=k, v=qv)
|
||||||
|
else:
|
||||||
|
qv = shlex.quote(v)
|
||||||
|
yield table_item.format(k=k, v=qv)
|
||||||
|
|
||||||
|
|
||||||
class Options:
|
class Options:
|
||||||
def __init__(self, platform: PlatformName, command_line_arguments: CommandLineArguments):
|
def __init__(self, platform: PlatformName, command_line_arguments: CommandLineArguments):
|
||||||
self.platform = platform
|
self.platform = platform
|
||||||
@@ -388,6 +404,15 @@ class Options:
|
|||||||
)
|
)
|
||||||
requires_python = None if requires_python_str is None else SpecifierSet(requires_python_str)
|
requires_python = None if requires_python_str is None else SpecifierSet(requires_python_str)
|
||||||
|
|
||||||
|
archs_config_str = args.archs or self.reader.get("archs", sep=" ")
|
||||||
|
architectures = Architecture.parse_config(archs_config_str, platform=self.platform)
|
||||||
|
|
||||||
|
# Process `--only`
|
||||||
|
if args.only:
|
||||||
|
build_config = args.only
|
||||||
|
skip_config = ""
|
||||||
|
architectures = Architecture.all_archs(self.platform)
|
||||||
|
|
||||||
build_selector = BuildSelector(
|
build_selector = BuildSelector(
|
||||||
build_config=build_config,
|
build_config=build_config,
|
||||||
skip_config=skip_config,
|
skip_config=skip_config,
|
||||||
@@ -396,9 +421,6 @@ class Options:
|
|||||||
)
|
)
|
||||||
test_selector = TestSelector(skip_config=test_skip)
|
test_selector = TestSelector(skip_config=test_skip)
|
||||||
|
|
||||||
archs_config_str = args.archs or self.reader.get("archs", sep=" ")
|
|
||||||
architectures = Architecture.parse_config(archs_config_str, platform=self.platform)
|
|
||||||
|
|
||||||
container_engine_str = self.reader.get("container-engine")
|
container_engine_str = self.reader.get("container-engine")
|
||||||
|
|
||||||
if container_engine_str not in ["docker", "podman"]:
|
if container_engine_str not in ["docker", "podman"]:
|
||||||
@@ -427,11 +449,14 @@ class Options:
|
|||||||
|
|
||||||
build_frontend_str = self.reader.get("build-frontend", env_plat=False)
|
build_frontend_str = self.reader.get("build-frontend", env_plat=False)
|
||||||
environment_config = self.reader.get(
|
environment_config = self.reader.get(
|
||||||
"environment", table={"item": '{k}="{v}"', "sep": " "}
|
"environment", table={"item": "{k}={v}", "sep": " "}
|
||||||
)
|
)
|
||||||
environment_pass = self.reader.get("environment-pass", sep=" ").split()
|
environment_pass = self.reader.get("environment-pass", sep=" ").split()
|
||||||
before_build = self.reader.get("before-build", sep=" && ")
|
before_build = self.reader.get("before-build", sep=" && ")
|
||||||
repair_command = self.reader.get("repair-wheel-command", sep=" && ")
|
repair_command = self.reader.get("repair-wheel-command", sep=" && ")
|
||||||
|
config_settings = self.reader.get(
|
||||||
|
"config-settings", table={"item": "{k}={v}", "sep": " "}
|
||||||
|
)
|
||||||
|
|
||||||
dependency_versions = self.reader.get("dependency-versions")
|
dependency_versions = self.reader.get("dependency-versions")
|
||||||
test_command = self.reader.get("test-command", sep=" && ")
|
test_command = self.reader.get("test-command", sep=" && ")
|
||||||
@@ -537,6 +562,7 @@ class Options:
|
|||||||
manylinux_images=manylinux_images or None,
|
manylinux_images=manylinux_images or None,
|
||||||
musllinux_images=musllinux_images or None,
|
musllinux_images=musllinux_images or None,
|
||||||
build_frontend=build_frontend,
|
build_frontend=build_frontend,
|
||||||
|
config_settings=config_settings,
|
||||||
)
|
)
|
||||||
|
|
||||||
def check_for_invalid_configuration(self, identifiers: list[str]) -> None:
|
def check_for_invalid_configuration(self, identifiers: list[str]) -> None:
|
||||||
@@ -569,6 +595,9 @@ class Options:
|
|||||||
]
|
]
|
||||||
|
|
||||||
build_option_defaults = self.build_options(identifier=None)
|
build_option_defaults = self.build_options(identifier=None)
|
||||||
|
build_options_for_identifier = {
|
||||||
|
identifier: self.build_options(identifier) for identifier in identifiers
|
||||||
|
}
|
||||||
|
|
||||||
for option_name, default_value in sorted(asdict(build_option_defaults).items()):
|
for option_name, default_value in sorted(asdict(build_option_defaults).items()):
|
||||||
if option_name == "globals":
|
if option_name == "globals":
|
||||||
@@ -578,7 +607,7 @@ class Options:
|
|||||||
|
|
||||||
# if any identifiers have an overridden value, print that too
|
# if any identifiers have an overridden value, print that too
|
||||||
for identifier in identifiers:
|
for identifier in identifiers:
|
||||||
option_value = getattr(self.build_options(identifier=identifier), option_name)
|
option_value = getattr(build_options_for_identifier[identifier], option_name)
|
||||||
if option_value != default_value:
|
if option_value != default_value:
|
||||||
lines.append(f" {identifier}: {option_value!r}")
|
lines.append(f" {identifier}: {option_value!r}")
|
||||||
|
|
||||||
|
|||||||
@@ -81,12 +81,12 @@ python_configurations = [
|
|||||||
{ identifier = "cp39-macosx_x86_64", version = "3.9", url = "https://www.python.org/ftp/python/3.9.13/python-3.9.13-macos11.pkg" },
|
{ identifier = "cp39-macosx_x86_64", version = "3.9", url = "https://www.python.org/ftp/python/3.9.13/python-3.9.13-macos11.pkg" },
|
||||||
{ identifier = "cp39-macosx_arm64", version = "3.9", url = "https://www.python.org/ftp/python/3.9.13/python-3.9.13-macos11.pkg" },
|
{ identifier = "cp39-macosx_arm64", version = "3.9", url = "https://www.python.org/ftp/python/3.9.13/python-3.9.13-macos11.pkg" },
|
||||||
{ identifier = "cp39-macosx_universal2", version = "3.9", url = "https://www.python.org/ftp/python/3.9.13/python-3.9.13-macos11.pkg" },
|
{ identifier = "cp39-macosx_universal2", version = "3.9", url = "https://www.python.org/ftp/python/3.9.13/python-3.9.13-macos11.pkg" },
|
||||||
{ identifier = "cp310-macosx_x86_64", version = "3.10", url = "https://www.python.org/ftp/python/3.10.6/python-3.10.6-macos11.pkg" },
|
{ identifier = "cp310-macosx_x86_64", version = "3.10", url = "https://www.python.org/ftp/python/3.10.7/python-3.10.7-macos11.pkg" },
|
||||||
{ identifier = "cp310-macosx_arm64", version = "3.10", url = "https://www.python.org/ftp/python/3.10.6/python-3.10.6-macos11.pkg" },
|
{ identifier = "cp310-macosx_arm64", version = "3.10", url = "https://www.python.org/ftp/python/3.10.7/python-3.10.7-macos11.pkg" },
|
||||||
{ identifier = "cp310-macosx_universal2", version = "3.10", url = "https://www.python.org/ftp/python/3.10.6/python-3.10.6-macos11.pkg" },
|
{ identifier = "cp310-macosx_universal2", version = "3.10", url = "https://www.python.org/ftp/python/3.10.7/python-3.10.7-macos11.pkg" },
|
||||||
{ identifier = "cp311-macosx_x86_64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.0/python-3.11.0rc1-macos11.pkg" },
|
{ identifier = "cp311-macosx_x86_64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.0/python-3.11.0rc2-macos11.pkg" },
|
||||||
{ identifier = "cp311-macosx_arm64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.0/python-3.11.0rc1-macos11.pkg" },
|
{ identifier = "cp311-macosx_arm64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.0/python-3.11.0rc2-macos11.pkg" },
|
||||||
{ identifier = "cp311-macosx_universal2", version = "3.11", url = "https://www.python.org/ftp/python/3.11.0/python-3.11.0rc1-macos11.pkg" },
|
{ identifier = "cp311-macosx_universal2", version = "3.11", url = "https://www.python.org/ftp/python/3.11.0/python-3.11.0rc2-macos11.pkg" },
|
||||||
{ identifier = "pp37-macosx_x86_64", version = "3.7", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-osx64.tar.bz2" },
|
{ identifier = "pp37-macosx_x86_64", version = "3.7", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-osx64.tar.bz2" },
|
||||||
{ identifier = "pp38-macosx_x86_64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.9-osx64.tar.bz2" },
|
{ identifier = "pp38-macosx_x86_64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.9-osx64.tar.bz2" },
|
||||||
{ identifier = "pp39-macosx_x86_64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.9-osx64.tar.bz2" },
|
{ identifier = "pp39-macosx_x86_64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.9-osx64.tar.bz2" },
|
||||||
@@ -102,13 +102,13 @@ python_configurations = [
|
|||||||
{ identifier = "cp38-win_amd64", version = "3.8.10", arch = "64" },
|
{ identifier = "cp38-win_amd64", version = "3.8.10", arch = "64" },
|
||||||
{ identifier = "cp39-win32", version = "3.9.13", arch = "32" },
|
{ identifier = "cp39-win32", version = "3.9.13", arch = "32" },
|
||||||
{ identifier = "cp39-win_amd64", version = "3.9.13", arch = "64" },
|
{ identifier = "cp39-win_amd64", version = "3.9.13", arch = "64" },
|
||||||
{ identifier = "cp310-win32", version = "3.10.6", arch = "32" },
|
{ identifier = "cp310-win32", version = "3.10.7", arch = "32" },
|
||||||
{ identifier = "cp310-win_amd64", version = "3.10.6", arch = "64" },
|
{ identifier = "cp310-win_amd64", version = "3.10.7", arch = "64" },
|
||||||
{ identifier = "cp311-win32", version = "3.11.0-rc1", arch = "32" },
|
{ identifier = "cp311-win32", version = "3.11.0-rc2", arch = "32" },
|
||||||
{ identifier = "cp311-win_amd64", version = "3.11.0-rc1", arch = "64" },
|
{ identifier = "cp311-win_amd64", version = "3.11.0-rc2", arch = "64" },
|
||||||
{ identifier = "cp39-win_arm64", version = "3.9.10", arch = "ARM64" },
|
{ identifier = "cp39-win_arm64", version = "3.9.10", arch = "ARM64" },
|
||||||
{ identifier = "cp310-win_arm64", version = "3.10.6", arch = "ARM64" },
|
{ identifier = "cp310-win_arm64", version = "3.10.7", arch = "ARM64" },
|
||||||
{ identifier = "cp311-win_arm64", version = "3.11.0-rc1", arch = "ARM64" },
|
{ identifier = "cp311-win_arm64", version = "3.11.0-rc2", arch = "ARM64" },
|
||||||
{ identifier = "pp37-win_amd64", version = "3.7", arch = "64", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-win64.zip" },
|
{ identifier = "pp37-win_amd64", version = "3.7", arch = "64", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-win64.zip" },
|
||||||
{ identifier = "pp38-win_amd64", version = "3.8", arch = "64", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.9-win64.zip" },
|
{ identifier = "pp38-win_amd64", version = "3.8", arch = "64", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.9-win64.zip" },
|
||||||
{ identifier = "pp39-win_amd64", version = "3.9", arch = "64", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.9-win64.zip" },
|
{ identifier = "pp39-win_amd64", version = "3.9", arch = "64", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.9-win64.zip" },
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
#
|
#
|
||||||
delocate==0.10.2
|
delocate==0.10.2
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
distlib==0.3.5
|
distlib==0.3.6
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
filelock==3.8.0
|
filelock==3.8.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
@@ -14,7 +14,7 @@ platformdirs==2.5.2
|
|||||||
# via virtualenv
|
# via virtualenv
|
||||||
typing-extensions==4.3.0
|
typing-extensions==4.3.0
|
||||||
# via delocate
|
# via delocate
|
||||||
virtualenv==20.16.3
|
virtualenv==20.16.5
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
wheel==0.37.1
|
wheel==0.37.1
|
||||||
# via
|
# via
|
||||||
@@ -24,5 +24,5 @@ wheel==0.37.1
|
|||||||
# The following packages are considered to be unsafe in a requirements file:
|
# The following packages are considered to be unsafe in a requirements file:
|
||||||
pip==22.2.2
|
pip==22.2.2
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
setuptools==63.4.2
|
setuptools==65.3.0
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
#
|
#
|
||||||
delocate==0.10.2
|
delocate==0.10.2
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
distlib==0.3.5
|
distlib==0.3.6
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
filelock==3.8.0
|
filelock==3.8.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
@@ -14,7 +14,7 @@ platformdirs==2.5.2
|
|||||||
# via virtualenv
|
# via virtualenv
|
||||||
typing-extensions==4.3.0
|
typing-extensions==4.3.0
|
||||||
# via delocate
|
# via delocate
|
||||||
virtualenv==20.16.3
|
virtualenv==20.16.5
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
wheel==0.37.1
|
wheel==0.37.1
|
||||||
# via
|
# via
|
||||||
@@ -24,5 +24,5 @@ wheel==0.37.1
|
|||||||
# The following packages are considered to be unsafe in a requirements file:
|
# The following packages are considered to be unsafe in a requirements file:
|
||||||
pip==22.2.2
|
pip==22.2.2
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
setuptools==63.4.2
|
setuptools==65.3.0
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
#
|
#
|
||||||
delocate==0.10.2
|
delocate==0.10.2
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
distlib==0.3.5
|
distlib==0.3.6
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
filelock==3.4.1
|
filelock==3.4.1
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
@@ -20,7 +20,7 @@ typing-extensions==4.1.1
|
|||||||
# via
|
# via
|
||||||
# delocate
|
# delocate
|
||||||
# importlib-metadata
|
# importlib-metadata
|
||||||
virtualenv==20.16.3
|
virtualenv==20.16.5
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
wheel==0.37.1
|
wheel==0.37.1
|
||||||
# via
|
# via
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
#
|
#
|
||||||
delocate==0.10.2
|
delocate==0.10.2
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
distlib==0.3.5
|
distlib==0.3.6
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
filelock==3.8.0
|
filelock==3.8.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
@@ -18,7 +18,7 @@ typing-extensions==4.3.0
|
|||||||
# via
|
# via
|
||||||
# delocate
|
# delocate
|
||||||
# importlib-metadata
|
# importlib-metadata
|
||||||
virtualenv==20.16.3
|
virtualenv==20.16.5
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
wheel==0.37.1
|
wheel==0.37.1
|
||||||
# via
|
# via
|
||||||
@@ -30,5 +30,5 @@ zipp==3.8.1
|
|||||||
# The following packages are considered to be unsafe in a requirements file:
|
# The following packages are considered to be unsafe in a requirements file:
|
||||||
pip==22.2.2
|
pip==22.2.2
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
setuptools==63.4.2
|
setuptools==65.3.0
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
#
|
#
|
||||||
delocate==0.10.2
|
delocate==0.10.2
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
distlib==0.3.5
|
distlib==0.3.6
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
filelock==3.8.0
|
filelock==3.8.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
@@ -14,7 +14,7 @@ platformdirs==2.5.2
|
|||||||
# via virtualenv
|
# via virtualenv
|
||||||
typing-extensions==4.3.0
|
typing-extensions==4.3.0
|
||||||
# via delocate
|
# via delocate
|
||||||
virtualenv==20.16.3
|
virtualenv==20.16.5
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
wheel==0.37.1
|
wheel==0.37.1
|
||||||
# via
|
# via
|
||||||
@@ -24,5 +24,5 @@ wheel==0.37.1
|
|||||||
# The following packages are considered to be unsafe in a requirements file:
|
# The following packages are considered to be unsafe in a requirements file:
|
||||||
pip==22.2.2
|
pip==22.2.2
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
setuptools==63.4.2
|
setuptools==65.3.0
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
#
|
#
|
||||||
delocate==0.10.2
|
delocate==0.10.2
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
distlib==0.3.5
|
distlib==0.3.6
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
filelock==3.8.0
|
filelock==3.8.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
@@ -14,7 +14,7 @@ platformdirs==2.5.2
|
|||||||
# via virtualenv
|
# via virtualenv
|
||||||
typing-extensions==4.3.0
|
typing-extensions==4.3.0
|
||||||
# via delocate
|
# via delocate
|
||||||
virtualenv==20.16.3
|
virtualenv==20.16.5
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
wheel==0.37.1
|
wheel==0.37.1
|
||||||
# via
|
# via
|
||||||
@@ -24,5 +24,5 @@ wheel==0.37.1
|
|||||||
# The following packages are considered to be unsafe in a requirements file:
|
# The following packages are considered to be unsafe in a requirements file:
|
||||||
pip==22.2.2
|
pip==22.2.2
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
setuptools==63.4.2
|
setuptools==65.3.0
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
#
|
#
|
||||||
delocate==0.10.2
|
delocate==0.10.2
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
distlib==0.3.5
|
distlib==0.3.6
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
filelock==3.8.0
|
filelock==3.8.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
@@ -14,7 +14,7 @@ platformdirs==2.5.2
|
|||||||
# via virtualenv
|
# via virtualenv
|
||||||
typing-extensions==4.3.0
|
typing-extensions==4.3.0
|
||||||
# via delocate
|
# via delocate
|
||||||
virtualenv==20.16.3
|
virtualenv==20.16.5
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
wheel==0.37.1
|
wheel==0.37.1
|
||||||
# via
|
# via
|
||||||
@@ -24,5 +24,5 @@ wheel==0.37.1
|
|||||||
# The following packages are considered to be unsafe in a requirements file:
|
# The following packages are considered to be unsafe in a requirements file:
|
||||||
pip==22.2.2
|
pip==22.2.2
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
setuptools==63.4.2
|
setuptools==65.3.0
|
||||||
# via -r cibuildwheel/resources/constraints.in
|
# via -r cibuildwheel/resources/constraints.in
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ test-skip = ""
|
|||||||
|
|
||||||
archs = ["auto"]
|
archs = ["auto"]
|
||||||
build-frontend = "pip"
|
build-frontend = "pip"
|
||||||
|
config-settings = {}
|
||||||
dependency-versions = "pinned"
|
dependency-versions = "pinned"
|
||||||
environment = {}
|
environment = {}
|
||||||
environment-pass = []
|
environment-pass = []
|
||||||
|
|||||||
@@ -1,48 +1,49 @@
|
|||||||
[x86_64]
|
[x86_64]
|
||||||
manylinux1 = quay.io/pypa/manylinux1_x86_64:2022-08-08-7292f33
|
manylinux1 = quay.io/pypa/manylinux1_x86_64:2022-09-07-2e53e4b
|
||||||
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
|
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2022-08-09-51a01be
|
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2022-09-12-1a61614
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-08-09-51a01be
|
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-09-12-1a61614
|
||||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2022-08-09-51a01be
|
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2022-09-12-1a61614
|
||||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2022-08-09-51a01be
|
musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2022-09-12-1a61614
|
||||||
|
|
||||||
[i686]
|
[i686]
|
||||||
manylinux1 = quay.io/pypa/manylinux1_i686:2022-08-08-7292f33
|
manylinux1 = quay.io/pypa/manylinux1_i686:2022-09-07-2e53e4b
|
||||||
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
|
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2022-08-09-51a01be
|
manylinux2014 = quay.io/pypa/manylinux2014_i686:2022-09-12-1a61614
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-08-09-51a01be
|
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-09-12-1a61614
|
||||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2022-08-09-51a01be
|
musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2022-09-12-1a61614
|
||||||
|
|
||||||
[pypy_x86_64]
|
[pypy_x86_64]
|
||||||
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
|
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2022-08-09-51a01be
|
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2022-09-12-1a61614
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-08-09-51a01be
|
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-09-12-1a61614
|
||||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2022-08-09-51a01be
|
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2022-09-12-1a61614
|
||||||
|
|
||||||
[pypy_i686]
|
[pypy_i686]
|
||||||
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
|
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2022-08-09-51a01be
|
manylinux2014 = quay.io/pypa/manylinux2014_i686:2022-09-12-1a61614
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-08-09-51a01be
|
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-09-12-1a61614
|
||||||
|
|
||||||
[aarch64]
|
[aarch64]
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2022-08-09-51a01be
|
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2022-09-12-1a61614
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-08-09-51a01be
|
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-09-12-1a61614
|
||||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2022-08-09-51a01be
|
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2022-09-12-1a61614
|
||||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2022-08-09-51a01be
|
musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2022-09-12-1a61614
|
||||||
|
|
||||||
[ppc64le]
|
[ppc64le]
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2022-08-09-51a01be
|
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2022-09-12-1a61614
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-08-09-51a01be
|
manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-09-12-1a61614
|
||||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2022-08-09-51a01be
|
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2022-09-12-1a61614
|
||||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2022-08-09-51a01be
|
musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2022-09-12-1a61614
|
||||||
|
|
||||||
[s390x]
|
[s390x]
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2022-08-09-51a01be
|
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2022-09-12-1a61614
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-08-09-51a01be
|
manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-09-12-1a61614
|
||||||
musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2022-08-09-51a01be
|
manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2022-09-12-1a61614
|
||||||
|
musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2022-09-12-1a61614
|
||||||
|
|
||||||
[pypy_aarch64]
|
[pypy_aarch64]
|
||||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2022-08-09-51a01be
|
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2022-09-12-1a61614
|
||||||
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-08-09-51a01be
|
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-09-12-1a61614
|
||||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2022-08-09-51a01be
|
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2022-09-12-1a61614
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
version = "20.16.3"
|
version = "20.16.5"
|
||||||
url = "https://github.com/pypa/get-virtualenv/blob/20.16.3/public/virtualenv.pyz?raw=true"
|
url = "https://github.com/pypa/get-virtualenv/blob/20.16.5/public/virtualenv.pyz?raw=true"
|
||||||
|
|||||||
+11
-4
@@ -60,6 +60,7 @@ __all__ = [
|
|||||||
"strtobool",
|
"strtobool",
|
||||||
"cached_property",
|
"cached_property",
|
||||||
"chdir",
|
"chdir",
|
||||||
|
"split_config_settings",
|
||||||
]
|
]
|
||||||
|
|
||||||
resources_dir: Final = Path(__file__).parent / "resources"
|
resources_dir: Final = Path(__file__).parent / "resources"
|
||||||
@@ -144,7 +145,7 @@ def shell(*commands: str, env: dict[str, str] | None = None, cwd: PathOrStr | No
|
|||||||
subprocess.run(command, env=env, cwd=cwd, shell=True, check=True)
|
subprocess.run(command, env=env, cwd=cwd, shell=True, check=True)
|
||||||
|
|
||||||
|
|
||||||
def format_safe(template: str, **kwargs: Any) -> str:
|
def format_safe(template: str, **kwargs: str | os.PathLike[str]) -> str:
|
||||||
"""
|
"""
|
||||||
Works similarly to `template.format(**kwargs)`, except that unmatched
|
Works similarly to `template.format(**kwargs)`, except that unmatched
|
||||||
fields in `template` are passed through untouched.
|
fields in `template` are passed through untouched.
|
||||||
@@ -172,11 +173,9 @@ def format_safe(template: str, **kwargs: Any) -> str:
|
|||||||
re.VERBOSE,
|
re.VERBOSE,
|
||||||
)
|
)
|
||||||
|
|
||||||
# we use a function for repl to prevent re.sub interpreting backslashes
|
|
||||||
# in repl as escape sequences.
|
|
||||||
result = re.sub(
|
result = re.sub(
|
||||||
pattern=find_pattern,
|
pattern=find_pattern,
|
||||||
repl=lambda _: str(value), # pylint: disable=cell-var-from-loop
|
repl=str(value).replace("\\", r"\\"),
|
||||||
string=result,
|
string=result,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -205,6 +204,11 @@ def get_build_verbosity_extra_flags(level: int) -> list[str]:
|
|||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
def split_config_settings(config_settings: str) -> list[str]:
|
||||||
|
config_settings_list = shlex.split(config_settings)
|
||||||
|
return [f"--config-setting={setting}" for setting in config_settings_list]
|
||||||
|
|
||||||
|
|
||||||
def read_python_configs(config: PlatformName) -> list[dict[str, str]]:
|
def read_python_configs(config: PlatformName) -> list[dict[str, str]]:
|
||||||
input_file = resources_dir / "build-platforms.toml"
|
input_file = resources_dir / "build-platforms.toml"
|
||||||
with input_file.open("rb") as f:
|
with input_file.open("rb") as f:
|
||||||
@@ -393,6 +397,7 @@ class CIProvider(Enum):
|
|||||||
azure_pipelines = "azure_pipelines"
|
azure_pipelines = "azure_pipelines"
|
||||||
github_actions = "github_actions"
|
github_actions = "github_actions"
|
||||||
gitlab = "gitlab"
|
gitlab = "gitlab"
|
||||||
|
cirrus_ci = "cirrus_ci"
|
||||||
other = "other"
|
other = "other"
|
||||||
|
|
||||||
|
|
||||||
@@ -409,6 +414,8 @@ def detect_ci_provider() -> CIProvider | None:
|
|||||||
return CIProvider.github_actions
|
return CIProvider.github_actions
|
||||||
elif "GITLAB_CI" in os.environ:
|
elif "GITLAB_CI" in os.environ:
|
||||||
return CIProvider.gitlab
|
return CIProvider.gitlab
|
||||||
|
elif "CIRRUS_CI" in os.environ:
|
||||||
|
return CIProvider.cirrus_ci
|
||||||
elif strtobool(os.environ.get("CI", "false")):
|
elif strtobool(os.environ.get("CI", "false")):
|
||||||
return CIProvider.other
|
return CIProvider.other
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ from .util import (
|
|||||||
prepare_command,
|
prepare_command,
|
||||||
read_python_configs,
|
read_python_configs,
|
||||||
shell,
|
shell,
|
||||||
|
split_config_settings,
|
||||||
virtualenv,
|
virtualenv,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -302,8 +303,10 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
built_wheel_dir.mkdir()
|
built_wheel_dir.mkdir()
|
||||||
|
|
||||||
verbosity_flags = get_build_verbosity_extra_flags(build_options.build_verbosity)
|
verbosity_flags = get_build_verbosity_extra_flags(build_options.build_verbosity)
|
||||||
|
extra_flags = split_config_settings(build_options.config_settings)
|
||||||
|
|
||||||
if build_options.build_frontend == "pip":
|
if build_options.build_frontend == "pip":
|
||||||
|
extra_flags += verbosity_flags
|
||||||
# Path.resolve() is needed. Without it pip wheel may try to fetch package from pypi.org
|
# Path.resolve() is needed. Without it pip wheel may try to fetch package from pypi.org
|
||||||
# see https://github.com/pypa/cibuildwheel/pull/369
|
# see https://github.com/pypa/cibuildwheel/pull/369
|
||||||
call(
|
call(
|
||||||
@@ -314,11 +317,12 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
options.globals.package_dir.resolve(),
|
options.globals.package_dir.resolve(),
|
||||||
f"--wheel-dir={built_wheel_dir}",
|
f"--wheel-dir={built_wheel_dir}",
|
||||||
"--no-deps",
|
"--no-deps",
|
||||||
*get_build_verbosity_extra_flags(build_options.build_verbosity),
|
*extra_flags,
|
||||||
env=env,
|
env=env,
|
||||||
)
|
)
|
||||||
elif build_options.build_frontend == "build":
|
elif build_options.build_frontend == "build":
|
||||||
config_setting = " ".join(verbosity_flags)
|
verbosity_setting = " ".join(verbosity_flags)
|
||||||
|
extra_flags += (f"--config-setting={verbosity_setting}",)
|
||||||
build_env = env.copy()
|
build_env = env.copy()
|
||||||
if build_options.dependency_constraints:
|
if build_options.dependency_constraints:
|
||||||
constraints_path = (
|
constraints_path = (
|
||||||
@@ -345,7 +349,7 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
build_options.package_dir,
|
build_options.package_dir,
|
||||||
"--wheel",
|
"--wheel",
|
||||||
f"--outdir={built_wheel_dir}",
|
f"--outdir={built_wheel_dir}",
|
||||||
f"--config-setting={config_setting}",
|
*extra_flags,
|
||||||
env=build_env,
|
env=build_env,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -2,6 +2,20 @@
|
|||||||
title: Changelog
|
title: Changelog
|
||||||
---
|
---
|
||||||
|
|
||||||
|
# Changelog
|
||||||
|
|
||||||
|
### v2.10.0
|
||||||
|
|
||||||
|
_13 September 2022_
|
||||||
|
|
||||||
|
- 🌟 Adds support for [building wheels on Cirrus CI](https://cibuildwheel.readthedocs.io/en/stable/setup/#cirrus-ci). This is exciting for us, as it's the first public CI platform that natively supports macOS Apple Silicon (aka. M1, `arm64`) runners. As such, it's the first platform that you can natively build _and test_ macOS `arm64` wheels. It also has native Linux ARM (aarch64) runners, for fast, native builds there. (#1191)
|
||||||
|
- 🌟 Adds support for running cibuildwheel on Apple Silicon machines. For a while, we've supported cross-compilation of Apple Silicon wheels on `x86_64`, but now that we have Cirrus CI we can run our test suite and officially support running cibuildwheel on `arm64`. (#1191)
|
||||||
|
- ✨ Adds the `--only` [command line option](https://cibuildwheel.readthedocs.io/en/stable/options/#command-line), to specify a single build to run. Previously, it could be cumbersome to set all the build selection options to target a specific build - for example, you might have to run something like `CIBW_BUILD=cp39-manylinux_x86_64 cibuildwheel --platform linux --archs x86_64`. The new `--only` option overrides all the build selection options to simplify running a single build, which now looks like `cibuildwheel --only cp39-manylinux_x86_64`. (#1098)
|
||||||
|
- ✨ Adds the [`CIBW_CONFIG_SETTINGS`](https://cibuildwheel.readthedocs.io/en/stable/options/#config-settings) option, so you can pass arguments to your package's build backend (#1244)
|
||||||
|
- 🛠 Updates the CPython 3.11 version to the latest release candidate - v3.11.0rc2. (#1265)
|
||||||
|
- 🐛 Fix a bug that can cause a RecursionError on Windows when building from an sdist. (#1253)
|
||||||
|
- 🛠 Add support for the s390x architecture on manylinux_2_28 (#1255)
|
||||||
|
|
||||||
### v2.9.0
|
### v2.9.0
|
||||||
|
|
||||||
_11 August 2022_
|
_11 August 2022_
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
title: Contributing
|
title: Contributing
|
||||||
---
|
---
|
||||||
|
|
||||||
|
# Contributing
|
||||||
|
|
||||||
Wheel-building can be pretty complex. We expect users to find edge-cases - please help the rest of the community out by documenting these, adding features to support them, and reporting bugs.
|
Wheel-building can be pretty complex. We expect users to find edge-cases - please help the rest of the community out by documenting these, adding features to support them, and reporting bugs.
|
||||||
|
|
||||||
If you have an idea for a modification or feature, it's probably best to raise an issue first and discuss it with the maintainer team. Once we have rough consensus on a design, begin work in a PR.
|
If you have an idea for a modification or feature, it's probably best to raise an issue first and discuss it with the maintainer team. Once we have rough consensus on a design, begin work in a PR.
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
title: Modern C++ standards
|
title: Modern C++ standards
|
||||||
---
|
---
|
||||||
|
|
||||||
|
# Modern C++ standards
|
||||||
|
|
||||||
Building Python wheels with modern C++ standards (C++11 and later) requires a few tricks.
|
Building Python wheels with modern C++ standards (C++11 and later) requires a few tricks.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# stars: GitHub repo (optional, if different from package, such as for Twisted)
|
# stars: GitHub repo (optional, if different from package, such as for Twisted)
|
||||||
# pypi: The pypi name, if different from the GitHub package name
|
# pypi: The pypi name, if different from the GitHub package name
|
||||||
# os: Operating system list, [windows, apple, linux] (optional)
|
# os: Operating system list, [windows, apple, linux] (optional)
|
||||||
# ci: [appveyor, github, azurepipelines, circleci, gitlab, travisci] (optional)
|
# ci: [appveyor, github, azurepipelines, circleci, gitlab, travisci, cirrusci] (optional)
|
||||||
# notes: (text, optional)
|
# notes: (text, optional)
|
||||||
|
|
||||||
- name: abess
|
- name: abess
|
||||||
@@ -606,3 +606,10 @@
|
|||||||
ci: [github]
|
ci: [github]
|
||||||
os: [linux, apple]
|
os: [linux, apple]
|
||||||
note: A machine learning model serving framework powered by Rust
|
note: A machine learning model serving framework powered by Rust
|
||||||
|
|
||||||
|
- name: ril
|
||||||
|
gh: Cryptex-github/ril-py
|
||||||
|
ci: [github]
|
||||||
|
os: [windows, apple, linux]
|
||||||
|
pypi: pyril
|
||||||
|
notes: A python binding to Rust Imaging library using maturin and Pyo3, utilizes Github Action cache to improve speed. Builds abi3 wheels.
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 24 24" width="16px" fill="#606060"><title>Cirrus CI icon</title><path d="M19.422.453a1.113 1.113 0 0 0-1.113 1.115 1.113 1.113 0 0 0 1.112 1.114c1.31 0 2.35 1.042 2.35 2.363 0 1.32-1.04 2.363-2.35 2.363H1.112A1.113 1.113 0 0 0 0 8.52a1.113 1.113 0 0 0 1.113 1.117h18.31c1.308 0 2.35 1.042 2.35 2.363 0 1.32-1.042 2.363-2.35 2.363H1.112A1.113 1.113 0 0 0 0 15.48a1.113 1.113 0 0 0 1.113 1.112h18.31c1.308 0 2.35 1.042 2.35 2.363 0 1.32-1.042 2.363-2.35 2.363H1.112A1.113 1.113 0 0 0 0 22.432a1.113 1.113 0 0 0 1.113 1.115h18.31a1.113 1.113 0 0 0 .206-.022c2.42-.112 4.37-2.12 4.37-4.57 0-1.393-.642-2.634-1.63-3.478C23.356 14.632 24 13.393 24 12c0-1.393-.643-2.632-1.63-3.477C23.357 7.68 24 6.438 24 5.045c0-2.52-2.06-4.592-4.578-4.592z"/></svg>
|
||||||
|
After Width: | Height: | Size: 808 B |
@@ -2,6 +2,8 @@
|
|||||||
title: Delivering to PyPI
|
title: Delivering to PyPI
|
||||||
---
|
---
|
||||||
|
|
||||||
|
# Delivering to PyPI
|
||||||
|
|
||||||
After you've built your wheels, you'll probably want to deliver them to PyPI.
|
After you've built your wheels, you'll probably want to deliver them to PyPI.
|
||||||
|
|
||||||
## Manual method
|
## Manual method
|
||||||
|
|||||||
+91
-2
@@ -4,6 +4,7 @@
|
|||||||
body {
|
body {
|
||||||
overflow-wrap: break-word;
|
overflow-wrap: break-word;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
@@ -62,6 +63,13 @@ h1, h2, h3, h4, h5, h6 {
|
|||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 768px) {
|
||||||
|
.wy-nav-content-wrap .wy-nav-content {
|
||||||
|
padding: 1em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Code block filename style
|
Code block filename style
|
||||||
|
|
||||||
@@ -105,10 +113,10 @@ h1, h2, h3, h4, h5, h6 {
|
|||||||
.code-block-filename + pre code {
|
.code-block-filename + pre code {
|
||||||
padding-top: 0.9em;
|
padding-top: 0.9em;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
.toctree-l3 {
|
.toctree-l3 {
|
||||||
border-left: 10px solid transparent;
|
border-left: 10px solid transparent;
|
||||||
}
|
} */
|
||||||
|
|
||||||
/* import font awesome 4 for icons */
|
/* import font awesome 4 for icons */
|
||||||
@import url(https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css);
|
@import url(https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css);
|
||||||
@@ -226,3 +234,84 @@ h1, h2, h3, h4, h5, h6 {
|
|||||||
padding-right: 0;
|
padding-right: 0;
|
||||||
margin-bottom: 0.5em;
|
margin-bottom: 0.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* mkdocs update theme fix-ups */
|
||||||
|
|
||||||
|
.rst-content code, .rst-content tt, code {
|
||||||
|
/* border: none; */
|
||||||
|
/* background-color: #f0f1f1; */
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
.rst-content pre code {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rst-content h1 code,
|
||||||
|
.rst-content h2 code,
|
||||||
|
.rst-content h3 code,
|
||||||
|
.rst-content h4 code,
|
||||||
|
.rst-content h5 code,
|
||||||
|
.rst-content h6 code {
|
||||||
|
border: none;
|
||||||
|
color: inherit;
|
||||||
|
background-color: #f0f1f1;
|
||||||
|
font-size: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* expand all the toctree entries */
|
||||||
|
.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,
|
||||||
|
.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,
|
||||||
|
.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,
|
||||||
|
.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,
|
||||||
|
.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,
|
||||||
|
.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,
|
||||||
|
.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,
|
||||||
|
.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,
|
||||||
|
.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,
|
||||||
|
.wy-menu-vertical .toctree-l10.current .toctree-l11>ul {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* hide all the buttons */
|
||||||
|
.wy-menu-vertical li.current>a button.toctree-expand,
|
||||||
|
.wy-menu-vertical li.on a button.toctree-expand,
|
||||||
|
.wy-menu-vertical li.toctree-l2 button.toctree-expand,
|
||||||
|
.wy-menu-vertical li a button.toctree-expand {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* toctree layout improvements */
|
||||||
|
.wy-menu-vertical a {
|
||||||
|
padding: 0.4em 1.2em;
|
||||||
|
}
|
||||||
|
.wy-menu-vertical li.current>a,
|
||||||
|
.wy-menu-vertical li.on a {
|
||||||
|
font-weight: normal;
|
||||||
|
padding: 0.4em 1.2em;
|
||||||
|
/* border-right: 1px solid #f0f0f0; */
|
||||||
|
}
|
||||||
|
.wy-menu-vertical li.current a {
|
||||||
|
padding: 0.4em 1.2em;
|
||||||
|
}
|
||||||
|
.wy-menu-vertical li.toctree-l3 a,
|
||||||
|
.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a {
|
||||||
|
padding-left: 1.8em;
|
||||||
|
}
|
||||||
|
.wy-menu-vertical li.toctree-l2.current>a {
|
||||||
|
padding: 0.4em 1.2em;
|
||||||
|
}
|
||||||
|
.wy-menu-vertical li.toctree-l2.current>a,
|
||||||
|
.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
.wy-menu-vertical li.toctree-l2.current>a:hover,
|
||||||
|
.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a:hover {
|
||||||
|
background: #d6d6d6;
|
||||||
|
}
|
||||||
|
.wy-menu-vertical li.current>a.current {
|
||||||
|
background: #fafafa !important;
|
||||||
|
}
|
||||||
|
.wy-menu-vertical li.current a {
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
+12
-2
@@ -2,6 +2,8 @@
|
|||||||
title: Tips and tricks
|
title: Tips and tricks
|
||||||
---
|
---
|
||||||
|
|
||||||
|
# Tips and tricks
|
||||||
|
|
||||||
## Tips
|
## Tips
|
||||||
|
|
||||||
### Linux builds in containers
|
### Linux builds in containers
|
||||||
@@ -81,6 +83,14 @@ Here's an example GitHub Actions workflow with a job that builds for Apple Silic
|
|||||||
{% include "../examples/github-apple-silicon.yml" %}
|
{% include "../examples/github-apple-silicon.yml" %}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Here's an example Cirrus CI workflow with a job that builds for macOS Intel through Rosetta 2 emulation and for Apple Silicon natively:
|
||||||
|
|
||||||
|
> .cirrus.yml
|
||||||
|
|
||||||
|
```yml
|
||||||
|
{% include "../examples/cirrus-ci-intel-mac.yml" %}
|
||||||
|
```
|
||||||
|
|
||||||
### Building non-native architectures using emulation {: #emulation}
|
### Building non-native architectures using emulation {: #emulation}
|
||||||
|
|
||||||
cibuildwheel supports building non-native architectures on Linux, via
|
cibuildwheel supports building non-native architectures on Linux, via
|
||||||
@@ -132,7 +142,7 @@ There are two suggested methods for keeping cibuildwheel up to date that instead
|
|||||||
If you use GitHub Actions for builds, you can use cibuildwheel as an action:
|
If you use GitHub Actions for builds, you can use cibuildwheel as an action:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
uses: pypa/cibuildwheel@v2.9.0
|
uses: pypa/cibuildwheel@v2.10.0
|
||||||
```
|
```
|
||||||
|
|
||||||
This is a composite step that just runs cibuildwheel using pipx. You can set command-line options as `with:` parameters, and use `env:` as normal.
|
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.
|
||||||
@@ -154,7 +164,7 @@ The second option, and the only one that supports other CI systems, is using a `
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# requirements-cibw.txt
|
# requirements-cibw.txt
|
||||||
cibuildwheel==2.9.0
|
cibuildwheel==2.10.0
|
||||||
```
|
```
|
||||||
|
|
||||||
Then your install step would have `python -m pip install -r requirements-cibw.txt` in it. Your `.github/dependabot.yml` file could look like this:
|
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:
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
title: Home
|
title: Home
|
||||||
---
|
---
|
||||||
|
|
||||||
|
# cibuildwheel
|
||||||
|
|
||||||
{%
|
{%
|
||||||
include-markdown "../README.md"
|
include-markdown "../README.md"
|
||||||
start="<!--intro-start-->"
|
start="<!--intro-start-->"
|
||||||
|
|||||||
+54
-2
@@ -1,3 +1,5 @@
|
|||||||
|
# Options
|
||||||
|
|
||||||
## Setting options
|
## Setting options
|
||||||
|
|
||||||
cibuildwheel can either be configured using environment variables, or from
|
cibuildwheel can either be configured using environment variables, or from
|
||||||
@@ -73,6 +75,16 @@ cibuildwheel to run tests, add the following YAML to your CI config file:
|
|||||||
CIBW_TEST_COMMAND: "pytest {project}/tests"
|
CIBW_TEST_COMMAND: "pytest {project}/tests"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
!!! tab "Cirrus CI"
|
||||||
|
|
||||||
|
> .cirrus.yml ([docs](https://cirrus-ci.org/guide/writing-tasks/#environment-variables))
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
env:
|
||||||
|
CIBW_TEST_REQUIRES: pytest
|
||||||
|
CIBW_TEST_COMMAND: "pytest {project}/tests"
|
||||||
|
```
|
||||||
|
|
||||||
### Configuration file {: #configuration-file}
|
### Configuration file {: #configuration-file}
|
||||||
|
|
||||||
You can configure cibuildwheel with a config file, such as `pyproject.toml`.
|
You can configure cibuildwheel with a config file, such as `pyproject.toml`.
|
||||||
@@ -101,7 +113,7 @@ The complete set of defaults for the current version of cibuildwheel are shown b
|
|||||||
|
|
||||||
!!! tip
|
!!! tip
|
||||||
Static configuration works across all CI systems, and can be used locally if
|
Static configuration works across all CI systems, and can be used locally if
|
||||||
you run `cibuildwheel --plat linux`. This is preferred, but environment
|
you run `cibuildwheel --platform linux`. This is preferred, but environment
|
||||||
variables are better if you need to change per-matrix element
|
variables are better if you need to change per-matrix element
|
||||||
(`CIBW_BUILD` is often in this category, for example), or if you cannot or do
|
(`CIBW_BUILD` is often in this category, for example), or if you cannot or do
|
||||||
not want to change a `pyproject.toml` file. You can specify a different file to
|
not want to change a `pyproject.toml` file. You can specify a different file to
|
||||||
@@ -190,6 +202,10 @@ This option can also be set using the [command-line option](#command-line) `--pl
|
|||||||
|
|
||||||
This is even more convenient if you store your cibuildwheel config in [`pyproject.toml`](#configuration-file).
|
This is even more convenient if you store your cibuildwheel config in [`pyproject.toml`](#configuration-file).
|
||||||
|
|
||||||
|
You can also run a single identifier with `--only <identifier>`. This will
|
||||||
|
not require `--platform` or `--arch`, and will override any build/skip
|
||||||
|
configuration.
|
||||||
|
|
||||||
### `CIBW_BUILD`, `CIBW_SKIP` {: #build-skip}
|
### `CIBW_BUILD`, `CIBW_SKIP` {: #build-skip}
|
||||||
|
|
||||||
> Choose the Python versions to build
|
> Choose the Python versions to build
|
||||||
@@ -517,6 +533,36 @@ Choose which build backend to use. Can either be "pip", which will run
|
|||||||
build-frontend = "pip"
|
build-frontend = "pip"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### `CIBW_CONFIG_SETTINGS` {: #config-settings}
|
||||||
|
> Specify config-settings for the build backend.
|
||||||
|
|
||||||
|
Specify config settings for the build backend. Each space separated
|
||||||
|
item will be passed via `--config-setting`. In TOML, you can specify
|
||||||
|
a table of items, including arrays.
|
||||||
|
|
||||||
|
!!! tip
|
||||||
|
Currently, "build" supports arrays for options, but "pip" only supports
|
||||||
|
single values.
|
||||||
|
|
||||||
|
Platform-specific environment variables also available:<br/>
|
||||||
|
`CIBW_BEFORE_ALL_MACOS` | `CIBW_BEFORE_ALL_WINDOWS` | `CIBW_BEFORE_ALL_LINUX`
|
||||||
|
|
||||||
|
|
||||||
|
#### Examples
|
||||||
|
|
||||||
|
!!! tab examples "Environment variables"
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
CIBW_CONFIG_SETTINGS: "--build-option=--use-mypyc"
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! tab examples "pyproject.toml"
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[tool.cibuildwheel.config-settings]
|
||||||
|
--build-option = "--use-mypyc"
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
### `CIBW_ENVIRONMENT` {: #environment}
|
### `CIBW_ENVIRONMENT` {: #environment}
|
||||||
> Set environment variables needed during the build
|
> Set environment variables needed during the build
|
||||||
@@ -899,7 +945,7 @@ The available options are (default value):
|
|||||||
Set an alternative Docker image to be used for building [manylinux / musllinux](https://github.com/pypa/manylinux) wheels.
|
Set an alternative Docker image to be used for building [manylinux / musllinux](https://github.com/pypa/manylinux) wheels.
|
||||||
|
|
||||||
For `CIBW_MANYLINUX_*_IMAGE`, the value of this option can either be set to `manylinux1`, `manylinux2010`, `manylinux2014`, `manylinux_2_24` or `manylinux_2_28` to use a pinned version of the [official manylinux images](https://github.com/pypa/manylinux). Alternatively, set these options to any other valid Docker image name. For PyPy, the `manylinux1` image is not available. For architectures other
|
For `CIBW_MANYLINUX_*_IMAGE`, the value of this option can either be set to `manylinux1`, `manylinux2010`, `manylinux2014`, `manylinux_2_24` or `manylinux_2_28` to use a pinned version of the [official manylinux images](https://github.com/pypa/manylinux). Alternatively, set these options to any other valid Docker image name. For PyPy, the `manylinux1` image is not available. For architectures other
|
||||||
than x86 (x86\_64 and i686) `manylinux2014`, `manylinux_2_24` or `manylinux_2_28` must be used, because the first version of the manylinux specification that supports additional architectures is `manylinux2014`. `manylinux_2_28` is not supported for `i686` & `s390x` architectures.
|
than x86 (x86\_64 and i686) `manylinux2014`, `manylinux_2_24` or `manylinux_2_28` must be used, because the first version of the manylinux specification that supports additional architectures is `manylinux2014`. `manylinux_2_28` is not supported for `i686` architecture.
|
||||||
|
|
||||||
For `CIBW_MUSLLINUX_*_IMAGE`, the value of this option can either be set to `musllinux_1_1` to use a pinned version of the [official musllinux images](https://github.com/pypa/musllinux). Alternatively, set these options to any other valid Docker image name.
|
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.
|
||||||
|
|
||||||
@@ -1352,6 +1398,12 @@ Some options support placeholders, like `{project}`, `{package}` or `{wheel}`, t
|
|||||||
margin-top: 28px;
|
margin-top: 28px;
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
}
|
}
|
||||||
|
@media screen and (max-width: 768px) {
|
||||||
|
.options-toc {
|
||||||
|
grid-gap: 1em 0.5em;
|
||||||
|
gap: 1em 0.5em;
|
||||||
|
}
|
||||||
|
}
|
||||||
.options-toc .header {
|
.options-toc .header {
|
||||||
grid-column: 1 / 3;
|
grid-column: 1 / 3;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
|||||||
+30
-14
@@ -2,7 +2,9 @@
|
|||||||
title: 'Setup'
|
title: 'Setup'
|
||||||
---
|
---
|
||||||
|
|
||||||
# Run cibuildwheel locally (optional) {: #local}
|
# Setup
|
||||||
|
|
||||||
|
## Run cibuildwheel locally (optional) {: #local}
|
||||||
|
|
||||||
Before getting to CI setup, it can be convenient to test cibuildwheel
|
Before getting to CI setup, it can be convenient to test cibuildwheel
|
||||||
locally to quickly iterate and track down issues without even touching CI.
|
locally to quickly iterate and track down issues without even touching CI.
|
||||||
@@ -89,7 +91,7 @@ You should see the builds taking place. You can experiment with options using en
|
|||||||
cibuildwheel --platform linux
|
cibuildwheel --platform linux
|
||||||
```
|
```
|
||||||
|
|
||||||
## Linux builds
|
### Linux builds
|
||||||
|
|
||||||
If you've got [Docker](https://www.docker.com/products/docker-desktop) installed on
|
If you've got [Docker](https://www.docker.com/products/docker-desktop) installed on
|
||||||
your development machine, you can run a Linux build.
|
your development machine, you can run a Linux build.
|
||||||
@@ -105,7 +107,7 @@ they're perfectly reproducible.
|
|||||||
|
|
||||||
The only side effect to your system will be docker images being pulled.
|
The only side effect to your system will be docker images being pulled.
|
||||||
|
|
||||||
## macOS / Windows builds
|
### macOS / Windows builds
|
||||||
|
|
||||||
Pre-requisite: you need to have native build tools installed.
|
Pre-requisite: you need to have native build tools installed.
|
||||||
|
|
||||||
@@ -137,9 +139,9 @@ You can override the cache folder using the ``CIBW_CACHE_PATH`` environment vari
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
# Configure a CI service
|
## Configure a CI service
|
||||||
|
|
||||||
## GitHub Actions [linux/mac/windows] {: #github-actions}
|
### GitHub Actions [linux/mac/windows] {: #github-actions}
|
||||||
|
|
||||||
To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/workflows/build_wheels.yml` file in your repo.
|
To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/workflows/build_wheels.yml` file in your repo.
|
||||||
|
|
||||||
@@ -182,7 +184,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/
|
|||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Build wheels
|
- name: Build wheels
|
||||||
run: pipx run cibuildwheel==2.9.0
|
run: pipx run cibuildwheel==2.10.0
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
@@ -217,7 +219,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/
|
|||||||
- uses: actions/setup-python@v3
|
- uses: actions/setup-python@v3
|
||||||
|
|
||||||
- name: Install cibuildwheel
|
- name: Install cibuildwheel
|
||||||
run: python -m pip install cibuildwheel==2.9.0
|
run: python -m pip install cibuildwheel==2.10.0
|
||||||
|
|
||||||
- name: Build wheels
|
- name: Build wheels
|
||||||
run: python -m cibuildwheel --output-dir wheelhouse
|
run: python -m cibuildwheel --output-dir wheelhouse
|
||||||
@@ -235,7 +237,7 @@ For more info on this file, check out the [docs](https://help.github.com/en/acti
|
|||||||
[`examples/github-deploy.yml`](https://github.com/pypa/cibuildwheel/blob/main/examples/github-deploy.yml) extends this minimal example with a demonstration of how to automatically upload the built wheels to PyPI.
|
[`examples/github-deploy.yml`](https://github.com/pypa/cibuildwheel/blob/main/examples/github-deploy.yml) extends this minimal example with a demonstration of how to automatically upload the built wheels to PyPI.
|
||||||
|
|
||||||
|
|
||||||
## Azure Pipelines [linux/mac/windows] {: #azure-pipelines}
|
### Azure Pipelines [linux/mac/windows] {: #azure-pipelines}
|
||||||
|
|
||||||
To build Linux, Mac, and Windows wheels on Azure Pipelines, create a `azure-pipelines.yml` file in your repo.
|
To build Linux, Mac, and Windows wheels on Azure Pipelines, create a `azure-pipelines.yml` file in your repo.
|
||||||
|
|
||||||
@@ -249,7 +251,7 @@ Commit this file, enable building of your repo on Azure Pipelines, and push.
|
|||||||
|
|
||||||
Wheels will be stored for you and available through the Pipelines interface. For more info on this file, check out the [docs](https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema).
|
Wheels will be stored for you and available through the Pipelines interface. For more info on this file, check out the [docs](https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema).
|
||||||
|
|
||||||
## Travis CI [linux/windows] {: #travis-ci}
|
### Travis CI [linux/windows] {: #travis-ci}
|
||||||
|
|
||||||
To build Linux and Windows wheels on Travis CI, create a `.travis.yml` file in your repo.
|
To build Linux and Windows wheels on Travis CI, create a `.travis.yml` file in your repo.
|
||||||
|
|
||||||
@@ -265,7 +267,7 @@ Then setup a deployment method by following the [Travis CI deployment docs](http
|
|||||||
|
|
||||||
[`examples/travis-ci-deploy.yml`](https://github.com/pypa/cibuildwheel/blob/main/examples/travis-ci-deploy.yml) extends this minimal example with a demonstration of how to automatically upload the built wheels to PyPI.
|
[`examples/travis-ci-deploy.yml`](https://github.com/pypa/cibuildwheel/blob/main/examples/travis-ci-deploy.yml) extends this minimal example with a demonstration of how to automatically upload the built wheels to PyPI.
|
||||||
|
|
||||||
## AppVeyor [linux/mac/windows] {: #appveyor}
|
### AppVeyor [linux/mac/windows] {: #appveyor}
|
||||||
|
|
||||||
To build Linux, Mac, and Windows wheels on AppVeyor, create an `appveyor.yml` file in your repo.
|
To build Linux, Mac, and Windows wheels on AppVeyor, create an `appveyor.yml` file in your repo.
|
||||||
|
|
||||||
@@ -281,7 +283,7 @@ AppVeyor will store the built wheels for you - you can access them from the proj
|
|||||||
|
|
||||||
For more info on this config file, check out the [docs](https://www.appveyor.com/docs/).
|
For more info on this config file, check out the [docs](https://www.appveyor.com/docs/).
|
||||||
|
|
||||||
## CircleCI [linux/mac] {: #circleci}
|
### CircleCI [linux/mac] {: #circleci}
|
||||||
|
|
||||||
To build Linux and Mac wheels on CircleCI, create a `.circleci/config.yml` file in your repo,
|
To build Linux and Mac wheels on CircleCI, create a `.circleci/config.yml` file in your repo,
|
||||||
|
|
||||||
@@ -298,7 +300,7 @@ Commit this file, enable building of your repo on CircleCI, and push.
|
|||||||
|
|
||||||
CircleCI will store the built wheels for you - you can access them from the project console. Check out the CircleCI [docs](https://circleci.com/docs/2.0/configuration-reference/#section=configuration) for more info on this config file.
|
CircleCI will store the built wheels for you - you can access them from the project console. Check out the CircleCI [docs](https://circleci.com/docs/2.0/configuration-reference/#section=configuration) for more info on this config file.
|
||||||
|
|
||||||
## Gitlab CI [linux] {: #gitlab-ci}
|
### Gitlab CI [linux] {: #gitlab-ci}
|
||||||
|
|
||||||
To build Linux wheels on Gitlab CI, create a `.gitlab-ci.yml` file in your repo,
|
To build Linux wheels on Gitlab CI, create a `.gitlab-ci.yml` file in your repo,
|
||||||
|
|
||||||
@@ -312,15 +314,29 @@ Commit this file, and push to Gitlab. The pipeline should start automatically.
|
|||||||
|
|
||||||
Gitlab will store the built wheels for you - you can access them from the Pipelines view. Check out the Gitlab [docs](https://docs.gitlab.com/ee/ci/yaml/) for more info on this config file.
|
Gitlab will store the built wheels for you - you can access them from the Pipelines view. Check out the Gitlab [docs](https://docs.gitlab.com/ee/ci/yaml/) for more info on this config file.
|
||||||
|
|
||||||
|
### Cirrus CI [linux/mac/windows] {: #cirrus-ci}
|
||||||
|
|
||||||
|
To build Linux, Mac, and Windows wheels on Cirrus CI, create a `.cirrus.yml` file in your repo,
|
||||||
|
|
||||||
|
> .cirrus.yml
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
{% include "../examples/cirrus-ci-minimal.yml" %}
|
||||||
|
```
|
||||||
|
|
||||||
|
Commit this file, enable building of your repo on Cirrus CI, and push.
|
||||||
|
|
||||||
|
Cirrus CI will store the built wheels for you - you can access them from the individual task view. Check out the Cirrus CI [docs](https://cirrus-ci.org/guide/writing-tasks/) for more info on this config file.
|
||||||
|
|
||||||
> ⚠️ Got an error? Check the [FAQ](faq.md).
|
> ⚠️ Got an error? Check the [FAQ](faq.md).
|
||||||
|
|
||||||
# Next steps
|
## Next steps
|
||||||
|
|
||||||
Once you've got the wheel building successfully, you might want to set up [testing](options.md#test-command) or [automatic releases to PyPI](deliver-to-pypi.md#automatic-method).
|
Once you've got the wheel building successfully, you might want to set up [testing](options.md#test-command) or [automatic releases to PyPI](deliver-to-pypi.md#automatic-method).
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener('DOMContentLoaded', function() {
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
$('a.toctree-l3, .rst-content h2').each(function(i, el) {
|
$('.toctree-l3>a, .rst-content h3').each(function(i, el) {
|
||||||
var text = $(el).text()
|
var text = $(el).text()
|
||||||
var match = text.match(/(.*) \[([a-z/]+)\]/);
|
var match = text.match(/(.*) \[([a-z/]+)\]/);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,271 @@
|
|||||||
|
// imported from
|
||||||
|
// https://github.com/readthedocs/sphinx_rtd_theme/blob/bc73ad84068b4ee7d8ddae7e51f5b767e8fd377b/src/theme.js
|
||||||
|
// modified to suit our documentation structure, to not scroll the nav sidebar
|
||||||
|
// when clicked - this is disorienting
|
||||||
|
|
||||||
|
var jQuery = window.jQuery;
|
||||||
|
|
||||||
|
// Sphinx theme nav state
|
||||||
|
function ThemeNav () {
|
||||||
|
|
||||||
|
var nav = {
|
||||||
|
navBar: null,
|
||||||
|
win: null,
|
||||||
|
winScroll: false,
|
||||||
|
winResize: false,
|
||||||
|
linkScroll: false,
|
||||||
|
winPosition: 0,
|
||||||
|
winHeight: null,
|
||||||
|
docHeight: null,
|
||||||
|
isRunning: false
|
||||||
|
};
|
||||||
|
|
||||||
|
nav.enable = function (withStickyNav) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
// TODO this can likely be removed once the theme javascript is broken
|
||||||
|
// out from the RTD assets. This just ensures old projects that are
|
||||||
|
// calling `enable()` get the sticky menu on by default. All other cals
|
||||||
|
// to `enable` should include an argument for enabling the sticky menu.
|
||||||
|
if (typeof(withStickyNav) == 'undefined') {
|
||||||
|
withStickyNav = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self.isRunning) {
|
||||||
|
// Only allow enabling nav logic once
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
self.isRunning = true;
|
||||||
|
jQuery(function ($) {
|
||||||
|
self.init($);
|
||||||
|
|
||||||
|
self.reset();
|
||||||
|
self.win.on('hashchange', self.reset);
|
||||||
|
|
||||||
|
if (withStickyNav) {
|
||||||
|
// Set scroll monitor
|
||||||
|
self.win.on('scroll', function () {
|
||||||
|
if (!self.linkScroll) {
|
||||||
|
if (!self.winScroll) {
|
||||||
|
self.winScroll = true;
|
||||||
|
requestAnimationFrame(function() { self.onScroll(); });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set resize monitor
|
||||||
|
self.win.on('resize', function () {
|
||||||
|
if (!self.winResize) {
|
||||||
|
self.winResize = true;
|
||||||
|
requestAnimationFrame(function() { self.onResize(); });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
self.onResize();
|
||||||
|
});
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// TODO remove this with a split in theme and Read the Docs JS logic as
|
||||||
|
// well, it's only here to support 0.3.0 installs of our theme.
|
||||||
|
nav.enableSticky = function() {
|
||||||
|
this.enable(true);
|
||||||
|
};
|
||||||
|
|
||||||
|
nav.init = function ($) {
|
||||||
|
var doc = $(document),
|
||||||
|
self = this;
|
||||||
|
|
||||||
|
this.navBar = $('div.wy-side-scroll:first');
|
||||||
|
this.win = $(window);
|
||||||
|
|
||||||
|
// Set up javascript UX bits
|
||||||
|
$(document)
|
||||||
|
// Shift nav in mobile when clicking the menu.
|
||||||
|
.on('click', "[data-toggle='wy-nav-top']", function() {
|
||||||
|
$("[data-toggle='wy-nav-shift']").toggleClass("shift");
|
||||||
|
$("[data-toggle='rst-versions']").toggleClass("shift");
|
||||||
|
})
|
||||||
|
|
||||||
|
// Nav menu link click operations
|
||||||
|
.on('click', ".wy-menu-vertical .current ul li a", function() {
|
||||||
|
var target = $(this);
|
||||||
|
// Close menu when you click a link.
|
||||||
|
$("[data-toggle='wy-nav-shift']").removeClass("shift");
|
||||||
|
$("[data-toggle='rst-versions']").toggleClass("shift");
|
||||||
|
// Handle dynamic display of l3 and l4 nav lists
|
||||||
|
self.toggleCurrent(target);
|
||||||
|
self.hashChange();
|
||||||
|
})
|
||||||
|
.on('click', "[data-toggle='rst-current-version']", function() {
|
||||||
|
$("[data-toggle='rst-versions']").toggleClass("shift-up");
|
||||||
|
})
|
||||||
|
|
||||||
|
// Make tables responsive
|
||||||
|
$("table.docutils:not(.field-list,.footnote,.citation)")
|
||||||
|
.wrap("<div class='wy-table-responsive'></div>");
|
||||||
|
|
||||||
|
// Add extra class to responsive tables that contain
|
||||||
|
// footnotes or citations so that we can target them for styling
|
||||||
|
$("table.docutils.footnote")
|
||||||
|
.wrap("<div class='wy-table-responsive footnote'></div>");
|
||||||
|
$("table.docutils.citation")
|
||||||
|
.wrap("<div class='wy-table-responsive citation'></div>");
|
||||||
|
|
||||||
|
// Add expand links to all parents of nested ul
|
||||||
|
$('.wy-menu-vertical ul').not('.simple').siblings('a').each(function () {
|
||||||
|
var link = $(this);
|
||||||
|
expand =
|
||||||
|
$('<button class="toctree-expand" title="Open/close menu"></button>');
|
||||||
|
expand.on('click', function (ev) {
|
||||||
|
self.toggleCurrent(link);
|
||||||
|
ev.stopPropagation();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
link.prepend(expand);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
nav.reset = function () {
|
||||||
|
// Get anchor from URL and open up nested nav
|
||||||
|
var anchor = encodeURI(window.location.hash) || '#';
|
||||||
|
|
||||||
|
try {
|
||||||
|
var vmenu = $('.wy-menu-vertical');
|
||||||
|
var link = vmenu.find('[href="' + anchor + '"]');
|
||||||
|
if (link.length === 0) {
|
||||||
|
// this link was not found in the sidebar.
|
||||||
|
// Find associated id element, then its closest section
|
||||||
|
// in the document and try with that one.
|
||||||
|
var id_elt = $('.document [id="' + anchor.substring(1) + '"]');
|
||||||
|
var closest_section = id_elt.closest('div.section');
|
||||||
|
link = vmenu.find('[href="#' + closest_section.attr("id") + '"]');
|
||||||
|
if (link.length === 0) {
|
||||||
|
// still not found in the sidebar. fall back to main section
|
||||||
|
link = vmenu.find('[href="#"]');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// If we found a matching link then reset current and re-apply
|
||||||
|
// otherwise retain the existing match
|
||||||
|
if (link.length > 0) {
|
||||||
|
$('.wy-menu-vertical .current')
|
||||||
|
.removeClass('current')
|
||||||
|
.attr('aria-expanded','false');
|
||||||
|
link.addClass('current')
|
||||||
|
.attr('aria-expanded','true');
|
||||||
|
link.closest('li.toctree-l1')
|
||||||
|
.parent()
|
||||||
|
.addClass('current')
|
||||||
|
.attr('aria-expanded','true');
|
||||||
|
for (let i = 1; i <= 10; i++) {
|
||||||
|
link.closest('li.toctree-l' + i)
|
||||||
|
.addClass('current')
|
||||||
|
.attr('aria-expanded','true');
|
||||||
|
}
|
||||||
|
|
||||||
|
// EDIT by joerick
|
||||||
|
console.log('no scroll')
|
||||||
|
// link[0].scrollIntoView();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.log("Error expanding nav for anchor", err);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
nav.onScroll = function () {
|
||||||
|
this.winScroll = false;
|
||||||
|
var newWinPosition = this.win.scrollTop(),
|
||||||
|
winBottom = newWinPosition + this.winHeight,
|
||||||
|
navPosition = this.navBar.scrollTop(),
|
||||||
|
newNavPosition = navPosition + (newWinPosition - this.winPosition);
|
||||||
|
if (newWinPosition < 0 || winBottom > this.docHeight) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.navBar.scrollTop(newNavPosition);
|
||||||
|
this.winPosition = newWinPosition;
|
||||||
|
};
|
||||||
|
|
||||||
|
nav.onResize = function () {
|
||||||
|
this.winResize = false;
|
||||||
|
this.winHeight = this.win.height();
|
||||||
|
this.docHeight = $(document).height();
|
||||||
|
};
|
||||||
|
|
||||||
|
nav.hashChange = function () {
|
||||||
|
this.linkScroll = true;
|
||||||
|
this.win.one('hashchange', function () {
|
||||||
|
this.linkScroll = false;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
nav.toggleCurrent = function (elem) {
|
||||||
|
var parent_li = elem.closest('li');
|
||||||
|
parent_li
|
||||||
|
.siblings('li.current')
|
||||||
|
.removeClass('current')
|
||||||
|
.attr('aria-expanded','false');
|
||||||
|
parent_li
|
||||||
|
.siblings()
|
||||||
|
.find('li.current')
|
||||||
|
.removeClass('current')
|
||||||
|
.attr('aria-expanded','false');
|
||||||
|
var children = parent_li.find('> ul li');
|
||||||
|
// Don't toggle terminal elements.
|
||||||
|
if (children.length) {
|
||||||
|
children
|
||||||
|
.removeClass('current')
|
||||||
|
.attr('aria-expanded','false');
|
||||||
|
parent_li
|
||||||
|
.toggleClass('current')
|
||||||
|
.attr('aria-expanded', function(i, old) {
|
||||||
|
return old == 'true' ? 'false' : 'true';
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nav;
|
||||||
|
};
|
||||||
|
|
||||||
|
const ThemeNavInstance = ThemeNav();
|
||||||
|
|
||||||
|
window.SphinxRtdTheme = {
|
||||||
|
Navigation: ThemeNavInstance,
|
||||||
|
// TODO remove this once static assets are split up between the theme
|
||||||
|
// and Read the Docs. For now, this patches 0.3.0 to be backwards
|
||||||
|
// compatible with a pre-0.3.0 layout.html
|
||||||
|
StickyNav: ThemeNavInstance,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
|
||||||
|
// https://gist.github.com/paulirish/1579671
|
||||||
|
// MIT license
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var lastTime = 0;
|
||||||
|
var vendors = ['ms', 'moz', 'webkit', 'o'];
|
||||||
|
for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
|
||||||
|
window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
|
||||||
|
window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame']
|
||||||
|
|| window[vendors[x]+'CancelRequestAnimationFrame'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!window.requestAnimationFrame)
|
||||||
|
window.requestAnimationFrame = function(callback, element) {
|
||||||
|
var currTime = new Date().getTime();
|
||||||
|
var timeToCall = Math.max(0, 16 - (currTime - lastTime));
|
||||||
|
var id = window.setTimeout(function() { callback(currTime + timeToCall); },
|
||||||
|
timeToCall);
|
||||||
|
lastTime = currTime + timeToCall;
|
||||||
|
return id;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!window.cancelAnimationFrame)
|
||||||
|
window.cancelAnimationFrame = function(id) {
|
||||||
|
clearTimeout(id);
|
||||||
|
};
|
||||||
|
}());
|
||||||
+128
-118
@@ -26,12 +26,12 @@ title: Working examples
|
|||||||
| [duckdb][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | DuckDB is an in-process SQL OLAP Database Management System |
|
| [duckdb][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | DuckDB is an in-process SQL OLAP Database Management System |
|
||||||
| [Apache Beam][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Apache Beam is a unified programming model for Batch and Streaming data processing. |
|
| [Apache Beam][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Apache Beam is a unified programming model for Batch and Streaming data processing. |
|
||||||
| [asyncpg][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A fast PostgreSQL Database Client Library for Python/asyncio. |
|
| [asyncpg][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A fast PostgreSQL Database Client Library for Python/asyncio. |
|
||||||
| [PyGame][] | ![github icon][] | ![apple icon][] ![linux icon][] | pygame (the library) is a Free and Open Source python programming language library for making multimedia applications like games built on top of the excellent SDL library. C, Python, Native, OpenGL. |
|
| [PyGame][] | ![github icon][] | ![apple icon][] ![linux icon][] | 🐍🎮 pygame (the library) is a Free and Open Source python programming language library for making multimedia applications like games built on top of the excellent SDL library. C, Python, Native, OpenGL. |
|
||||||
| [scikit-image][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Image processing library. Uses cibuildwheel to build and test a project that uses Cython with platform-native code. |
|
|
||||||
| [cmake][] | ![github icon][] ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Multitagged binary builds for all supported platforms, using cibw 2 config configuration. |
|
| [cmake][] | ![github icon][] ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Multitagged binary builds for all supported platforms, using cibw 2 config configuration. |
|
||||||
|
| [scikit-image][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Image processing library. Uses cibuildwheel to build and test a project that uses Cython with platform-native code. |
|
||||||
| [twisted-iocpsupport][] | ![github icon][] | ![windows icon][] | A submodule of Twisted that hooks into native C APIs using Cython. |
|
| [twisted-iocpsupport][] | ![github icon][] | ![windows icon][] | A submodule of Twisted that hooks into native C APIs using Cython. |
|
||||||
| [websockets][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | Library for building WebSocket servers and clients. Mostly written in Python, with a small C 'speedups' extension module. |
|
|
||||||
| [PyOxidizer][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A modern Python application packaging and distribution tool |
|
| [PyOxidizer][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A modern Python application packaging and distribution tool |
|
||||||
|
| [websockets][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | Library for building WebSocket servers and clients. Mostly written in Python, with a small C 'speedups' extension module. |
|
||||||
| [cvxpy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A Python-embedded modeling language for convex optimization problems. |
|
| [cvxpy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A Python-embedded modeling language for convex optimization problems. |
|
||||||
| [Triton][] | ![github icon][] | ![linux icon][] | Self hosted runners |
|
| [Triton][] | ![github icon][] | ![linux icon][] | Self hosted runners |
|
||||||
| [UltraJSON][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Ultra fast JSON decoder and encoder written in C with Python bindings |
|
| [UltraJSON][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Ultra fast JSON decoder and encoder written in C with Python bindings |
|
||||||
@@ -39,8 +39,8 @@ title: Working examples
|
|||||||
| [OpenSpiel][] | ![github icon][] | ![apple icon][] ![linux icon][] | OpenSpiel is a collection of environments and algorithms for research in general reinforcement learning and search/planning in games. |
|
| [OpenSpiel][] | ![github icon][] | ![apple icon][] ![linux icon][] | OpenSpiel is a collection of environments and algorithms for research in general reinforcement learning and search/planning in games. |
|
||||||
| [pyzmq][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python bindings for zeromq, the networking library. Uses Cython and CFFI. |
|
| [pyzmq][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python bindings for zeromq, the networking library. Uses Cython and CFFI. |
|
||||||
| [aiortc][] | ![github icon][] | ![apple icon][] ![linux icon][] | WebRTC and ORTC implementation for Python using asyncio. |
|
| [aiortc][] | ![github icon][] | ![apple icon][] ![linux icon][] | WebRTC and ORTC implementation for Python using asyncio. |
|
||||||
| [vispy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Main repository for Vispy |
|
|
||||||
| [Implicit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes GPU support for linux wheels |
|
| [Implicit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes GPU support for linux wheels |
|
||||||
|
| [vispy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Main repository for Vispy |
|
||||||
| [Confluent client for Kafka][] | ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | setup in `tools/wheels/build-wheels.bat` |
|
| [Confluent client for Kafka][] | ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | setup in `tools/wheels/build-wheels.bat` |
|
||||||
| [tinyobjloader][] | ![azurepipelines icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Tiny but powerful single file wavefront obj loader |
|
| [tinyobjloader][] | ![azurepipelines icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Tiny but powerful single file wavefront obj loader |
|
||||||
| [Dependency Injector][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Dependency injection framework for Python, uses Windows TravisCI |
|
| [Dependency Injector][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Dependency injection framework for Python, uses Windows TravisCI |
|
||||||
@@ -59,8 +59,9 @@ title: Working examples
|
|||||||
| [OpenTimelineIO][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Open Source API and interchange format for editorial timeline information. |
|
| [OpenTimelineIO][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Open Source API and interchange format for editorial timeline information. |
|
||||||
| [aioquic][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | QUIC and HTTP/3 implementation in Python |
|
| [aioquic][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | QUIC and HTTP/3 implementation in Python |
|
||||||
| [ruptures][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Extensive Cython + NumPy [pyproject.toml](https://github.com/deepcharles/ruptures/blob/master/pyproject.toml) example. |
|
| [ruptures][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Extensive Cython + NumPy [pyproject.toml](https://github.com/deepcharles/ruptures/blob/master/pyproject.toml) example. |
|
||||||
| [DeepForest][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | An Efficient, Scalable and Optimized Python Framework for Deep Forest (2021.2.1) |
|
| [envd][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | 🏕️ Development environment for AI/ML |
|
||||||
| [Psycopg 3][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A modern implementation of a PostgreSQL adapter for Python |
|
| [Psycopg 3][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A modern implementation of a PostgreSQL adapter for Python |
|
||||||
|
| [DeepForest][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | An Efficient, Scalable and Optimized Python Framework for Deep Forest (2021.2.1) |
|
||||||
| [google neuroglancer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | WebGL-based viewer for volumetric data |
|
| [google neuroglancer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | WebGL-based viewer for volumetric data |
|
||||||
| [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. |
|
| [Parselmouth][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python interface to the Praat software package, using pybind11, C++17 and CMake, with the core Praat static library built only once and shared between wheels. |
|
||||||
| [AutoPy][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. |
|
| [AutoPy][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. |
|
||||||
@@ -72,22 +73,23 @@ title: Working examples
|
|||||||
| [pybind11 cmake_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a CMake-based build system |
|
| [pybind11 cmake_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a CMake-based build system |
|
||||||
| [KDEpy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Kernel Density Estimation in Python |
|
| [KDEpy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Kernel Density Estimation in Python |
|
||||||
| [tgcalls][] | ![github icon][] | ![apple icon][] ![windows icon][] | Python `pybind11` binding to Telegram's WebRTC library with third party dependencies like `OpenSSL`, `MozJPEG`, `FFmpeg`, etc. |
|
| [tgcalls][] | ![github icon][] | ![apple icon][] ![windows icon][] | Python `pybind11` binding to Telegram's WebRTC library with third party dependencies like `OpenSSL`, `MozJPEG`, `FFmpeg`, etc. |
|
||||||
| [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 |
|
| [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 |
|
||||||
|
| [CTranslate2][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes libraries from the [Intel oneAPI toolkit](https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit.html) and CUDA kernels compiled for multiple GPU architectures. |
|
||||||
| [time-machine][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Time mocking library using only the CPython C API. |
|
| [time-machine][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Time mocking library using only the CPython C API. |
|
||||||
| [sourmash][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Quickly search, compare, and analyze genomic and metagenomic data sets. |
|
| [sourmash][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Quickly search, compare, and analyze genomic and metagenomic data sets. |
|
||||||
| [CTranslate2][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes libraries from the [Intel oneAPI toolkit](https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit.html) and CUDA kernels compiled for multiple GPU architectures. |
|
|
||||||
| [cyvcf2][] | ![github icon][] | ![apple icon][] ![linux icon][] | cython + htslib == fast VCF and BCF processing |
|
| [cyvcf2][] | ![github icon][] | ![apple icon][] ![linux icon][] | cython + htslib == fast VCF and BCF processing |
|
||||||
| [abess][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A fast best-subset selection library. It uses cibuildwheel to build a large project with C++ extensions. |
|
|
||||||
| [matrixprofile][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python 3 library making time series data mining tasks, utilizing matrix profile algorithms, accessible to everyone. |
|
| [matrixprofile][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python 3 library making time series data mining tasks, utilizing matrix profile algorithms, accessible to everyone. |
|
||||||
|
| [abess][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A fast best-subset selection library. It uses cibuildwheel to build a large project with C++ extensions. |
|
||||||
| [jq.py][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | Python bindings for jq |
|
| [jq.py][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | Python bindings for jq |
|
||||||
| [iminuit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Jupyter-friendly Python interface for C++ MINUIT2 |
|
| [iminuit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Jupyter-friendly Python interface for C++ MINUIT2 |
|
||||||
| [Tokenizer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast and customizable text tokenization library with BPE and SentencePiece support |
|
| [Tokenizer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast and customizable text tokenization library with BPE and SentencePiece support |
|
||||||
| [PyGLM][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Fast OpenGL Mathematics (GLM) for Python |
|
| [PyGLM][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Fast OpenGL Mathematics (GLM) for Python |
|
||||||
| [boost-histogram][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Supports full range of wheels, including PyPy and alternate archs. |
|
|
||||||
| [bx-python][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | A library that includes Cython extensions. |
|
| [bx-python][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | A library that includes Cython extensions. |
|
||||||
|
| [boost-histogram][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Supports full range of wheels, including PyPy and alternate archs. |
|
||||||
| [TgCrypto][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. |
|
| [TgCrypto][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. |
|
||||||
| [iDynTree][] | ![github icon][] | ![linux icon][] | Uses manylinux_2_24 |
|
| [iDynTree][] | ![github icon][] | ![linux icon][] | Uses manylinux_2_24 |
|
||||||
|
| [mosec][] | ![github icon][] | ![linux icon][] ![apple icon][] | A high-performance serving framework for ML models, offers dynamic batching and multi-stage pipeline to fully exploit your compute machine |
|
||||||
| [Python-WebRTC][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | a Python extension that provides bindings to WebRTC M92 |
|
| [Python-WebRTC][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | a Python extension that provides bindings to WebRTC M92 |
|
||||||
| [pybase64][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast Base64 encoding/decoding in Python |
|
| [pybase64][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast Base64 encoding/decoding in Python |
|
||||||
| [Arbor][] | ![github icon][] | ![apple icon][] ![linux icon][] | Arbor is a multi-compartment neuron simulation library; compatible with next-generation accelerators; best-practices applied to research software; focused on community-driven development. Includes a [small script](https://github.com/arbor-sim/arbor/blob/master/scripts/patchwheel.py) patching `rpath` in bundled libraries. |
|
| [Arbor][] | ![github icon][] | ![apple icon][] ![linux icon][] | Arbor is a multi-compartment neuron simulation library; compatible with next-generation accelerators; best-practices applied to research software; focused on community-driven development. Includes a [small script](https://github.com/arbor-sim/arbor/blob/master/scripts/patchwheel.py) patching `rpath` in bundled libraries. |
|
||||||
@@ -100,14 +102,15 @@ title: Working examples
|
|||||||
| [power-grid-model][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python/C++ library for distribution power system analysis |
|
| [power-grid-model][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python/C++ library for distribution power system analysis |
|
||||||
| [clang-format][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Scikit-build wrapper around LLVM's CMake, all platforms, generic wheels. |
|
| [clang-format][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Scikit-build wrapper around LLVM's CMake, all platforms, generic wheels. |
|
||||||
| [numpythia][] | ![github icon][] | ![apple icon][] ![linux icon][] | The interface between PYTHIA and NumPy |
|
| [numpythia][] | ![github icon][] | ![apple icon][] ![linux icon][] | The interface between PYTHIA and NumPy |
|
||||||
| [pyjet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The interface between FastJet and NumPy |
|
|
||||||
| [pybind11 scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | An example combining scikit-build and pybind11 |
|
| [pybind11 scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | An example combining scikit-build and pybind11 |
|
||||||
|
| [pyjet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The interface between FastJet and NumPy |
|
||||||
| [ninja][] | ![github icon][] ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Multitagged binary builds for all supported platforms, using cibw 2 config configuration. |
|
| [ninja][] | ![github icon][] ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Multitagged binary builds for all supported platforms, using cibw 2 config configuration. |
|
||||||
| [GSD][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Cython and NumPy project with 64-bit wheels. |
|
| [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 |
|
| [pyinstrument_cext][] | ![travisci icon][] ![appveyor icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A simple C extension, without external dependencies |
|
||||||
| [CorrectionLib][] | ![github icon][] | ![apple icon][] ![linux icon][] | Structured JSON powered correction library for HEP, designed for the CMS experiment at CERN. |
|
| [CorrectionLib][] | ![github icon][] | ![apple icon][] ![linux icon][] | Structured JSON powered correction library for HEP, designed for the CMS experiment at CERN. |
|
||||||
| [xmlstarlet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python 3.6+ CFFI bindings with true MSVC build. |
|
| [xmlstarlet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python 3.6+ CFFI bindings with true MSVC build. |
|
||||||
| [SiPM][] | ![github icon][] | ![apple icon][] ![linux icon][] | High performance library for SiPM detectors simulation using C++17, OpenMP and AVX2 intrinsics. |
|
| [SiPM][] | ![github icon][] | ![apple icon][] ![linux icon][] | High performance library for SiPM detectors simulation using C++17, OpenMP and AVX2 intrinsics. |
|
||||||
|
| [ril][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A python binding to Rust Imaging library using maturin and Pyo3, utilizes Github Action cache to improve speed. Builds abi3 wheels. |
|
||||||
|
|
||||||
[scikit-learn]: https://github.com/scikit-learn/scikit-learn
|
[scikit-learn]: https://github.com/scikit-learn/scikit-learn
|
||||||
[NumPy]: https://github.com/numpy/numpy
|
[NumPy]: https://github.com/numpy/numpy
|
||||||
@@ -128,11 +131,11 @@ title: Working examples
|
|||||||
[Apache Beam]: https://github.com/apache/beam
|
[Apache Beam]: https://github.com/apache/beam
|
||||||
[asyncpg]: https://github.com/MagicStack/asyncpg
|
[asyncpg]: https://github.com/MagicStack/asyncpg
|
||||||
[PyGame]: https://github.com/pygame/pygame
|
[PyGame]: https://github.com/pygame/pygame
|
||||||
[scikit-image]: https://github.com/scikit-image/scikit-image
|
|
||||||
[cmake]: https://github.com/scikit-build/cmake-python-distributions
|
[cmake]: https://github.com/scikit-build/cmake-python-distributions
|
||||||
|
[scikit-image]: https://github.com/scikit-image/scikit-image
|
||||||
[twisted-iocpsupport]: https://github.com/twisted/twisted-iocpsupport
|
[twisted-iocpsupport]: https://github.com/twisted/twisted-iocpsupport
|
||||||
[websockets]: https://github.com/aaugustin/websockets
|
|
||||||
[PyOxidizer]: https://github.com/indygreg/PyOxidizer
|
[PyOxidizer]: https://github.com/indygreg/PyOxidizer
|
||||||
|
[websockets]: https://github.com/aaugustin/websockets
|
||||||
[cvxpy]: https://github.com/cvxpy/cvxpy
|
[cvxpy]: https://github.com/cvxpy/cvxpy
|
||||||
[Triton]: https://github.com/openai/triton
|
[Triton]: https://github.com/openai/triton
|
||||||
[UltraJSON]: https://github.com/ultrajson/ultrajson
|
[UltraJSON]: https://github.com/ultrajson/ultrajson
|
||||||
@@ -140,8 +143,8 @@ title: Working examples
|
|||||||
[OpenSpiel]: https://github.com/deepmind/open_spiel
|
[OpenSpiel]: https://github.com/deepmind/open_spiel
|
||||||
[pyzmq]: https://github.com/zeromq/pyzmq
|
[pyzmq]: https://github.com/zeromq/pyzmq
|
||||||
[aiortc]: https://github.com/aiortc/aiortc
|
[aiortc]: https://github.com/aiortc/aiortc
|
||||||
[vispy]: https://github.com/vispy/vispy
|
|
||||||
[Implicit]: https://github.com/benfred/implicit
|
[Implicit]: https://github.com/benfred/implicit
|
||||||
|
[vispy]: https://github.com/vispy/vispy
|
||||||
[Confluent client for Kafka]: https://github.com/confluentinc/confluent-kafka-python
|
[Confluent client for Kafka]: https://github.com/confluentinc/confluent-kafka-python
|
||||||
[tinyobjloader]: https://github.com/tinyobjloader/tinyobjloader
|
[tinyobjloader]: https://github.com/tinyobjloader/tinyobjloader
|
||||||
[Dependency Injector]: https://github.com/ets-labs/python-dependency-injector
|
[Dependency Injector]: https://github.com/ets-labs/python-dependency-injector
|
||||||
@@ -160,8 +163,9 @@ title: Working examples
|
|||||||
[OpenTimelineIO]: https://github.com/PixarAnimationStudios/OpenTimelineIO
|
[OpenTimelineIO]: https://github.com/PixarAnimationStudios/OpenTimelineIO
|
||||||
[aioquic]: https://github.com/aiortc/aioquic
|
[aioquic]: https://github.com/aiortc/aioquic
|
||||||
[ruptures]: https://github.com/deepcharles/ruptures
|
[ruptures]: https://github.com/deepcharles/ruptures
|
||||||
[DeepForest]: https://github.com/LAMDA-NJU/Deep-Forest
|
[envd]: https://github.com/tensorchord/envd
|
||||||
[Psycopg 3]: https://github.com/psycopg/psycopg
|
[Psycopg 3]: https://github.com/psycopg/psycopg
|
||||||
|
[DeepForest]: https://github.com/LAMDA-NJU/Deep-Forest
|
||||||
[google neuroglancer]: https://github.com/google/neuroglancer
|
[google neuroglancer]: https://github.com/google/neuroglancer
|
||||||
[Parselmouth]: https://github.com/YannickJadoul/Parselmouth
|
[Parselmouth]: https://github.com/YannickJadoul/Parselmouth
|
||||||
[AutoPy]: https://github.com/autopilot-rs/autopy
|
[AutoPy]: https://github.com/autopilot-rs/autopy
|
||||||
@@ -173,22 +177,23 @@ title: Working examples
|
|||||||
[pybind11 cmake_example]: https://github.com/pybind/cmake_example
|
[pybind11 cmake_example]: https://github.com/pybind/cmake_example
|
||||||
[KDEpy]: https://github.com/tommyod/KDEpy
|
[KDEpy]: https://github.com/tommyod/KDEpy
|
||||||
[tgcalls]: https://github.com/MarshalX/tgcalls
|
[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
|
[pybind11 python_example]: https://github.com/pybind/python_example
|
||||||
|
[dd-trace-py]: https://github.com/DataDog/dd-trace-py
|
||||||
|
[CTranslate2]: https://github.com/OpenNMT/CTranslate2
|
||||||
[time-machine]: https://github.com/adamchainz/time-machine
|
[time-machine]: https://github.com/adamchainz/time-machine
|
||||||
[sourmash]: https://github.com/dib-lab/sourmash
|
[sourmash]: https://github.com/dib-lab/sourmash
|
||||||
[CTranslate2]: https://github.com/OpenNMT/CTranslate2
|
|
||||||
[cyvcf2]: https://github.com/brentp/cyvcf2
|
[cyvcf2]: https://github.com/brentp/cyvcf2
|
||||||
[abess]: https://github.com/abess-team/abess
|
|
||||||
[matrixprofile]: https://github.com/matrix-profile-foundation/matrixprofile
|
[matrixprofile]: https://github.com/matrix-profile-foundation/matrixprofile
|
||||||
|
[abess]: https://github.com/abess-team/abess
|
||||||
[jq.py]: https://github.com/mwilliamson/jq.py
|
[jq.py]: https://github.com/mwilliamson/jq.py
|
||||||
[iminuit]: https://github.com/scikit-hep/iminuit
|
[iminuit]: https://github.com/scikit-hep/iminuit
|
||||||
[Tokenizer]: https://github.com/OpenNMT/Tokenizer
|
[Tokenizer]: https://github.com/OpenNMT/Tokenizer
|
||||||
[PyGLM]: https://github.com/Zuzu-Typ/PyGLM
|
[PyGLM]: https://github.com/Zuzu-Typ/PyGLM
|
||||||
[boost-histogram]: https://github.com/scikit-hep/boost-histogram
|
|
||||||
[bx-python]: https://github.com/bxlab/bx-python
|
[bx-python]: https://github.com/bxlab/bx-python
|
||||||
|
[boost-histogram]: https://github.com/scikit-hep/boost-histogram
|
||||||
[TgCrypto]: https://github.com/pyrogram/tgcrypto
|
[TgCrypto]: https://github.com/pyrogram/tgcrypto
|
||||||
[iDynTree]: https://github.com/robotology/idyntree
|
[iDynTree]: https://github.com/robotology/idyntree
|
||||||
|
[mosec]: https://github.com/mosecorg/mosec
|
||||||
[Python-WebRTC]: https://github.com/MarshalX/python-webrtc
|
[Python-WebRTC]: https://github.com/MarshalX/python-webrtc
|
||||||
[pybase64]: https://github.com/mayeut/pybase64
|
[pybase64]: https://github.com/mayeut/pybase64
|
||||||
[Arbor]: https://github.com/arbor-sim/arbor
|
[Arbor]: https://github.com/arbor-sim/arbor
|
||||||
@@ -201,14 +206,15 @@ title: Working examples
|
|||||||
[power-grid-model]: https://github.com/alliander-opensource/power-grid-model
|
[power-grid-model]: https://github.com/alliander-opensource/power-grid-model
|
||||||
[clang-format]: https://github.com/ssciwr/clang-format-wheel
|
[clang-format]: https://github.com/ssciwr/clang-format-wheel
|
||||||
[numpythia]: https://github.com/scikit-hep/numpythia
|
[numpythia]: https://github.com/scikit-hep/numpythia
|
||||||
[pyjet]: https://github.com/scikit-hep/pyjet
|
|
||||||
[pybind11 scikit_build_example]: https://github.com/pybind/scikit_build_example
|
[pybind11 scikit_build_example]: https://github.com/pybind/scikit_build_example
|
||||||
|
[pyjet]: https://github.com/scikit-hep/pyjet
|
||||||
[ninja]: https://github.com/scikit-build/ninja-python-distributions
|
[ninja]: https://github.com/scikit-build/ninja-python-distributions
|
||||||
[GSD]: https://github.com/glotzerlab/gsd
|
[GSD]: https://github.com/glotzerlab/gsd
|
||||||
[pyinstrument_cext]: https://github.com/joerick/pyinstrument_cext
|
[pyinstrument_cext]: https://github.com/joerick/pyinstrument_cext
|
||||||
[CorrectionLib]: https://github.com/cms-nanoAOD/correctionlib
|
[CorrectionLib]: https://github.com/cms-nanoAOD/correctionlib
|
||||||
[xmlstarlet]: https://github.com/dimitern/xmlstarlet
|
[xmlstarlet]: https://github.com/dimitern/xmlstarlet
|
||||||
[SiPM]: https://github.com/EdoPro98/SimSiPM
|
[SiPM]: https://github.com/EdoPro98/SimSiPM
|
||||||
|
[ril]: https://github.com/Cryptex-github/ril-py
|
||||||
|
|
||||||
[appveyor icon]: data/readme_icons/appveyor.svg
|
[appveyor icon]: data/readme_icons/appveyor.svg
|
||||||
[github icon]: data/readme_icons/github.svg
|
[github icon]: data/readme_icons/github.svg
|
||||||
@@ -216,110 +222,114 @@ title: Working examples
|
|||||||
[circleci icon]: data/readme_icons/circleci.svg
|
[circleci icon]: data/readme_icons/circleci.svg
|
||||||
[gitlab icon]: data/readme_icons/gitlab.svg
|
[gitlab icon]: data/readme_icons/gitlab.svg
|
||||||
[travisci icon]: data/readme_icons/travisci.svg
|
[travisci icon]: data/readme_icons/travisci.svg
|
||||||
|
[cirrusci icon]: data/readme_icons/cirrusci.svg
|
||||||
[windows icon]: data/readme_icons/windows.svg
|
[windows icon]: data/readme_icons/windows.svg
|
||||||
[apple icon]: data/readme_icons/apple.svg
|
[apple icon]: data/readme_icons/apple.svg
|
||||||
[linux icon]: data/readme_icons/linux.svg
|
[linux icon]: data/readme_icons/linux.svg
|
||||||
|
|
||||||
<!-- scikit-learn: 51026, last pushed 0 days ago -->
|
<!-- scikit-learn: 51343, last pushed 0 days ago -->
|
||||||
<!-- NumPy: 21131, last pushed 0 days ago -->
|
<!-- NumPy: 21419, last pushed 0 days ago -->
|
||||||
<!-- Tornado: 20669, last pushed 9 days ago -->
|
<!-- Tornado: 20737, last pushed 5 days ago -->
|
||||||
<!-- pytorch-fairseq: 18851, last pushed 0 days ago -->
|
<!-- pytorch-fairseq: 19138, last pushed 2 days ago -->
|
||||||
<!-- Matplotlib: 15939, last pushed 0 days ago -->
|
<!-- Matplotlib: 16103, last pushed 0 days ago -->
|
||||||
<!-- NCNN: 15158, last pushed 0 days ago -->
|
<!-- NCNN: 15461, last pushed 1 days ago -->
|
||||||
<!-- Kivy: 14873, last pushed 0 days ago -->
|
<!-- Kivy: 15002, last pushed 0 days ago -->
|
||||||
<!-- Prophet: 14779, last pushed 4 days ago -->
|
<!-- Prophet: 14896, last pushed 3 days ago -->
|
||||||
<!-- MyPy: 13581, last pushed 0 days ago -->
|
<!-- MyPy: 13758, last pushed 0 days ago -->
|
||||||
<!-- pydantic: 10706, last pushed 0 days ago -->
|
<!-- pydantic: 11038, last pushed 3 days ago -->
|
||||||
<!-- MemRay: 8980, last pushed 0 days ago -->
|
<!-- MemRay: 9212, last pushed 2 days ago -->
|
||||||
<!-- uvloop: 8778, last pushed 3 days ago -->
|
<!-- uvloop: 8849, last pushed 0 days ago -->
|
||||||
<!-- psutil: 8593, last pushed 7 days ago -->
|
<!-- psutil: 8679, last pushed 3 days ago -->
|
||||||
<!-- vaex: 7216, last pushed 1 days ago -->
|
<!-- vaex: 7291, last pushed 4 days ago -->
|
||||||
<!-- Google Benchmark: 6724, last pushed 0 days ago -->
|
<!-- Google Benchmark: 6820, last pushed 0 days ago -->
|
||||||
<!-- duckdb: 5814, last pushed 0 days ago -->
|
<!-- duckdb: 6335, last pushed 0 days ago -->
|
||||||
<!-- Apache Beam: 5766, last pushed 0 days ago -->
|
<!-- Apache Beam: 5843, last pushed 0 days ago -->
|
||||||
<!-- asyncpg: 5591, last pushed 6 days ago -->
|
<!-- asyncpg: 5624, last pushed 3 days ago -->
|
||||||
<!-- PyGame: 5104, last pushed 0 days ago -->
|
<!-- PyGame: 5195, last pushed 0 days ago -->
|
||||||
<!-- scikit-image: 5010, last pushed 1 days ago -->
|
<!-- cmake: 5050, last pushed 0 days ago -->
|
||||||
<!-- cmake: 4975, last pushed 0 days ago -->
|
<!-- scikit-image: 5038, last pushed 0 days ago -->
|
||||||
<!-- twisted-iocpsupport: 4697, last pushed 1 days ago -->
|
<!-- twisted-iocpsupport: 4742, last pushed 0 days ago -->
|
||||||
<!-- websockets: 4103, last pushed 0 days ago -->
|
<!-- PyOxidizer: 4275, last pushed 5 days ago -->
|
||||||
<!-- PyOxidizer: 4064, last pushed 0 days ago -->
|
<!-- websockets: 4156, last pushed 0 days ago -->
|
||||||
<!-- cvxpy: 4038, last pushed 0 days ago -->
|
<!-- cvxpy: 4073, last pushed 0 days ago -->
|
||||||
<!-- Triton: 3860, last pushed 0 days ago -->
|
<!-- Triton: 3980, last pushed 0 days ago -->
|
||||||
<!-- UltraJSON: 3784, last pushed 1 days ago -->
|
<!-- UltraJSON: 3830, last pushed 34 days ago -->
|
||||||
<!-- River: 3517, last pushed 2 days ago -->
|
<!-- River: 3610, last pushed 0 days ago -->
|
||||||
<!-- OpenSpiel: 3275, last pushed 0 days ago -->
|
<!-- OpenSpiel: 3315, last pushed 1 days ago -->
|
||||||
<!-- pyzmq: 3138, last pushed 1 days ago -->
|
<!-- pyzmq: 3155, last pushed 0 days ago -->
|
||||||
<!-- aiortc: 3032, last pushed 46 days ago -->
|
<!-- aiortc: 3059, last pushed 5 days ago -->
|
||||||
<!-- vispy: 2913, last pushed 4 days ago -->
|
<!-- Implicit: 2939, last pushed 11 days ago -->
|
||||||
<!-- Implicit: 2906, last pushed 0 days ago -->
|
<!-- vispy: 2927, last pushed 1 days ago -->
|
||||||
<!-- Confluent client for Kafka: 2885, last pushed 6 days ago -->
|
<!-- Confluent client for Kafka: 2922, last pushed 0 days ago -->
|
||||||
<!-- tinyobjloader: 2606, last pushed 36 days ago -->
|
<!-- tinyobjloader: 2637, last pushed 69 days ago -->
|
||||||
<!-- Dependency Injector: 2277, last pushed 6 days ago -->
|
<!-- Dependency Injector: 2346, last pushed 3 days ago -->
|
||||||
<!-- coverage.py: 2136, last pushed 3 days ago -->
|
<!-- coverage.py: 2182, last pushed 4 days ago -->
|
||||||
<!-- PyCryptodome: 2085, last pushed 7 days ago -->
|
<!-- PyCryptodome: 2119, last pushed 10 days ago -->
|
||||||
<!-- PyYAML: 1897, last pushed 24 days ago -->
|
<!-- PyYAML: 1930, last pushed 15 days ago -->
|
||||||
<!-- numexpr: 1793, last pushed 21 days ago -->
|
<!-- numexpr: 1810, last pushed 6 days ago -->
|
||||||
<!-- h5py: 1762, last pushed 8 days ago -->
|
<!-- h5py: 1777, last pushed 5 days ago -->
|
||||||
<!-- Wrapt: 1716, last pushed 100 days ago -->
|
<!-- Wrapt: 1741, last pushed 18 days ago -->
|
||||||
<!-- PyAV: 1626, last pushed 15 days ago -->
|
<!-- PyAV: 1651, last pushed 13 days ago -->
|
||||||
<!-- SimpleJSON: 1507, last pushed 40 days ago -->
|
<!-- SimpleJSON: 1517, last pushed 73 days ago -->
|
||||||
<!-- pikepdf: 1449, last pushed 1 days ago -->
|
<!-- pikepdf: 1488, last pushed 0 days ago -->
|
||||||
<!-- OpenColorIO: 1351, last pushed 29 days ago -->
|
<!-- OpenColorIO: 1363, last pushed 1 days ago -->
|
||||||
<!-- Line Profiler: 1310, last pushed 18 days ago -->
|
<!-- Line Profiler: 1362, last pushed 0 days ago -->
|
||||||
<!-- PyTables: 1142, last pushed 113 days ago -->
|
<!-- PyTables: 1146, last pushed 5 days ago -->
|
||||||
<!-- OpenTimelineIO: 1083, last pushed 0 days ago -->
|
<!-- OpenTimelineIO: 1092, last pushed 0 days ago -->
|
||||||
<!-- aioquic: 1012, last pushed 23 days ago -->
|
<!-- aioquic: 1051, last pushed 3 days ago -->
|
||||||
<!-- ruptures: 1011, last pushed 34 days ago -->
|
<!-- ruptures: 1040, last pushed 18 days ago -->
|
||||||
<!-- DeepForest: 768, last pushed 88 days ago -->
|
<!-- envd: 877, last pushed 0 days ago -->
|
||||||
<!-- Psycopg 3: 750, last pushed 1 days ago -->
|
<!-- Psycopg 3: 781, last pushed 3 days ago -->
|
||||||
<!-- google neuroglancer: 744, last pushed 0 days ago -->
|
<!-- DeepForest: 775, last pushed 121 days ago -->
|
||||||
<!-- Parselmouth: 673, last pushed 31 days ago -->
|
<!-- google neuroglancer: 752, last pushed 3 days ago -->
|
||||||
<!-- AutoPy: 666, last pushed 228 days ago -->
|
<!-- Parselmouth: 687, last pushed 64 days ago -->
|
||||||
<!-- H3-py: 552, last pushed 0 days ago -->
|
<!-- AutoPy: 674, last pushed 261 days ago -->
|
||||||
<!-- Rtree: 497, last pushed 113 days ago -->
|
<!-- H3-py: 560, last pushed 14 days ago -->
|
||||||
<!-- markupsafe: 487, last pushed 8 days ago -->
|
<!-- Rtree: 502, last pushed 146 days ago -->
|
||||||
<!-- python-rapidjson: 456, last pushed 21 days ago -->
|
<!-- markupsafe: 494, last pushed 6 days ago -->
|
||||||
<!-- python-snappy: 443, last pushed 147 days ago -->
|
<!-- python-rapidjson: 457, last pushed 54 days ago -->
|
||||||
<!-- pybind11 cmake_example: 426, last pushed 12 days ago -->
|
<!-- python-snappy: 443, last pushed 180 days ago -->
|
||||||
<!-- KDEpy: 394, last pushed 181 days ago -->
|
<!-- pybind11 cmake_example: 438, last pushed 31 days ago -->
|
||||||
<!-- tgcalls: 382, last pushed 39 days ago -->
|
<!-- KDEpy: 402, last pushed 214 days ago -->
|
||||||
<!-- dd-trace-py: 350, last pushed 0 days ago -->
|
<!-- tgcalls: 388, last pushed 72 days ago -->
|
||||||
<!-- pybind11 python_example: 349, last pushed 9 days ago -->
|
<!-- pybind11 python_example: 360, last pushed 31 days ago -->
|
||||||
<!-- time-machine: 317, last pushed 1 days ago -->
|
<!-- dd-trace-py: 355, last pushed 0 days ago -->
|
||||||
<!-- sourmash: 317, last pushed 0 days ago -->
|
<!-- CTranslate2: 333, last pushed 0 days ago -->
|
||||||
<!-- CTranslate2: 315, last pushed 5 days ago -->
|
<!-- time-machine: 325, last pushed 0 days ago -->
|
||||||
<!-- cyvcf2: 300, last pushed 6 days ago -->
|
<!-- sourmash: 320, last pushed 4 days ago -->
|
||||||
<!-- abess: 275, last pushed 1 days ago -->
|
<!-- cyvcf2: 304, last pushed 28 days ago -->
|
||||||
<!-- matrixprofile: 275, last pushed 37 days ago -->
|
<!-- matrixprofile: 283, last pushed 70 days ago -->
|
||||||
<!-- jq.py: 223, last pushed 185 days ago -->
|
<!-- abess: 280, last pushed 1 days ago -->
|
||||||
<!-- iminuit: 209, last pushed 1 days ago -->
|
<!-- jq.py: 228, last pushed 0 days ago -->
|
||||||
<!-- Tokenizer: 187, last pushed 5 days ago -->
|
<!-- iminuit: 211, last pushed 17 days ago -->
|
||||||
<!-- PyGLM: 148, last pushed 134 days ago -->
|
<!-- Tokenizer: 187, last pushed 0 days ago -->
|
||||||
<!-- boost-histogram: 115, last pushed 1 days ago -->
|
<!-- PyGLM: 150, last pushed 167 days ago -->
|
||||||
<!-- bx-python: 114, last pushed 217 days ago -->
|
<!-- bx-python: 116, last pushed 15 days ago -->
|
||||||
<!-- TgCrypto: 110, last pushed 159 days ago -->
|
<!-- boost-histogram: 116, last pushed 6 days ago -->
|
||||||
<!-- iDynTree: 109, last pushed 3 days ago -->
|
<!-- TgCrypto: 110, last pushed 192 days ago -->
|
||||||
<!-- Python-WebRTC: 92, last pushed 152 days ago -->
|
<!-- iDynTree: 108, last pushed 0 days ago -->
|
||||||
<!-- pybase64: 85, last pushed 1 days ago -->
|
<!-- mosec: 105, last pushed 2 days ago -->
|
||||||
<!-- Arbor: 77, last pushed 0 days ago -->
|
<!-- Python-WebRTC: 93, last pushed 185 days ago -->
|
||||||
<!-- fathon: 65, last pushed 69 days ago -->
|
<!-- pybase64: 88, last pushed 6 days ago -->
|
||||||
<!-- etebase-py: 58, last pushed 34 days ago -->
|
<!-- Arbor: 78, last pushed 0 days ago -->
|
||||||
<!-- polaroid: 51, last pushed 90 days ago -->
|
<!-- fathon: 68, last pushed 102 days ago -->
|
||||||
<!-- cf-units: 49, last pushed 1 days ago -->
|
<!-- etebase-py: 58, last pushed 67 days ago -->
|
||||||
<!-- Imagecodecs (fork): 47, last pushed 1 days ago -->
|
<!-- polaroid: 53, last pushed 124 days ago -->
|
||||||
<!-- pillow-heif: 44, last pushed 0 days ago -->
|
<!-- cf-units: 49, last pushed 0 days ago -->
|
||||||
<!-- power-grid-model: 42, last pushed 1 days ago -->
|
<!-- Imagecodecs (fork): 48, last pushed 34 days ago -->
|
||||||
<!-- clang-format: 41, last pushed 8 days ago -->
|
<!-- pillow-heif: 47, last pushed 0 days ago -->
|
||||||
<!-- numpythia: 34, last pushed 7 days ago -->
|
<!-- power-grid-model: 46, last pushed 0 days ago -->
|
||||||
<!-- pyjet: 33, last pushed 7 days ago -->
|
<!-- clang-format: 43, last pushed 6 days ago -->
|
||||||
<!-- pybind11 scikit_build_example: 31, last pushed 9 days ago -->
|
<!-- numpythia: 34, last pushed 11 days ago -->
|
||||||
<!-- ninja: 24, last pushed 1 days ago -->
|
<!-- pybind11 scikit_build_example: 33, last pushed 31 days ago -->
|
||||||
<!-- GSD: 19, last pushed 9 days ago -->
|
<!-- pyjet: 32, last pushed 11 days ago -->
|
||||||
<!-- pyinstrument_cext: 10, last pushed 306 days ago -->
|
<!-- ninja: 25, last pushed 6 days ago -->
|
||||||
|
<!-- GSD: 19, last pushed 0 days ago -->
|
||||||
|
<!-- pyinstrument_cext: 10, last pushed 339 days ago -->
|
||||||
<!-- CorrectionLib: 10, last pushed 0 days ago -->
|
<!-- CorrectionLib: 10, last pushed 0 days ago -->
|
||||||
<!-- xmlstarlet: 9, last pushed 9 days ago -->
|
<!-- xmlstarlet: 9, last pushed 28 days ago -->
|
||||||
<!-- SiPM: 7, last pushed 70 days ago -->
|
<!-- SiPM: 7, last pushed 103 days ago -->
|
||||||
|
<!-- ril: 5, last pushed 0 days ago -->
|
||||||
|
|
||||||
<!-- END bin/projects.py -->
|
<!-- END bin/projects.py -->
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ stack: python 3.7
|
|||||||
init:
|
init:
|
||||||
- cmd: set PATH=C:\Python37;C:\Python37\Scripts;%PATH%
|
- cmd: set PATH=C:\Python37;C:\Python37\Scripts;%PATH%
|
||||||
|
|
||||||
install: python -m pip install cibuildwheel==2.9.0
|
install: python -m pip install cibuildwheel==2.10.0
|
||||||
|
|
||||||
build_script: python -m cibuildwheel --output-dir wheelhouse
|
build_script: python -m cibuildwheel --output-dir wheelhouse
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ jobs:
|
|||||||
- bash: |
|
- bash: |
|
||||||
set -o errexit
|
set -o errexit
|
||||||
python3 -m pip install --upgrade pip
|
python3 -m pip install --upgrade pip
|
||||||
pip3 install cibuildwheel==2.9.0
|
pip3 install cibuildwheel==2.10.0
|
||||||
displayName: Install dependencies
|
displayName: Install dependencies
|
||||||
- bash: cibuildwheel --output-dir wheelhouse .
|
- bash: cibuildwheel --output-dir wheelhouse .
|
||||||
displayName: Build wheels
|
displayName: Build wheels
|
||||||
@@ -20,7 +20,7 @@ jobs:
|
|||||||
- bash: |
|
- bash: |
|
||||||
set -o errexit
|
set -o errexit
|
||||||
python3 -m pip install --upgrade pip
|
python3 -m pip install --upgrade pip
|
||||||
python3 -m pip install cibuildwheel==2.9.0
|
python3 -m pip install cibuildwheel==2.10.0
|
||||||
displayName: Install dependencies
|
displayName: Install dependencies
|
||||||
- bash: cibuildwheel --output-dir wheelhouse .
|
- bash: cibuildwheel --output-dir wheelhouse .
|
||||||
displayName: Build wheels
|
displayName: Build wheels
|
||||||
@@ -34,7 +34,7 @@ jobs:
|
|||||||
- bash: |
|
- bash: |
|
||||||
set -o errexit
|
set -o errexit
|
||||||
python -m pip install --upgrade pip
|
python -m pip install --upgrade pip
|
||||||
pip install cibuildwheel==2.9.0
|
pip install cibuildwheel==2.10.0
|
||||||
displayName: Install dependencies
|
displayName: Install dependencies
|
||||||
- bash: cibuildwheel --output-dir wheelhouse .
|
- bash: cibuildwheel --output-dir wheelhouse .
|
||||||
displayName: Build wheels
|
displayName: Build wheels
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ jobs:
|
|||||||
- run:
|
- run:
|
||||||
name: Build the Linux wheels.
|
name: Build the Linux wheels.
|
||||||
command: |
|
command: |
|
||||||
pip3 install --user cibuildwheel==2.9.0
|
pip3 install --user cibuildwheel==2.10.0
|
||||||
cibuildwheel --output-dir wheelhouse
|
cibuildwheel --output-dir wheelhouse
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
path: wheelhouse/
|
path: wheelhouse/
|
||||||
@@ -25,7 +25,7 @@ jobs:
|
|||||||
- run:
|
- run:
|
||||||
name: Build the OS X wheels.
|
name: Build the OS X wheels.
|
||||||
command: |
|
command: |
|
||||||
pip3 install cibuildwheel==2.9.0
|
pip3 install cibuildwheel==2.10.0
|
||||||
cibuildwheel --output-dir wheelhouse
|
cibuildwheel --output-dir wheelhouse
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
path: wheelhouse/
|
path: wheelhouse/
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
build_and_store_wheels: &BUILD_AND_STORE_WHEELS
|
||||||
|
install_cibuildwheel_script:
|
||||||
|
- python -m pip install cibuildwheel==2.10.0
|
||||||
|
run_cibuildwheel_script:
|
||||||
|
- cibuildwheel
|
||||||
|
wheels_artifacts:
|
||||||
|
path: "wheelhouse/*"
|
||||||
|
|
||||||
|
|
||||||
|
macos_task:
|
||||||
|
name: Build macOS x86_64 and arm64 wheels.
|
||||||
|
macos_instance:
|
||||||
|
image: ghcr.io/cirruslabs/macos-monterey-xcode
|
||||||
|
|
||||||
|
env:
|
||||||
|
PATH: /opt/homebrew/opt/python@3.10/bin:$PATH
|
||||||
|
CIBW_ARCHS_MACOS: x86_64 arm64
|
||||||
|
install_pre_requirements_script:
|
||||||
|
- brew install python@3.10
|
||||||
|
- ln -s python3 /opt/homebrew/opt/python@3.10/bin/python
|
||||||
|
<<: *BUILD_AND_STORE_WHEELS
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
build_and_store_wheels: &BUILD_AND_STORE_WHEELS
|
||||||
|
install_cibuildwheel_script:
|
||||||
|
- python -m pip install cibuildwheel==2.10.0
|
||||||
|
run_cibuildwheel_script:
|
||||||
|
- cibuildwheel
|
||||||
|
wheels_artifacts:
|
||||||
|
path: "wheelhouse/*"
|
||||||
|
|
||||||
|
|
||||||
|
linux_x86_task:
|
||||||
|
name: Build Linux x86 wheels.
|
||||||
|
compute_engine_instance:
|
||||||
|
image_project: cirrus-images
|
||||||
|
image: family/docker-builder
|
||||||
|
platform: linux
|
||||||
|
cpu: 4
|
||||||
|
memory: 4G
|
||||||
|
|
||||||
|
install_pre_requirements_script:
|
||||||
|
- apt install -y python3-venv python-is-python3
|
||||||
|
<<: *BUILD_AND_STORE_WHEELS
|
||||||
|
|
||||||
|
linux_aarch64_task:
|
||||||
|
name: Build Linux aarch64 wheels.
|
||||||
|
compute_engine_instance:
|
||||||
|
image_project: cirrus-images
|
||||||
|
image: family/docker-builder-arm64
|
||||||
|
architecture: arm64
|
||||||
|
platform: linux
|
||||||
|
cpu: 4
|
||||||
|
memory: 4G
|
||||||
|
|
||||||
|
install_pre_requirements_script:
|
||||||
|
- apt install -y python3-venv python-is-python3
|
||||||
|
<<: *BUILD_AND_STORE_WHEELS
|
||||||
|
|
||||||
|
windows_x86_task:
|
||||||
|
name: Build Windows x86 wheels.
|
||||||
|
windows_container:
|
||||||
|
image: cirrusci/windowsservercore:visualstudio2022
|
||||||
|
cpu: 4
|
||||||
|
memory: 4G
|
||||||
|
|
||||||
|
install_pre_requirements_script:
|
||||||
|
- choco install -y --no-progress python3 --version 3.10.6
|
||||||
|
- refreshenv
|
||||||
|
- echo PATH=%PATH% >> "%CIRRUS_ENV%"
|
||||||
|
<<: *BUILD_AND_STORE_WHEELS
|
||||||
|
|
||||||
|
macos_arm64_task:
|
||||||
|
name: Build macOS arm64 wheels.
|
||||||
|
macos_instance:
|
||||||
|
image: ghcr.io/cirruslabs/macos-monterey-xcode
|
||||||
|
|
||||||
|
env:
|
||||||
|
PATH: /opt/homebrew/opt/python@3.10/bin:$PATH
|
||||||
|
install_pre_requirements_script:
|
||||||
|
- brew install python@3.10
|
||||||
|
- ln -s python3 /opt/homebrew/opt/python@3.10/bin/python
|
||||||
|
<<: *BUILD_AND_STORE_WHEELS
|
||||||
@@ -10,7 +10,7 @@ jobs:
|
|||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Build wheels
|
- name: Build wheels
|
||||||
uses: pypa/cibuildwheel@v2.9.0
|
uses: pypa/cibuildwheel@v2.10.0
|
||||||
env:
|
env:
|
||||||
CIBW_ARCHS_MACOS: x86_64 arm64
|
CIBW_ARCHS_MACOS: x86_64 arm64
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ jobs:
|
|||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Build wheels
|
- name: Build wheels
|
||||||
uses: pypa/cibuildwheel@v2.9.0
|
uses: pypa/cibuildwheel@v2.10.0
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ jobs:
|
|||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Build wheels
|
- name: Build wheels
|
||||||
uses: pypa/cibuildwheel@v2.9.0
|
uses: pypa/cibuildwheel@v2.10.0
|
||||||
# env:
|
# env:
|
||||||
# CIBW_SOME_OPTION: value
|
# CIBW_SOME_OPTION: value
|
||||||
# ...
|
# ...
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ jobs:
|
|||||||
platforms: all
|
platforms: all
|
||||||
|
|
||||||
- name: Build wheels
|
- name: Build wheels
|
||||||
uses: pypa/cibuildwheel@v2.9.0
|
uses: pypa/cibuildwheel@v2.10.0
|
||||||
env:
|
env:
|
||||||
# configure cibuildwheel to build native archs ('auto'), and some
|
# configure cibuildwheel to build native archs ('auto'), and some
|
||||||
# emulated ones
|
# emulated ones
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ linux:
|
|||||||
DOCKER_TLS_CERTDIR: ""
|
DOCKER_TLS_CERTDIR: ""
|
||||||
script:
|
script:
|
||||||
- curl -sSL https://get.docker.com/ | sh
|
- curl -sSL https://get.docker.com/ | sh
|
||||||
- python -m pip install cibuildwheel==2.9.0
|
- python -m pip install cibuildwheel==2.10.0
|
||||||
- cibuildwheel --output-dir wheelhouse
|
- cibuildwheel --output-dir wheelhouse
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ jobs:
|
|||||||
- ln -s /c/Python38/python.exe /c/Python38/python3.exe
|
- ln -s /c/Python38/python.exe /c/Python38/python3.exe
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- python3 -m pip install cibuildwheel==2.9.0
|
- python3 -m pip install cibuildwheel==2.10.0
|
||||||
|
|
||||||
script:
|
script:
|
||||||
# build the wheels, put them into './dist'
|
# build the wheels, put them into './dist'
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ jobs:
|
|||||||
- ln -s /c/Python38/python.exe /c/Python38/python3.exe
|
- ln -s /c/Python38/python.exe /c/Python38/python3.exe
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- python3 -m pip install cibuildwheel==2.9.0
|
- python3 -m pip install cibuildwheel==2.10.0
|
||||||
|
|
||||||
script:
|
script:
|
||||||
# build the wheels, put them into './wheelhouse'
|
# build the wheels, put them into './wheelhouse'
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ jobs:
|
|||||||
- stage: deploy
|
- stage: deploy
|
||||||
name: Build and deploy Linux wheels
|
name: Build and deploy Linux wheels
|
||||||
services: docker
|
services: docker
|
||||||
install: python3 -m pip install cibuildwheel==2.9.0 twine
|
install: python3 -m pip install cibuildwheel==2.10.0 twine
|
||||||
script: python3 -m cibuildwheel --output-dir wheelhouse
|
script: python3 -m cibuildwheel --output-dir wheelhouse
|
||||||
after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl
|
after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl
|
||||||
# Deploy on windows
|
# Deploy on windows
|
||||||
@@ -62,7 +62,7 @@ jobs:
|
|||||||
name: Build and deploy Windows wheels
|
name: Build and deploy Windows wheels
|
||||||
os: windows
|
os: windows
|
||||||
language: shell
|
language: shell
|
||||||
install: python3 -m pip install cibuildwheel==2.9.0 twine
|
install: python3 -m pip install cibuildwheel==2.10.0 twine
|
||||||
script: python3 -m cibuildwheel --output-dir wheelhouse
|
script: python3 -m cibuildwheel --output-dir wheelhouse
|
||||||
after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl
|
after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,9 @@ theme:
|
|||||||
highlightjs: true
|
highlightjs: true
|
||||||
hljs_languages:
|
hljs_languages:
|
||||||
- yaml
|
- yaml
|
||||||
|
collapse_navigation: false
|
||||||
|
navigation_depth: 3
|
||||||
|
custom_dir: docs/theme_overrides
|
||||||
repo_url: https://github.com/pypa/cibuildwheel
|
repo_url: https://github.com/pypa/cibuildwheel
|
||||||
edit_uri: edit/main/docs/
|
edit_uri: edit/main/docs/
|
||||||
|
|
||||||
@@ -14,6 +17,7 @@ extra_css:
|
|||||||
extra_javascript:
|
extra_javascript:
|
||||||
- extra.js
|
- extra.js
|
||||||
|
|
||||||
|
|
||||||
nav:
|
nav:
|
||||||
- Home: index.md
|
- Home: index.md
|
||||||
- setup.md
|
- setup.md
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[metadata]
|
[metadata]
|
||||||
name = cibuildwheel
|
name = cibuildwheel
|
||||||
version = 2.9.0
|
version = 2.10.0
|
||||||
description = Build Python wheels on CI with minimal configuration.
|
description = Build Python wheels on CI with minimal configuration.
|
||||||
long_description = file: README.md
|
long_description = file: README.md
|
||||||
long_description_content_type = text/markdown
|
long_description_content_type = text/markdown
|
||||||
|
|||||||
@@ -5,11 +5,10 @@ from setuptools import setup
|
|||||||
extras = {
|
extras = {
|
||||||
"docs": [
|
"docs": [
|
||||||
"mkdocs-include-markdown-plugin==2.8.0",
|
"mkdocs-include-markdown-plugin==2.8.0",
|
||||||
"mkdocs==1.0.4", # Doesn't support Python 3.10+
|
"mkdocs==1.3.1",
|
||||||
"jinja2==3.0.3",
|
"jinja2>=3.1.2",
|
||||||
"pymdown-extensions",
|
"pymdown-extensions",
|
||||||
"mkdocs-macros-plugin",
|
"mkdocs-macros-plugin",
|
||||||
"markdown<3.4", # Breaks mkdocs 1.0.4
|
|
||||||
],
|
],
|
||||||
"test": [
|
"test": [
|
||||||
"jinja2",
|
"jinja2",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import platform
|
||||||
import re
|
import re
|
||||||
import textwrap
|
import textwrap
|
||||||
|
|
||||||
@@ -60,6 +61,8 @@ def test_pinned_versions(tmp_path, python_version, build_frontend_env):
|
|||||||
build_environment = {}
|
build_environment = {}
|
||||||
|
|
||||||
if python_version == "3.6":
|
if python_version == "3.6":
|
||||||
|
if utils.platform == "macos" and platform.machine() == "arm64":
|
||||||
|
pytest.skip("macOS arm64 does not support Python 3.6")
|
||||||
constraint_filename = "constraints-python36.txt"
|
constraint_filename = "constraints-python36.txt"
|
||||||
build_pattern = "[cp]p36-*"
|
build_pattern = "[cp]p36-*"
|
||||||
elif python_version == "3.7":
|
elif python_version == "3.7":
|
||||||
@@ -120,7 +123,7 @@ def test_dependency_constraints_file(tmp_path, build_frontend_env):
|
|||||||
tool_versions = {
|
tool_versions = {
|
||||||
"pip": "20.0.2",
|
"pip": "20.0.2",
|
||||||
"setuptools": "53.0.0",
|
"setuptools": "53.0.0",
|
||||||
"wheel": "0.34.2",
|
"wheel": "0.36.2",
|
||||||
"virtualenv": "20.11.2",
|
"virtualenv": "20.11.2",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -59,8 +59,6 @@ def test(manylinux_image, tmp_path):
|
|||||||
elif platform.machine() not in ["x86_64", "i686"]:
|
elif platform.machine() not in ["x86_64", "i686"]:
|
||||||
if manylinux_image in ["manylinux1", "manylinux2010"]:
|
if manylinux_image in ["manylinux1", "manylinux2010"]:
|
||||||
pytest.skip("manylinux1 and 2010 doesn't exist for non-x86 architectures")
|
pytest.skip("manylinux1 and 2010 doesn't exist for non-x86 architectures")
|
||||||
elif manylinux_image == "manylinux_2_28" and platform.machine() == "s390x":
|
|
||||||
pytest.skip("manylinux_2_28 doesn't exist for s390x architecture")
|
|
||||||
elif manylinux_image == "manylinux_2_28" and platform.machine() == "i686":
|
elif manylinux_image == "manylinux_2_28" and platform.machine() == "i686":
|
||||||
pytest.skip("manylinux_2_28 doesn't exist for i686 architecture")
|
pytest.skip("manylinux_2_28 doesn't exist for i686 architecture")
|
||||||
|
|
||||||
|
|||||||
@@ -51,13 +51,13 @@ def test(capfd, tmp_path):
|
|||||||
add_env={
|
add_env={
|
||||||
"CIBW_BEFORE_BUILD": "python {project}/bin/before_build.py",
|
"CIBW_BEFORE_BUILD": "python {project}/bin/before_build.py",
|
||||||
"CIBW_TEST_COMMAND": "python {package}/test/run_tests.py",
|
"CIBW_TEST_COMMAND": "python {package}/test/run_tests.py",
|
||||||
# this shouldn't depend on the version of python, so build only CPython 3.6
|
# this shouldn't depend on the version of python, so build only CPython 3.10
|
||||||
"CIBW_BUILD": "cp36-*",
|
"CIBW_BUILD": "cp310-*",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
# check that the expected wheels are produced
|
# check that the expected wheels are produced
|
||||||
expected_wheels = [w for w in utils.expected_wheels("spam", "0.1.0") if "cp36" in w]
|
expected_wheels = [w for w in utils.expected_wheels("spam", "0.1.0") if "cp310" in w]
|
||||||
assert set(actual_wheels) == set(expected_wheels)
|
assert set(actual_wheels) == set(expected_wheels)
|
||||||
|
|
||||||
captured = capfd.readouterr()
|
captured = capfd.readouterr()
|
||||||
|
|||||||
@@ -142,6 +142,11 @@ def test_failing_test(tmp_path):
|
|||||||
# problems with this, so let's check that.
|
# problems with this, so let's check that.
|
||||||
"CIBW_MANYLINUX_I686_IMAGE": "manylinux1",
|
"CIBW_MANYLINUX_I686_IMAGE": "manylinux1",
|
||||||
"CIBW_MANYLINUX_X86_64_IMAGE": "manylinux1",
|
"CIBW_MANYLINUX_X86_64_IMAGE": "manylinux1",
|
||||||
|
# CPython 3.8 when running on macOS arm64 is unusual. The build
|
||||||
|
# always runs in x86_64, so the arm64 tests are not run. See
|
||||||
|
# #1169 for reasons why. That means the build succeeds, which
|
||||||
|
# we don't want. So we skip that build.
|
||||||
|
"CIBW_SKIP": "cp38-macosx_arm64",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,13 @@ from cibuildwheel import linux, macos, util, windows
|
|||||||
|
|
||||||
|
|
||||||
class ArgsInterceptor:
|
class ArgsInterceptor:
|
||||||
|
def __init__(self):
|
||||||
|
self.call_count = 0
|
||||||
|
self.args = None
|
||||||
|
self.kwargs = None
|
||||||
|
|
||||||
def __call__(self, *args, **kwargs):
|
def __call__(self, *args, **kwargs):
|
||||||
|
self.call_count += 1
|
||||||
self.args = args
|
self.args = args
|
||||||
self.kwargs = kwargs
|
self.kwargs = kwargs
|
||||||
|
|
||||||
@@ -75,16 +81,14 @@ def platform(request, monkeypatch):
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def intercepted_build_args(platform, monkeypatch):
|
def intercepted_build_args(monkeypatch):
|
||||||
intercepted = ArgsInterceptor()
|
intercepted = ArgsInterceptor()
|
||||||
|
|
||||||
if platform == "linux":
|
monkeypatch.setattr(linux, "build", intercepted)
|
||||||
monkeypatch.setattr(linux, "build", intercepted)
|
monkeypatch.setattr(macos, "build", intercepted)
|
||||||
elif platform == "macos":
|
monkeypatch.setattr(windows, "build", intercepted)
|
||||||
monkeypatch.setattr(macos, "build", intercepted)
|
|
||||||
elif platform == "windows":
|
|
||||||
monkeypatch.setattr(windows, "build", intercepted)
|
|
||||||
else:
|
|
||||||
raise ValueError(f"unknown platform value: {platform}")
|
|
||||||
|
|
||||||
return intercepted
|
yield intercepted
|
||||||
|
|
||||||
|
# check that intercepted_build_args only ever had one set of args
|
||||||
|
assert intercepted.call_count <= 1
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ else:
|
|||||||
from cibuildwheel.__main__ import main
|
from cibuildwheel.__main__ import main
|
||||||
from cibuildwheel.environment import ParsedEnvironment
|
from cibuildwheel.environment import ParsedEnvironment
|
||||||
from cibuildwheel.options import BuildOptions, _get_pinned_container_images
|
from cibuildwheel.options import BuildOptions, _get_pinned_container_images
|
||||||
from cibuildwheel.util import BuildSelector, resources_dir
|
from cibuildwheel.util import BuildSelector, resources_dir, split_config_settings
|
||||||
|
|
||||||
# CIBW_PLATFORM is tested in main_platform_test.py
|
# CIBW_PLATFORM is tested in main_platform_test.py
|
||||||
|
|
||||||
@@ -263,6 +263,27 @@ def test_build_verbosity(
|
|||||||
assert build_options.build_verbosity == expected_verbosity
|
assert build_options.build_verbosity == expected_verbosity
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("platform_specific", [False, True])
|
||||||
|
def test_config_settings(platform_specific, platform, intercepted_build_args, monkeypatch):
|
||||||
|
config_settings = 'setting=value setting=value2 other="something else"'
|
||||||
|
if platform_specific:
|
||||||
|
monkeypatch.setenv("CIBW_CONFIG_SETTINGS_" + platform.upper(), config_settings)
|
||||||
|
monkeypatch.setenv("CIBW_CONFIG_SETTIGNS", "a=b")
|
||||||
|
else:
|
||||||
|
monkeypatch.setenv("CIBW_CONFIG_SETTINGS", config_settings)
|
||||||
|
|
||||||
|
main()
|
||||||
|
build_options = intercepted_build_args.args[0].build_options(identifier=None)
|
||||||
|
|
||||||
|
assert build_options.config_settings == config_settings
|
||||||
|
|
||||||
|
assert split_config_settings(config_settings) == [
|
||||||
|
"--config-setting=setting=value",
|
||||||
|
"--config-setting=setting=value2",
|
||||||
|
"--config-setting=other=something else",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"selector",
|
"selector",
|
||||||
[
|
[
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ def test_unknown_platform_non_ci(monkeypatch, capsys):
|
|||||||
monkeypatch.delenv("GITHUB_ACTIONS", raising=False)
|
monkeypatch.delenv("GITHUB_ACTIONS", raising=False)
|
||||||
monkeypatch.delenv("GITLAB_CI", raising=False)
|
monkeypatch.delenv("GITLAB_CI", raising=False)
|
||||||
monkeypatch.delenv("CIRCLECI", raising=False)
|
monkeypatch.delenv("CIRCLECI", raising=False)
|
||||||
|
monkeypatch.delenv("CIRRUS_CI", raising=False)
|
||||||
monkeypatch.delenv("CIBW_PLATFORM", raising=False)
|
monkeypatch.delenv("CIBW_PLATFORM", raising=False)
|
||||||
|
|
||||||
with pytest.raises(SystemExit) as exit:
|
with pytest.raises(SystemExit) as exit:
|
||||||
@@ -191,3 +192,73 @@ def test_archs_platform_all(platform, intercepted_build_args, monkeypatch):
|
|||||||
Architecture.arm64,
|
Architecture.arm64,
|
||||||
Architecture.universal2,
|
Architecture.universal2,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"only,plat",
|
||||||
|
(
|
||||||
|
("cp311-manylinux_x86_64", "linux"),
|
||||||
|
("cp310-win_amd64", "windows"),
|
||||||
|
("cp311-macosx_x86_64", "macos"),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
def test_only_argument(intercepted_build_args, monkeypatch, only, plat):
|
||||||
|
monkeypatch.setenv("CIBW_BUILD", "unused")
|
||||||
|
monkeypatch.setenv("CIBW_SKIP", "unused")
|
||||||
|
monkeypatch.setattr(sys, "argv", sys.argv + ["--only", only])
|
||||||
|
|
||||||
|
main()
|
||||||
|
|
||||||
|
options = intercepted_build_args.args[0]
|
||||||
|
assert options.globals.build_selector.build_config == only
|
||||||
|
assert options.globals.build_selector.skip_config == ""
|
||||||
|
assert options.platform == plat
|
||||||
|
assert options.globals.architectures == Architecture.all_archs(plat)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("only", ("cp311-manylxinux_x86_64", "some_linux_thing"))
|
||||||
|
def test_only_failed(monkeypatch, only):
|
||||||
|
monkeypatch.setattr(sys, "argv", sys.argv + ["--only", only])
|
||||||
|
|
||||||
|
with pytest.raises(SystemExit):
|
||||||
|
main()
|
||||||
|
|
||||||
|
|
||||||
|
def test_only_no_platform(monkeypatch):
|
||||||
|
monkeypatch.setattr(
|
||||||
|
sys, "argv", sys.argv + ["--only", "cp311-manylinux_x86_64", "--platform", "macos"]
|
||||||
|
)
|
||||||
|
|
||||||
|
with pytest.raises(SystemExit):
|
||||||
|
main()
|
||||||
|
|
||||||
|
|
||||||
|
def test_only_no_archs(monkeypatch):
|
||||||
|
monkeypatch.setattr(
|
||||||
|
sys, "argv", sys.argv + ["--only", "cp311-manylinux_x86_64", "--archs", "x86_64"]
|
||||||
|
)
|
||||||
|
|
||||||
|
with pytest.raises(SystemExit):
|
||||||
|
main()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"envvar_name,envvar_value",
|
||||||
|
(
|
||||||
|
("CIBW_BUILD", "cp310-*"),
|
||||||
|
("CIBW_SKIP", "cp311-*"),
|
||||||
|
("CIBW_ARCHS", "auto32"),
|
||||||
|
("CIBW_PLATFORM", "macos"),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
def test_only_overrides_env_vars(monkeypatch, intercepted_build_args, envvar_name, envvar_value):
|
||||||
|
monkeypatch.setattr(sys, "argv", sys.argv + ["--only", "cp311-manylinux_x86_64"])
|
||||||
|
monkeypatch.setenv(envvar_name, envvar_value)
|
||||||
|
|
||||||
|
main()
|
||||||
|
|
||||||
|
options = intercepted_build_args.args[0]
|
||||||
|
assert options.globals.build_selector.build_config == "cp311-manylinux_x86_64"
|
||||||
|
assert options.globals.build_selector.skip_config == ""
|
||||||
|
assert options.platform == "linux"
|
||||||
|
assert options.globals.architectures == Architecture.all_archs("linux")
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import platform as platform_module
|
import platform as platform_module
|
||||||
|
import textwrap
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
@@ -58,7 +59,7 @@ test_command: 'pyproject'
|
|||||||
|
|
||||||
default_build_options = options.build_options(identifier=None)
|
default_build_options = options.build_options(identifier=None)
|
||||||
|
|
||||||
assert default_build_options.environment == parse_environment('FOO="BAR"')
|
assert default_build_options.environment == parse_environment("FOO=BAR")
|
||||||
|
|
||||||
all_pinned_container_images = _get_pinned_container_images()
|
all_pinned_container_images = _get_pinned_container_images()
|
||||||
pinned_x86_64_container_image = all_pinned_container_images["x86_64"]
|
pinned_x86_64_container_image = all_pinned_container_images["x86_64"]
|
||||||
@@ -116,3 +117,32 @@ def test_passthrough_evil(tmp_path, monkeypatch, env_var_value):
|
|||||||
monkeypatch.setenv("ENV_VAR", env_var_value)
|
monkeypatch.setenv("ENV_VAR", env_var_value)
|
||||||
parsed_environment = options.build_options(identifier=None).environment
|
parsed_environment = options.build_options(identifier=None).environment
|
||||||
assert parsed_environment.as_dictionary(prev_environment={}) == {"ENV_VAR": env_var_value}
|
assert parsed_environment.as_dictionary(prev_environment={}) == {"ENV_VAR": env_var_value}
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"env_var_value",
|
||||||
|
[
|
||||||
|
"normal value",
|
||||||
|
'"value wrapped in quotes"',
|
||||||
|
'an unclosed double-quote: "',
|
||||||
|
"string\nwith\ncarriage\nreturns\n",
|
||||||
|
"a trailing backslash \\",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_toml_environment_evil(tmp_path, monkeypatch, env_var_value):
|
||||||
|
args = get_default_command_line_arguments()
|
||||||
|
args.package_dir = tmp_path
|
||||||
|
|
||||||
|
with tmp_path.joinpath("pyproject.toml").open("w") as f:
|
||||||
|
f.write(
|
||||||
|
textwrap.dedent(
|
||||||
|
f"""\
|
||||||
|
[tool.cibuildwheel.environment]
|
||||||
|
EXAMPLE='''{env_var_value}'''
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
options = Options(platform="linux", command_line_arguments=args)
|
||||||
|
parsed_environment = options.build_options(identifier=None).environment
|
||||||
|
assert parsed_environment.as_dictionary(prev_environment={}) == {"EXAMPLE": env_var_value}
|
||||||
|
|||||||
@@ -331,3 +331,38 @@ test-command = "pyproject-override"
|
|||||||
|
|
||||||
with pytest.raises(ConfigOptionError):
|
with pytest.raises(ConfigOptionError):
|
||||||
OptionsReader(config_file_path=pyproject_toml, platform=platform)
|
OptionsReader(config_file_path=pyproject_toml, platform=platform)
|
||||||
|
|
||||||
|
|
||||||
|
def test_config_settings(tmp_path):
|
||||||
|
pyproject_toml: Path = tmp_path / "pyproject.toml"
|
||||||
|
pyproject_toml.write_text(
|
||||||
|
"""\
|
||||||
|
[tool.cibuildwheel.config-settings]
|
||||||
|
example = "one"
|
||||||
|
other = ["two", "three"]
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
options_reader = OptionsReader(config_file_path=pyproject_toml, platform="linux")
|
||||||
|
assert (
|
||||||
|
options_reader.get("config-settings", table={"item": '{k}="{v}"', "sep": " "})
|
||||||
|
== 'example="one" other="two" other="three"'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_pip_config_settings(tmp_path):
|
||||||
|
pyproject_toml: Path = tmp_path / "pyproject.toml"
|
||||||
|
pyproject_toml.write_text(
|
||||||
|
"""\
|
||||||
|
[tool.cibuildwheel.config-settings]
|
||||||
|
--build-option="--use-mypyc"
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
options_reader = OptionsReader(config_file_path=pyproject_toml, platform="linux")
|
||||||
|
assert (
|
||||||
|
options_reader.get(
|
||||||
|
"config-settings", table={"item": "--config-settings='{k}=\"{v}\"'", "sep": " "}
|
||||||
|
)
|
||||||
|
== "--config-settings='--build-option=\"--use-mypyc\"'"
|
||||||
|
)
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ def get_default_command_line_arguments() -> CommandLineArguments:
|
|||||||
platform="auto",
|
platform="auto",
|
||||||
allow_empty=False,
|
allow_empty=False,
|
||||||
archs=None,
|
archs=None,
|
||||||
|
only=None,
|
||||||
config_file="",
|
config_file="",
|
||||||
output_dir=Path("wheelhouse"),
|
output_dir=Path("wheelhouse"),
|
||||||
package_dir=Path("."),
|
package_dir=Path("."),
|
||||||
|
|||||||
Reference in New Issue
Block a user