diff --git a/cibuildwheel/resources/constraints-python310.txt b/cibuildwheel/resources/constraints-python310.txt index ec47c279..7cb24cf7 100644 --- a/cibuildwheel/resources/constraints-python310.txt +++ b/cibuildwheel/resources/constraints-python310.txt @@ -24,5 +24,5 @@ wheel==0.37.1 # The following packages are considered to be unsafe in a requirements file: pip==22.2.2 # via -r cibuildwheel/resources/constraints.in -setuptools==65.3.0 +setuptools==65.4.1 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python311.txt b/cibuildwheel/resources/constraints-python311.txt index 748a80a6..e2adb501 100644 --- a/cibuildwheel/resources/constraints-python311.txt +++ b/cibuildwheel/resources/constraints-python311.txt @@ -24,5 +24,5 @@ wheel==0.37.1 # The following packages are considered to be unsafe in a requirements file: pip==22.2.2 # via -r cibuildwheel/resources/constraints.in -setuptools==65.3.0 +setuptools==65.4.1 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python37.txt b/cibuildwheel/resources/constraints-python37.txt index 076653a1..fb965abb 100644 --- a/cibuildwheel/resources/constraints-python37.txt +++ b/cibuildwheel/resources/constraints-python37.txt @@ -10,7 +10,7 @@ distlib==0.3.6 # via virtualenv filelock==3.8.0 # via virtualenv -importlib-metadata==4.12.0 +importlib-metadata==5.0.0 # via virtualenv platformdirs==2.5.2 # via virtualenv @@ -30,5 +30,5 @@ zipp==3.8.1 # The following packages are considered to be unsafe in a requirements file: pip==22.2.2 # via -r cibuildwheel/resources/constraints.in -setuptools==65.3.0 +setuptools==65.4.1 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python38.txt b/cibuildwheel/resources/constraints-python38.txt index 242f07d4..0812087d 100644 --- a/cibuildwheel/resources/constraints-python38.txt +++ b/cibuildwheel/resources/constraints-python38.txt @@ -24,5 +24,5 @@ wheel==0.37.1 # The following packages are considered to be unsafe in a requirements file: pip==22.2.2 # via -r cibuildwheel/resources/constraints.in -setuptools==65.3.0 +setuptools==65.4.1 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python39.txt b/cibuildwheel/resources/constraints-python39.txt index 160fef75..f9e07e1e 100644 --- a/cibuildwheel/resources/constraints-python39.txt +++ b/cibuildwheel/resources/constraints-python39.txt @@ -24,5 +24,5 @@ wheel==0.37.1 # The following packages are considered to be unsafe in a requirements file: pip==22.2.2 # via -r cibuildwheel/resources/constraints.in -setuptools==65.3.0 +setuptools==65.4.1 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints.txt b/cibuildwheel/resources/constraints.txt index 748a80a6..e2adb501 100644 --- a/cibuildwheel/resources/constraints.txt +++ b/cibuildwheel/resources/constraints.txt @@ -24,5 +24,5 @@ wheel==0.37.1 # The following packages are considered to be unsafe in a requirements file: pip==22.2.2 # via -r cibuildwheel/resources/constraints.in -setuptools==65.3.0 +setuptools==65.4.1 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/pinned_docker_images.cfg b/cibuildwheel/resources/pinned_docker_images.cfg index 486aae09..8b2d4c31 100644 --- a/cibuildwheel/resources/pinned_docker_images.cfg +++ b/cibuildwheel/resources/pinned_docker_images.cfg @@ -1,49 +1,49 @@ [x86_64] -manylinux1 = quay.io/pypa/manylinux1_x86_64:2022-09-18-e2e56b7 +manylinux1 = quay.io/pypa/manylinux1_x86_64:2022-10-02-8083778 manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2022-09-18-2b8b451 -manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-09-18-2b8b451 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2022-09-18-2b8b451 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2022-09-18-2b8b451 +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2022-10-02-69a0972 +manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-10-02-69a0972 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2022-10-02-69a0972 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2022-10-02-69a0972 [i686] -manylinux1 = quay.io/pypa/manylinux1_i686:2022-09-18-e2e56b7 +manylinux1 = quay.io/pypa/manylinux1_i686:2022-10-02-8083778 manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2022-09-18-2b8b451 -manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-09-18-2b8b451 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2022-09-18-2b8b451 +manylinux2014 = quay.io/pypa/manylinux2014_i686:2022-10-02-69a0972 +manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-10-02-69a0972 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2022-10-02-69a0972 [pypy_x86_64] manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2022-09-18-2b8b451 -manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-09-18-2b8b451 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2022-09-18-2b8b451 +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2022-10-02-69a0972 +manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-10-02-69a0972 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2022-10-02-69a0972 [pypy_i686] manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2022-09-18-2b8b451 -manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-09-18-2b8b451 +manylinux2014 = quay.io/pypa/manylinux2014_i686:2022-10-02-69a0972 +manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-10-02-69a0972 [aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2022-09-18-2b8b451 -manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-09-18-2b8b451 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2022-09-18-2b8b451 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2022-09-18-2b8b451 +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2022-10-02-69a0972 +manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-10-02-69a0972 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2022-10-02-69a0972 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2022-10-02-69a0972 [ppc64le] -manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2022-09-18-2b8b451 -manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-09-18-2b8b451 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2022-09-18-2b8b451 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2022-09-18-2b8b451 +manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2022-10-02-69a0972 +manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-10-02-69a0972 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2022-10-02-69a0972 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2022-10-02-69a0972 [s390x] -manylinux2014 = quay.io/pypa/manylinux2014_s390x:2022-09-18-2b8b451 -manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-09-18-2b8b451 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2022-09-18-2b8b451 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2022-09-18-2b8b451 +manylinux2014 = quay.io/pypa/manylinux2014_s390x:2022-10-02-69a0972 +manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-10-02-69a0972 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2022-10-02-69a0972 +musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2022-09-26-4eecafc [pypy_aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2022-09-18-2b8b451 -manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-09-18-2b8b451 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2022-09-18-2b8b451 +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2022-10-02-69a0972 +manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-10-02-69a0972 +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2022-10-02-69a0972 diff --git a/docs/deliver-to-pypi.md b/docs/deliver-to-pypi.md index 948662e3..58b3d6a8 100644 --- a/docs/deliver-to-pypi.md +++ b/docs/deliver-to-pypi.md @@ -22,7 +22,7 @@ pipx run build --sdist # provider can be configured to store them for you. Put them all into the # 'dist' folder. -# Upload using 'twine' (you may need to 'pip install twine') +# Upload using 'twine' pipx run twine upload dist/* ``` @@ -82,7 +82,7 @@ This requires a [PyPI upload token](https://pypi.org/manage/account/token/), sto password: ${{ secrets.pypi_password }} ``` -You should use dependabot to keep the publish action up to date. In the above +You should use Dependabot to keep the publish action up to date. In the above example, the same name (the default, "artifact" is used for all upload-artifact runs, so we can just download all of the in one step into a common directory. diff --git a/docs/faq.md b/docs/faq.md index 33f83099..7571cf56 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -91,7 +91,7 @@ Here's an example Cirrus CI workflow with a job that builds for macOS Intel thro {% include "../examples/cirrus-ci-intel-mac.yml" %} ``` -### Building non-native architectures using emulation {: #emulation} +### Building Linux wheels for non-native archs using emulation {: #emulation} cibuildwheel supports building non-native architectures on Linux, via emulation through the binfmt_misc kernel feature. The easiest way to use this @@ -118,7 +118,7 @@ The CPython Limited API is a subset of the Python C Extension API that's declare To create a package that builds ABI3 wheels, you'll need to configure your build backend to compile libraries correctly create wheels with the right tags. [Check this repo](https://github.com/joerick/python-abi3-package-sample) for an example of how to do this with setuptools. -### Building packages with optional C extensions +### Packages with optional C extensions {: #optional-extensions} `cibuildwheel` defines the environment variable `CIBUILDWHEEL` to the value `1` allowing projects for which the C extension is optional to make it mandatory when building wheels. @@ -132,10 +132,11 @@ myextension = Extension( ) ``` -### Automatic updates {: #automatic-updates} +### Automatic updates using Dependabot {: #automatic-updates} Selecting a moving target (like the latest release) is generally a bad idea in CI. If something breaks, you can't tell whether it was your code or an upstream update that caused the breakage, and in a worse-case scenario, it could occur during a release. -There are two suggested methods for keeping cibuildwheel up to date that instead involve scheduled pull requests using GitHub's dependabot. + +There are two suggested methods for keeping cibuildwheel up to date that instead involve scheduled pull requests using GitHub's Dependabot. #### Option 1: GitHub Action @@ -260,7 +261,28 @@ To quickly test your config without doing a git push and waiting for your code t ### Missing dependencies -You might need to install something on the build machine. You can do this with apt/yum, brew or choco, using the [`CIBW_BEFORE_ALL`](options.md#before-all) option. Or, for a Python dependency, consider [adding it to pyproject.toml](#cibw-options-alternatives-deps). +Sometimes a build will fail due to a missing dependency. + +**If the build is missing a Python package**, you should [add it to pyproject.toml](#cibw-options-alternatives-deps). + +**If you need a build tool** (e.g. cmake, automake, ninja), you can install it through a package manager like apt/yum, brew or choco, using the [`CIBW_BEFORE_ALL`](options.md#before-all) option. + +**If your build is linking into a native library dependency**, you can build/install that in [`CIBW_BEFORE_ALL`](options.md#before-all). However, on Linux, Mac (and Windows if you're using [delvewheel]), the library that you install will be bundled into the wheel in the [repair step]. So take care to ensure that + +- the bundled library doesn't accidentally increase the minimum system requirements (such as the minimum macOS version) +- the bundled library matches the architecture of the wheel you're building when cross-compiling + +This is particularly an issue on macOS, where de facto package manager Homebrew will install libraries that are compiled for the specific version of macOS that the build machine is running, rendering the wheels useless for any previous version. And brew will not install the right arch for cross compilation of Apple Silicon wheels. + +For these reasons, it's strongly recommended to not use brew for native library dependencies. Instead, we recommend compiling the library yourself. If you compile in the [`CIBW_BEFORE_ALL`](options.md#before-all) step, cibuildwheel will have already set the appropriate `MACOSX_DEPLOYMENT_TARGET` env var, so the library will target the correct version of macOS. + +!!! tip + For build steps, Homebrew is still a great resource - you can [look up the build formula](https://formulae.brew.sh/) and use that as a starting point. + +[delvewheel]: https://github.com/adang1345/delvewheel +[repair step]: options.md#repair-wheel-command +[Homebrew]: https://brew.sh/ +[delocate]: https://github.com/matthew-brett/delocate ### macOS: ModuleNotFoundError @@ -281,13 +303,14 @@ python3 -m twine upload wheelhouse/*.whl This doesn't work because while `cibuildwheel` was running, it installed a few new versions of 'python3', so the `python3` run on line 3 isn't the same as the `python3` that ran on line 1. -Solutions to this vary, but the simplest is to install tools immediately before they're used: +Solutions to this vary, but the simplest is to use pipx: ```bash -python3 -m pip install cibuildwheel -python3 -m cibuildwheel --output-dir wheelhouse -python3 -m pip install twine -python3 -m twine upload wheelhouse/*.whl +# most runners have pipx preinstalled, but in case you don't +python3 -m pip install pipx + +pipx run cibuildwheel==2.10.2 --output-dir wheelhouse +pipx run twine upload wheelhouse/*.whl ``` ### macOS: Passing DYLD_LIBRARY_PATH to delocate diff --git a/docs/working-examples.md b/docs/working-examples.md index b3355712..b7f9b4f3 100644 --- a/docs/working-examples.md +++ b/docs/working-examples.md @@ -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. | | [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. | -| [Implicit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes GPU support for linux wheels | | [Confluent client for Kafka][] | ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | setup in `tools/wheels/build-wheels.bat` | +| [Implicit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes GPU support for linux wheels | | [vispy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Main repository for Vispy | | [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 | @@ -58,8 +58,8 @@ title: Working examples | [PyTables][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python package to manage extremely large amounts of data | | [OpenTimelineIO][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Open Source API and interchange format for editorial timeline information. | | [aioquic][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | QUIC and HTTP/3 implementation in Python | -| [ruptures][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Extensive Cython + NumPy [pyproject.toml](https://github.com/deepcharles/ruptures/blob/master/pyproject.toml) example. | | [envd][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | 🏕️ Development environment for AI/ML, based on buildkit | +| [ruptures][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Extensive Cython + NumPy [pyproject.toml](https://github.com/deepcharles/ruptures/blob/master/pyproject.toml) example. | | [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 | @@ -69,8 +69,8 @@ title: Working examples | [Rtree][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Rtree: spatial index for Python GIS ¶ | | [markupsafe][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Safely add untrusted strings to HTML/XML markup. | | [python-rapidjson][] | ![travisci icon][] ![gitlab icon][] ![appveyor icon][] | ![windows icon][] ![linux icon][] | Python wrapper around rapidjson | -| [python-snappy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Python bindings for the snappy google library | | [pybind11 cmake_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a CMake-based build system | +| [python-snappy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Python bindings for the snappy google library | | [KDEpy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Kernel Density Estimation in Python | | [tgcalls][] | ![github icon][] | ![apple icon][] ![windows icon][] | Python `pybind11` binding to Telegram's WebRTC library with third party dependencies like `OpenSSL`, `MozJPEG`, `FFmpeg`, etc. | | [pybind11 python_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a Python-based build system | @@ -79,8 +79,8 @@ title: Working examples | [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. | | [cyvcf2][] | ![github icon][] | ![apple icon][] ![linux icon][] | cython + htslib == fast VCF and BCF processing | -| [matrixprofile][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python 3 library making time series data mining tasks, utilizing matrix profile algorithms, accessible to everyone. | | [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. | | [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 | | [Tokenizer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast and customizable text tokenization library with BPE and SentencePiece support | @@ -96,10 +96,10 @@ title: Working examples | [fathon][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | python package for DFA (Detrended Fluctuation Analysis) and related algorithms | | [etebase-py][] | ![travisci icon][] | ![linux icon][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. | | [polaroid][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Full range of wheels for setuptools rust, with auto release and PyPI deploy. | -| [cf-units][] | ![github icon][] | ![apple icon][] ![linux icon][] | Units of measure as required by the Climate and Forecast (CF) Metadata Conventions | -| [Imagecodecs (fork)][] | ![azurepipelines icon][] | ![apple icon][] ![linux icon][] | Over 20 external dependencies in compiled libraries, custom docker image, `libomp`, `openblas` and `install_name_tool` for macOS. | | [pillow-heif][] | ![github icon][] | ![apple icon][] ![linux icon][] | Python CFFI binding to libheif library with third party dependencies like `libde265`, `x265`, `libaom` with test & publishing on PyPi. | | [power-grid-model][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python/C++ library for distribution power system analysis | +| [cf-units][] | ![github icon][] | ![apple icon][] ![linux icon][] | Units of measure as required by the Climate and Forecast (CF) Metadata Conventions | +| [Imagecodecs (fork)][] | ![azurepipelines icon][] | ![apple icon][] ![linux icon][] | Over 20 external dependencies in compiled libraries, custom docker image, `libomp`, `openblas` and `install_name_tool` for macOS. | | [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 | | [pybind11 scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | An example combining scikit-build and pybind11 | @@ -143,8 +143,8 @@ title: Working examples [OpenSpiel]: https://github.com/deepmind/open_spiel [pyzmq]: https://github.com/zeromq/pyzmq [aiortc]: https://github.com/aiortc/aiortc -[Implicit]: https://github.com/benfred/implicit [Confluent client for Kafka]: https://github.com/confluentinc/confluent-kafka-python +[Implicit]: https://github.com/benfred/implicit [vispy]: https://github.com/vispy/vispy [tinyobjloader]: https://github.com/tinyobjloader/tinyobjloader [Dependency Injector]: https://github.com/ets-labs/python-dependency-injector @@ -162,8 +162,8 @@ title: Working examples [PyTables]: https://github.com/PyTables/PyTables [OpenTimelineIO]: https://github.com/PixarAnimationStudios/OpenTimelineIO [aioquic]: https://github.com/aiortc/aioquic -[ruptures]: https://github.com/deepcharles/ruptures [envd]: https://github.com/tensorchord/envd +[ruptures]: https://github.com/deepcharles/ruptures [Psycopg 3]: https://github.com/psycopg/psycopg [DeepForest]: https://github.com/LAMDA-NJU/Deep-Forest [google neuroglancer]: https://github.com/google/neuroglancer @@ -173,8 +173,8 @@ title: Working examples [Rtree]: https://github.com/Toblerity/rtree [markupsafe]: https://github.com/pallets/markupsafe [python-rapidjson]: https://github.com/python-rapidjson/python-rapidjson -[python-snappy]: https://github.com/andrix/python-snappy [pybind11 cmake_example]: https://github.com/pybind/cmake_example +[python-snappy]: https://github.com/andrix/python-snappy [KDEpy]: https://github.com/tommyod/KDEpy [tgcalls]: https://github.com/MarshalX/tgcalls [pybind11 python_example]: https://github.com/pybind/python_example @@ -183,8 +183,8 @@ title: Working examples [time-machine]: https://github.com/adamchainz/time-machine [sourmash]: https://github.com/dib-lab/sourmash [cyvcf2]: https://github.com/brentp/cyvcf2 -[matrixprofile]: https://github.com/matrix-profile-foundation/matrixprofile [abess]: https://github.com/abess-team/abess +[matrixprofile]: https://github.com/matrix-profile-foundation/matrixprofile [jq.py]: https://github.com/mwilliamson/jq.py [iminuit]: https://github.com/scikit-hep/iminuit [Tokenizer]: https://github.com/OpenNMT/Tokenizer @@ -200,10 +200,10 @@ title: Working examples [fathon]: https://github.com/stfbnc/fathon [etebase-py]: https://github.com/etesync/etebase-py [polaroid]: https://github.com/daggy1234/polaroid -[cf-units]: https://github.com/SciTools/cf-units -[Imagecodecs (fork)]: https://github.com/czaki/imagecodecs_build [pillow-heif]: https://github.com/bigcat88/pillow_heif [power-grid-model]: https://github.com/alliander-opensource/power-grid-model +[cf-units]: https://github.com/SciTools/cf-units +[Imagecodecs (fork)]: https://github.com/czaki/imagecodecs_build [clang-format]: https://github.com/ssciwr/clang-format-wheel [numpythia]: https://github.com/scikit-hep/numpythia [pybind11 scikit_build_example]: https://github.com/pybind/scikit_build_example @@ -227,109 +227,109 @@ title: Working examples [apple icon]: data/readme_icons/apple.svg [linux icon]: data/readme_icons/linux.svg - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + - - - + + +