Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4be9285fc7 | ||
|
|
d3bcfe431f | ||
|
|
eed12cf4c9 | ||
|
|
da91d7944d | ||
|
|
965ced1984 | ||
|
|
a015f3425c | ||
|
|
99203a83f9 | ||
|
|
1029a1a123 | ||
|
|
143febd9fa | ||
|
|
4e17c275ef | ||
|
|
93a095d3de | ||
|
|
723b5e5128 | ||
|
|
02f3849738 | ||
|
|
e43b105d28 | ||
|
|
14a6a77f48 | ||
|
|
40ddede41b | ||
|
|
ed8a9533c5 | ||
|
|
e439544a1d | ||
|
|
4d0db00d79 | ||
|
|
b4fe1aa257 | ||
|
|
194818ecf7 | ||
|
|
fb2c6e2e89 | ||
|
|
8dff764b23 | ||
|
|
b020f9d3e5 | ||
|
|
095c094420 | ||
|
|
d83daa3958 | ||
|
|
4f4dae27fb | ||
|
|
c76ee0b39b | ||
|
|
c217d5963d | ||
|
|
84a4b0518f | ||
|
|
dbb65f94bd | ||
|
|
2e165c3e7a | ||
|
|
4ac5feb6bb | ||
|
|
6974680571 | ||
|
|
5dd2f56eab | ||
|
|
78b6f86305 | ||
|
|
677e51d137 | ||
|
|
f9a5ec84d9 | ||
|
|
044a5dab37 | ||
|
|
00a217d4a6 | ||
|
|
318e768292 | ||
|
|
9bfd0f7956 | ||
|
|
eae34832ec | ||
|
|
3ac943b754 | ||
|
|
b3bb527584 | ||
|
|
c166426b50 | ||
|
|
bf011b51f9 | ||
|
|
abbe91cf86 | ||
|
|
d1ba5b8419 | ||
|
|
64a093756c | ||
|
|
49077c2a36 | ||
|
|
e94274db07 | ||
|
|
3c77465100 | ||
|
|
0f459d378c |
@@ -0,0 +1,34 @@
|
||||
name: Update dependencies
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 6 * * 1' # "At 06:00 on Monday."
|
||||
|
||||
jobs:
|
||||
update-dependencies:
|
||||
name: Update dependencies
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-python@v2
|
||||
name: Install Python 3.9
|
||||
with:
|
||||
python-version: 3.9
|
||||
architecture: x64
|
||||
- name: Install dependencies
|
||||
run: python -m pip install requests pip-tools
|
||||
- name: Run update
|
||||
run: python ./bin/update_dependencies.py
|
||||
- name: Create Pull Request
|
||||
if: github.ref == 'refs/heads/master'
|
||||
uses: peter-evans/create-pull-request@v3
|
||||
with:
|
||||
commit-message: Update dependencies
|
||||
title: '[Bot] Update dependencies'
|
||||
body: |
|
||||
Update the versions of our dependencies.
|
||||
|
||||
PR generated by "Update dependencies" [workflow](https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}).
|
||||
branch: update-dependencies-pr
|
||||
delete-branch: true
|
||||
@@ -13,7 +13,7 @@ repos:
|
||||
- id: check-merge-conflict
|
||||
- id: check-yaml
|
||||
- id: end-of-file-fixer
|
||||
exclude: cibuildwheel/resources/pinned_docker_images.cfg
|
||||
exclude: (cibuildwheel/resources/pinned_docker_images.cfg)|(.svg$)
|
||||
- id: mixed-line-ending
|
||||
- id: trailing-whitespace
|
||||
|
||||
@@ -21,5 +21,5 @@ repos:
|
||||
rev: v0.782
|
||||
hooks:
|
||||
- id: mypy
|
||||
files: cibuildwheel/|test/
|
||||
files: ^(cibuildwheel/|test/|bin/projects.py)
|
||||
pass_filenames: false
|
||||
|
||||
@@ -9,7 +9,7 @@ cibuildwheel
|
||||
|
||||
Python wheels are great. Building them across **Mac, Linux, Windows**, on **multiple versions of Python**, is not.
|
||||
|
||||
`cibuildwheel` is here to help. `cibuildwheel` runs on your CI server - currently it supports Azure Pipelines, Travis CI, AppVeyor, GitHub Actions and CircleCI - and it builds and tests your wheels across all of your platforms.
|
||||
`cibuildwheel` is here to help. `cibuildwheel` runs on your CI server - currently it supports GitHub Actions, Azure Pipelines, Travis CI, AppVeyor, and CircleCI - and it builds and tests your wheels across all of your platforms.
|
||||
|
||||
|
||||
What does it do?
|
||||
@@ -58,49 +58,41 @@ Usage
|
||||
Example setup
|
||||
-------------
|
||||
|
||||
To build manylinux, macOS, and Windows wheels on Travis CI and upload them to PyPI whenever you tag a version, you could use this `.travis.yml`:
|
||||
To build manylinux, macOS, and Windows wheels on Github Actions, you could use this `.github/workflows/wheels.yml`:
|
||||
|
||||
```yaml
|
||||
language: python
|
||||
name: Build
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
include:
|
||||
# perform a linux build
|
||||
- services: docker
|
||||
# and a mac build
|
||||
- os: osx
|
||||
language: shell
|
||||
# and a windows build
|
||||
- os: windows
|
||||
language: shell
|
||||
before_install:
|
||||
- choco install python --version 3.8.0
|
||||
- export PATH="/c/Python38:/c/Python38/Scripts:$PATH"
|
||||
# make sure it's on PATH as 'python3'
|
||||
- ln -s /c/Python38/python.exe /c/Python38/python3.exe
|
||||
build_wheels:
|
||||
name: Build wheels on ${{ matrix.os }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-20.04, windows-2019, macOS-10.15]
|
||||
|
||||
env:
|
||||
global:
|
||||
- TWINE_USERNAME=__token__
|
||||
# Note: TWINE_PASSWORD is set to a PyPI API token in Travis settings
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
install:
|
||||
- python3 -m pip install cibuildwheel==1.7.0
|
||||
- uses: actions/setup-python@v2
|
||||
name: Install Python
|
||||
|
||||
script:
|
||||
# build the wheels, put them into './wheelhouse'
|
||||
- python3 -m cibuildwheel --output-dir wheelhouse
|
||||
- name: Install cibuildwheel
|
||||
run: python -m pip install cibuildwheel==1.7.4
|
||||
|
||||
after_success:
|
||||
# if the release was tagged, upload them to PyPI
|
||||
- |
|
||||
if [[ $TRAVIS_TAG ]]; then
|
||||
python3 -m pip install twine
|
||||
python3 -m twine upload wheelhouse/*.whl
|
||||
fi
|
||||
- name: Build wheels
|
||||
run: python -m cibuildwheel --output-dir wheelhouse
|
||||
env:
|
||||
CIBW_SKIP: "cp27-* pp27-*" # skip Python 2.7 wheels
|
||||
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
path: ./wheelhouse/*.whl
|
||||
```
|
||||
|
||||
For more information, including how to build on GitHub Actions, Appveyor, Azure Pipelines, or CircleCI, check out the [documentation](https://cibuildwheel.readthedocs.org) and the [examples](https://github.com/joerick/cibuildwheel/tree/master/examples).
|
||||
For more information, including building on Python 2, PyPI deployment, and the use of other CI services like Travis CI, Appveyor, Azure Pipelines, or CircleCI, check out the [documentation](https://cibuildwheel.readthedocs.org) and the [examples](https://github.com/joerick/cibuildwheel/tree/master/examples).
|
||||
|
||||
Options
|
||||
-------
|
||||
@@ -125,34 +117,145 @@ Options
|
||||
Working examples
|
||||
----------------
|
||||
|
||||
<!--working-examples-start-->
|
||||
|
||||
Here are some repos that use cibuildwheel.
|
||||
|
||||
- [Matplotlib](https://github.com/matplotlib/matplotlib) - The venerable Matplotlib, a Python library with C++ portions, built for Linux, Mac, and Windows on Github Actions.
|
||||
- [pyinstrument_cext](https://github.com/joerick/pyinstrument_cext) - A simple C extension, without external dependencies, built on Travis CI/Appveyor.
|
||||
- [websockets](https://github.com/aaugustin/websockets)
|
||||
- [Parselmouth](https://github.com/YannickJadoul/Parselmouth) - 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; all platforms built on Github Actions.
|
||||
- [python-admesh](https://github.com/admesh/python-admesh)
|
||||
- [pybase64](https://github.com/mayeut/pybase64)
|
||||
- [KDEpy](https://github.com/tommyod/KDEpy)
|
||||
- [AutoPy](https://github.com/autopilot-rs/autopy)
|
||||
- [apriltags2-ethz](https://github.com/safijari/apriltags2_ethz)
|
||||
- [TgCrypto](https://github.com/pyrogram/tgcrypto)
|
||||
- [twisted-iocpsupport](https://github.com/twisted/twisted-iocpsupport) - A submodule of Twisted that hooks into native C APIs using Cython. Built on Github CI for Windows.
|
||||
- [gmic-py](https://github.com/dtschump/gmic-py)
|
||||
- [creme](https://github.com/creme-ml/creme)
|
||||
- [PyAV](https://github.com/PyAV-Org/PyAV)
|
||||
- [aiortc](https://github.com/aiortc/aiortc)
|
||||
- [aioquic](https://github.com/aiortc/aioquic)
|
||||
- [pikepdf](https://github.com/pikepdf/pikepdf)
|
||||
- [fathon](https://github.com/stfbnc/fathon)
|
||||
- [etebase-py](https://github.com/etesync/etebase-py) - Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed, built on Travis CI.
|
||||
- [xmlstarlet](https://github.com/dimitern/xmlstarlet) - Python 3.6+ CFFI bindings with true MSVC build and GitHub Actions.
|
||||
- [bx-python](https://github.com/bxlab/bx-python) - A library that includes Cython extensions, built on Travis CI for Mac and Linux.
|
||||
<!-- START bin/projects.py -->
|
||||
|
||||
> Add your repo here! Send a PR.
|
||||
<!-- this section is generated by bin/projects.py. Don't edit it directly, instead, edit docs/data/projects.yml -->
|
||||
|
||||
| Name | CI | OS | Notes |
|
||||
|-----------------------------------|----|----|:------|
|
||||
| [scikit-learn][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The machine learning library. A complex but clean config using many of cibuildwheel's features to build a large project with Cython and C++ extensions. |
|
||||
| [Matplotlib][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The venerable Matplotlib, a Python library with C++ portions |
|
||||
| [psutil][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Cross-platform lib for process and system monitoring in Python |
|
||||
| [twisted-iocpsupport][] | ![github icon][] | ![windows icon][] | A submodule of Twisted that hooks into native C APIs using Cython. |
|
||||
| [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. |
|
||||
| [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. |
|
||||
| [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. |
|
||||
| [h5py][] | ![azurepipelines icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | HDF5 for Python -- The h5py package is a Pythonic interface to the HDF5 binary data format. |
|
||||
| [coverage.py][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The coverage tool for Python |
|
||||
| [River][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | 🌊 Online machine learning in Python |
|
||||
| [PyAV][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Pythonic bindings for FFmpeg's libraries. |
|
||||
| [Dependency Injector][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Dependency injection framework for Python, uses Windows TravisCI |
|
||||
| [aioquic][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | QUIC and HTTP/3 implementation in Python |
|
||||
| [google neuroglancer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | WebGL-based viewer for volumetric data |
|
||||
| [AutoPy][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. |
|
||||
| [pikepdf][] | ![azurepipelines icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python library for reading and writing PDF, powered by qpdf |
|
||||
| [Parselmouth][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python interface to the Praat software package, using pybind11, C++17 and CMake, with the core Praat static library built only once and shared between wheels. |
|
||||
| [python-rapidjson][] | ![travisci icon][] ![gitlab icon][] ![appveyor icon][] | ![windows icon][] ![linux icon][] | Python wrapper around rapidjson |
|
||||
| [Rtree][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Rtree: spatial index for Python GIS ¶ |
|
||||
| [KDEpy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Kernel Density Estimation in Python |
|
||||
| [pybind11 python_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a Python-based build system |
|
||||
| [pybind11 cmake_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a CMake-based build system |
|
||||
| [iminuit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Jupyter-friendly Python interface for C++ MINUIT2 |
|
||||
| [jq.py][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | Python bindings for jq |
|
||||
| [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. |
|
||||
| [pybase64][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast Base64 encoding/decoding in Python |
|
||||
| [TgCrypto][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. |
|
||||
| [etebase-py][] | ![travisci icon][] | ![linux icon][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. |
|
||||
| [pyjet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The interface between FastJet and NumPy |
|
||||
| [numpythia][] | ![github icon][] | ![apple icon][] ![linux icon][] | The interface between PYTHIA and NumPy |
|
||||
| [fathon][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | python package for DFA (Detrended Fluctuation Analysis) and related algorithms |
|
||||
| [pyinstrument_cext][] | ![travisci icon][] ![appveyor icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A simple C extension, without external dependencies |
|
||||
| [xmlstarlet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python 3.6+ CFFI bindings with true MSVC build. |
|
||||
| [pybind11 scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | An example combining scikit-build and pybind11 |
|
||||
|
||||
[scikit-learn]: https://github.com/scikit-learn/scikit-learn
|
||||
[Matplotlib]: https://github.com/matplotlib/matplotlib
|
||||
[psutil]: https://github.com/giampaolo/psutil
|
||||
[twisted-iocpsupport]: https://github.com/twisted/twisted-iocpsupport
|
||||
[scikit-image]: https://github.com/scikit-image/scikit-image
|
||||
[websockets]: https://github.com/aaugustin/websockets
|
||||
[pyzmq]: https://github.com/zeromq/pyzmq
|
||||
[aiortc]: https://github.com/aiortc/aiortc
|
||||
[h5py]: https://github.com/h5py/h5py
|
||||
[coverage.py]: https://github.com/nedbat/coveragepy
|
||||
[River]: https://github.com/online-ml/river
|
||||
[PyAV]: https://github.com/PyAV-Org/PyAV
|
||||
[Dependency Injector]: https://github.com/ets-labs/python-dependency-injector
|
||||
[aioquic]: https://github.com/aiortc/aioquic
|
||||
[google neuroglancer]: https://github.com/google/neuroglancer
|
||||
[AutoPy]: https://github.com/autopilot-rs/autopy
|
||||
[pikepdf]: https://github.com/pikepdf/pikepdf
|
||||
[Parselmouth]: https://github.com/YannickJadoul/Parselmouth
|
||||
[python-rapidjson]: https://github.com/python-rapidjson/python-rapidjson
|
||||
[Rtree]: https://github.com/Toblerity/rtree
|
||||
[KDEpy]: https://github.com/tommyod/KDEpy
|
||||
[pybind11 python_example]: https://github.com/pybind/python_example
|
||||
[pybind11 cmake_example]: https://github.com/pybind/cmake_example
|
||||
[iminuit]: https://github.com/scikit-hep/iminuit
|
||||
[jq.py]: https://github.com/mwilliamson/jq.py
|
||||
[bx-python]: https://github.com/bxlab/bx-python
|
||||
[boost-histogram]: https://github.com/scikit-hep/boost-histogram
|
||||
[pybase64]: https://github.com/mayeut/pybase64
|
||||
[TgCrypto]: https://github.com/pyrogram/tgcrypto
|
||||
[etebase-py]: https://github.com/etesync/etebase-py
|
||||
[pyjet]: https://github.com/scikit-hep/pyjet
|
||||
[numpythia]: https://github.com/scikit-hep/numpythia
|
||||
[fathon]: https://github.com/stfbnc/fathon
|
||||
[pyinstrument_cext]: https://github.com/joerick/pyinstrument_cext
|
||||
[xmlstarlet]: https://github.com/dimitern/xmlstarlet
|
||||
[pybind11 scikit_build_example]: https://github.com/pybind/scikit_build_example
|
||||
|
||||
[appveyor icon]: docs/data/readme_icons/appveyor.svg
|
||||
[github icon]: docs/data/readme_icons/github.svg
|
||||
[azurepipelines icon]: docs/data/readme_icons/azurepipelines.svg
|
||||
[circleci icon]: docs/data/readme_icons/circleci.svg
|
||||
[gitlab icon]: docs/data/readme_icons/gitlab.svg
|
||||
[travisci icon]: docs/data/readme_icons/travisci.svg
|
||||
[windows icon]: docs/data/readme_icons/windows.svg
|
||||
[apple icon]: docs/data/readme_icons/apple.svg
|
||||
[linux icon]: docs/data/readme_icons/linux.svg
|
||||
|
||||
<!-- scikit-learn: 43477, last pushed 0 days ago -->
|
||||
<!-- Matplotlib: 12823, last pushed 0 days ago -->
|
||||
<!-- psutil: 6887, last pushed 0 days ago -->
|
||||
<!-- twisted-iocpsupport: 4114, last pushed 2 days ago -->
|
||||
<!-- scikit-image: 4104, last pushed 0 days ago -->
|
||||
<!-- websockets: 3089, last pushed 10 days ago -->
|
||||
<!-- pyzmq: 2654, last pushed 20 days ago -->
|
||||
<!-- aiortc: 2073, last pushed 7 days ago -->
|
||||
<!-- h5py: 1455, last pushed 12 days ago -->
|
||||
<!-- coverage.py: 1441, last pushed 3 days ago -->
|
||||
<!-- River: 1219, last pushed 0 days ago -->
|
||||
<!-- PyAV: 1114, last pushed 14 days ago -->
|
||||
<!-- Dependency Injector: 1030, last pushed 0 days ago -->
|
||||
<!-- aioquic: 552, last pushed 49 days ago -->
|
||||
<!-- google neuroglancer: 550, last pushed 7 days ago -->
|
||||
<!-- AutoPy: 507, last pushed 105 days ago -->
|
||||
<!-- pikepdf: 487, last pushed 0 days ago -->
|
||||
<!-- Parselmouth: 433, last pushed 26 days ago -->
|
||||
<!-- python-rapidjson: 407, last pushed 10 days ago -->
|
||||
<!-- Rtree: 378, last pushed 0 days ago -->
|
||||
<!-- KDEpy: 230, last pushed 9 days ago -->
|
||||
<!-- pybind11 python_example: 221, last pushed 44 days ago -->
|
||||
<!-- pybind11 cmake_example: 219, last pushed 7 days ago -->
|
||||
<!-- iminuit: 166, last pushed 0 days ago -->
|
||||
<!-- jq.py: 138, last pushed 73 days ago -->
|
||||
<!-- bx-python: 94, last pushed 1 days ago -->
|
||||
<!-- boost-histogram: 63, last pushed 0 days ago -->
|
||||
<!-- pybase64: 52, last pushed 2 days ago -->
|
||||
<!-- TgCrypto: 49, last pushed 36 days ago -->
|
||||
<!-- etebase-py: 40, last pushed 3 days ago -->
|
||||
<!-- pyjet: 27, last pushed 29 days ago -->
|
||||
<!-- numpythia: 23, last pushed 28 days ago -->
|
||||
<!-- fathon: 18, last pushed 1 days ago -->
|
||||
<!-- pyinstrument_cext: 10, last pushed 29 days ago -->
|
||||
<!-- xmlstarlet: 7, last pushed 0 days ago -->
|
||||
<!-- pybind11 scikit_build_example: 0, last pushed 42 days ago -->
|
||||
|
||||
<!-- END bin/projects.py -->
|
||||
|
||||
> Add your repo here! Send a PR, adding your information to `docs/data/projects.yml`.
|
||||
>
|
||||
> <sup>I'd like to include notes here to indicate why an example might be interesting to cibuildwheel users - the styles/technologies/techniques used in each. Please include that in future additions!</sup>
|
||||
|
||||
<!--working-examples-end-->
|
||||
|
||||
Legal note
|
||||
----------
|
||||
|
||||
@@ -165,6 +268,43 @@ This is similar to static linking, so it might have some licence implications. C
|
||||
Changelog
|
||||
=========
|
||||
|
||||
<!--changelog-start-->
|
||||
|
||||
### 1.7.4
|
||||
|
||||
_2 January 2021_
|
||||
|
||||
- 🐛 Fix the PyPy virtualenv patch to work on macOS 10.14 (#506)
|
||||
|
||||
### 1.7.3
|
||||
|
||||
_1 January 2021_
|
||||
|
||||
- 🛠 Added a patch for Pypy to ensure header files are available for building
|
||||
in a virtualenv. (#502)
|
||||
- 🛠 Some preparatory work towards using cibuildwheel as a Github Action.
|
||||
Check out
|
||||
[the FAQ](https://cibuildwheel.readthedocs.io/en/stable/faq/#option-1-github-action)
|
||||
for information on how to use it. We'll be fully updating the docs to this
|
||||
approach in a subsequent release (#494)
|
||||
|
||||
### 1.7.2
|
||||
|
||||
_21 December 2020_
|
||||
|
||||
- 🛠 Update dependencies, notably wheel==0.36.2 and pip==20.3.3, and CPython to
|
||||
their latest bugfix releases (#489)
|
||||
- 📚 Switch to a Github example in the README (#479)
|
||||
- 📚 Create Working Examples table, with many projects that use cibuildwheel (#474)
|
||||
- 📚 Import Working Examples table and Changelog to docs
|
||||
|
||||
### 1.7.1
|
||||
|
||||
_3 December 2020_
|
||||
|
||||
- 🛠 Update manylinux2010 image to resolve issues with 'yum' repositories
|
||||
(#472)
|
||||
|
||||
### 1.7.0
|
||||
|
||||
_26 November 2020_
|
||||
@@ -565,6 +705,8 @@ _31 March 2017_
|
||||
|
||||
- 🌟 First public release!
|
||||
|
||||
<!--changelog-end-->
|
||||
|
||||
Contributing
|
||||
============
|
||||
|
||||
@@ -598,4 +740,4 @@ See also
|
||||
|
||||
If you'd like to keep wheel building separate from the package itself, check out [astrofrog/autowheel](https://github.com/astrofrog/autowheel). It builds packages using cibuildwheel from source distributions on PyPI.
|
||||
|
||||
If `cibuildwheel` is too limited for your needs, consider [matthew-brett/multibuild](http://github.com/matthew-brett/multibuild). `multibuild` is a toolbox for building a wheel on various platforms. It can do a lot more than this project - it's used to build SciPy!
|
||||
Another very similar tool to consider is [matthew-brett/multibuild](http://github.com/matthew-brett/multibuild). `multibuild` is a shell script toolbox for building a wheel on various platforms. It is used as a basis to build some of the big data science tools, like SciPy.
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
name: cibuildwheel
|
||||
description: 'Installs and runs cibuildwheel on the current runner'
|
||||
inputs:
|
||||
package-dir:
|
||||
description: 'Input directory, defaults to "."'
|
||||
required: false
|
||||
default: .
|
||||
output-dir:
|
||||
description: 'Folder to place the outputs in, defaults to "wheelhouse"'
|
||||
required: false
|
||||
default: wheelhouse
|
||||
branding:
|
||||
icon: package
|
||||
color: yellow
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
|
||||
# This needs powershell-core because github.action path is a Windows-style
|
||||
# path on Windows. Powershell-core understands both types of paths.
|
||||
- run: python -m pip install ${{ github.action_path }}
|
||||
shell: pwsh
|
||||
|
||||
- run: python -m cibuildwheel ${{ inputs.package-dir }} --output-dir ${{ inputs.output-dir }}
|
||||
shell: bash
|
||||
@@ -11,10 +11,13 @@ import urllib.parse
|
||||
|
||||
config = [
|
||||
# file path, version find/replace format
|
||||
('cibuildwheel/__init__.py', "__version__ = '{}'"),
|
||||
('setup.py', "version='{}'"),
|
||||
('README.md', "cibuildwheel=={}"),
|
||||
('cibuildwheel/__init__.py', "__version__ = '{}'"),
|
||||
('docs/faq.md', "cibuildwheel=={}"),
|
||||
('docs/faq.md', "cibuildwheel@v{}"),
|
||||
('docs/setup.md', "cibuildwheel@v{}"),
|
||||
('examples/*', "cibuildwheel=={}"),
|
||||
('setup.py', "version='{}'"),
|
||||
]
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,198 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
"""
|
||||
Convert a yaml project list into a nice table.
|
||||
|
||||
Suggested usage:
|
||||
|
||||
./bin/projects.py docs/data/projects.yml --online --auth $GITHUB_API_TOKEN --readme README.md
|
||||
git diff
|
||||
"""
|
||||
|
||||
import builtins
|
||||
import functools
|
||||
from datetime import datetime
|
||||
from io import StringIO
|
||||
from typing import Dict, Any, List, Optional, TextIO
|
||||
|
||||
import click
|
||||
import yaml
|
||||
from github import Github
|
||||
import urllib.request
|
||||
import xml.dom.minidom
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ICONS = (
|
||||
"appveyor",
|
||||
"github",
|
||||
"azurepipelines",
|
||||
"circleci",
|
||||
"gitlab",
|
||||
"travisci",
|
||||
"windows",
|
||||
"apple",
|
||||
"linux",
|
||||
)
|
||||
|
||||
|
||||
class Project:
|
||||
NAME: int = 0
|
||||
|
||||
def __init__(self, config: Dict[str, Any], github: Optional[Github] = None):
|
||||
try:
|
||||
self.name: str = config["name"]
|
||||
self.gh: str = config["gh"]
|
||||
except KeyError:
|
||||
print("Invalid config, needs at least gh and name!", config)
|
||||
raise
|
||||
|
||||
self.stars_repo: str = config.get("stars", self.gh)
|
||||
self.notes: str = config.get("notes", "")
|
||||
self.ci: List[str] = config.get("ci", [])
|
||||
self.os: List[str] = config.get("os", [])
|
||||
|
||||
self.online = github is not None
|
||||
if github is not None:
|
||||
repo = github.get_repo(self.stars_repo)
|
||||
self.num_stars = repo.stargazers_count
|
||||
self.pushed_at = repo.pushed_at
|
||||
if not self.notes:
|
||||
notes = repo.description
|
||||
if repo.description:
|
||||
self.notes = notes
|
||||
else:
|
||||
self.num_stars = 0
|
||||
self.pushed_at = datetime.utcnow()
|
||||
|
||||
name_len = len(self.name) + 4
|
||||
self.__class__.NAME = max(self.__class__.NAME, name_len)
|
||||
|
||||
def __lt__(self, other: "Project") -> bool:
|
||||
if self.online:
|
||||
return self.num_stars < other.num_stars
|
||||
else:
|
||||
return self.name < other.name
|
||||
|
||||
@classmethod
|
||||
def header(cls) -> str:
|
||||
return (
|
||||
f"| {'Name':{cls.NAME}} | CI | OS | Notes |\n"
|
||||
f"|{'':-^{cls.NAME+2 }}|----|----|:------|"
|
||||
)
|
||||
|
||||
@property
|
||||
def namelink(self) -> str:
|
||||
return f"[{self.name}][]"
|
||||
|
||||
@property
|
||||
def starslink(self) -> str:
|
||||
return f"![{self.name} stars][]"
|
||||
|
||||
@property
|
||||
def url(self) -> str:
|
||||
return f"https://github.com/{self.gh}"
|
||||
|
||||
@property
|
||||
def ci_icons(self) -> str:
|
||||
return " ".join(f"![{icon} icon][]" for icon in self.ci)
|
||||
|
||||
@property
|
||||
def os_icons(self) -> str:
|
||||
return " ".join(f"![{icon} icon][]" for icon in self.os)
|
||||
|
||||
def table_row(self) -> str:
|
||||
notes = self.notes.replace('\n', ' ')
|
||||
return f"| {self.namelink: <{self.NAME}} | {self.ci_icons} | {self.os_icons} | {notes} |"
|
||||
|
||||
def links(self) -> str:
|
||||
return f"[{self.name}]: {self.url}"
|
||||
|
||||
def info(self) -> str:
|
||||
days = (datetime.utcnow() - self.pushed_at).days
|
||||
return f"<!-- {self.name}: {self.num_stars}, last pushed {days} days ago -->"
|
||||
|
||||
|
||||
def fetch_icon(icon_name: str) -> None:
|
||||
url = f'https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/{icon_name}.svg'
|
||||
with urllib.request.urlopen(url) as f:
|
||||
original_svg_data = f.read()
|
||||
|
||||
document = xml.dom.minidom.parseString(original_svg_data)
|
||||
svgElement = document.documentElement
|
||||
assert svgElement.nodeName == 'svg'
|
||||
svgElement.setAttribute('width', '16px')
|
||||
svgElement.setAttribute('fill', '#606060')
|
||||
|
||||
icon_path = path_for_icon(icon_name)
|
||||
icon_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
with open(path_for_icon(icon_name), 'w') as f:
|
||||
f.write(svgElement.toxml())
|
||||
|
||||
|
||||
def path_for_icon(icon_name: str) -> Path:
|
||||
return Path('.') / 'docs' / 'data' / 'readme_icons' / f'{icon_name}.svg'
|
||||
|
||||
|
||||
def str_projects(
|
||||
config: List[Dict[str, Any]], *, online: bool = True, auth: Optional[str] = None
|
||||
) -> str:
|
||||
io = StringIO()
|
||||
print = functools.partial(builtins.print, file=io)
|
||||
|
||||
if online:
|
||||
for icon in ICONS:
|
||||
fetch_icon(icon)
|
||||
|
||||
github = Github(auth) if online else None
|
||||
|
||||
projects = sorted((Project(item, github) for item in config), reverse=online)
|
||||
|
||||
print(Project.header())
|
||||
for project in projects:
|
||||
print(project.table_row())
|
||||
|
||||
print()
|
||||
for project in projects:
|
||||
print(project.links())
|
||||
|
||||
print()
|
||||
for icon in ICONS:
|
||||
print(f"[{icon} icon]: {path_for_icon(icon).as_posix()}")
|
||||
|
||||
print()
|
||||
for project in projects:
|
||||
print(project.info())
|
||||
|
||||
return io.getvalue()
|
||||
|
||||
|
||||
@click.command()
|
||||
@click.argument("input", type=click.File("r"))
|
||||
@click.option("--online/--no-online", default=True, help="Get info from GitHub")
|
||||
@click.option("--auth", help="GitHub authentication token")
|
||||
@click.option("--readme", type=click.File("r+"), help="Modify a readme file if given")
|
||||
def projects(
|
||||
input: TextIO, online: bool, auth: Optional[str], readme: Optional[TextIO]
|
||||
) -> None:
|
||||
config = yaml.safe_load(input)
|
||||
output = str_projects(config, online=online, auth=auth)
|
||||
|
||||
if readme is None:
|
||||
print(output)
|
||||
else:
|
||||
text = readme.read()
|
||||
start_str = "<!-- START bin/projects.py -->\n"
|
||||
start = text.find(start_str)
|
||||
end = text.find("<!-- END bin/projects.py -->\n")
|
||||
generated_note = f'<!-- this section is generated by bin/projects.py. Don\'t edit it directly, instead, edit {input.name} -->'
|
||||
new_text = f"{text[:start + len(start_str)]}\n{generated_note}\n\n{output}\n{text[end:]}"
|
||||
|
||||
readme.seek(0)
|
||||
readme.write(new_text)
|
||||
readme.truncate()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
projects()
|
||||
@@ -17,4 +17,4 @@ if __name__ == '__main__':
|
||||
subprocess.check_call(unit_test_args)
|
||||
|
||||
# run the integration tests
|
||||
subprocess.check_call([sys.executable, '-m', 'pytest', '-x', '--durations', '0', 'test'])
|
||||
subprocess.check_call([sys.executable, '-m', 'pytest', '-x', '--durations', '0', '--timeout=1200', 'test'])
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
|
||||
import configparser
|
||||
import os
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
from collections import namedtuple
|
||||
|
||||
import requests
|
||||
@@ -12,21 +14,39 @@ os.chdir('..')
|
||||
|
||||
# CUSTOM_COMPILE_COMMAND is a pip-compile option that tells users how to
|
||||
# regenerate the constraints files
|
||||
os.environ['CUSTOM_COMPILE_COMMAND'] = "bin/update_constraints.py"
|
||||
subprocess.check_call([
|
||||
'pip-compile',
|
||||
'--allow-unsafe',
|
||||
'--upgrade',
|
||||
'cibuildwheel/resources/constraints.in',
|
||||
])
|
||||
for python_version in ['27', '35', '36', '37']:
|
||||
subprocess.check_call([
|
||||
f'./env{python_version}/bin/pip-compile',
|
||||
'--allow-unsafe',
|
||||
'--upgrade',
|
||||
'cibuildwheel/resources/constraints.in',
|
||||
'--output-file', f'cibuildwheel/resources/constraints-python{python_version}.txt'
|
||||
])
|
||||
os.environ['CUSTOM_COMPILE_COMMAND'] = "bin/update_dependencies.py"
|
||||
|
||||
PYTHON_VERSIONS = ['27', '35', '36', '37', '38', '39']
|
||||
|
||||
if '--no-docker' in sys.argv:
|
||||
for python_version in PYTHON_VERSIONS:
|
||||
subprocess.check_call([
|
||||
f'./env{python_version}/bin/pip-compile',
|
||||
'--allow-unsafe',
|
||||
'--upgrade',
|
||||
'cibuildwheel/resources/constraints.in',
|
||||
'--output-file', f'cibuildwheel/resources/constraints-python{python_version}.txt'
|
||||
])
|
||||
else:
|
||||
image = 'quay.io/pypa/manylinux2010_x86_64:latest'
|
||||
subprocess.check_call(['docker', 'pull', image])
|
||||
for python_version in PYTHON_VERSIONS:
|
||||
abi_flags = '' if int(python_version) >= 38 else 'm'
|
||||
python_path = f'/opt/python/cp{python_version}-cp{python_version}{abi_flags}/bin/'
|
||||
subprocess.check_call([
|
||||
'docker', 'run', '--rm',
|
||||
'-e', 'CUSTOM_COMPILE_COMMAND',
|
||||
'-v', f'{os.getcwd()}:/volume',
|
||||
'--workdir', '/volume', image,
|
||||
'bash', '-c',
|
||||
f'{python_path}pip install pip-tools &&'
|
||||
f'{python_path}pip-compile --allow-unsafe --upgrade '
|
||||
'cibuildwheel/resources/constraints.in '
|
||||
f'--output-file cibuildwheel/resources/constraints-python{python_version}.txt'
|
||||
])
|
||||
|
||||
# default constraints.txt
|
||||
shutil.copyfile(f'cibuildwheel/resources/constraints-python{PYTHON_VERSIONS[-1]}.txt', 'cibuildwheel/resources/constraints.txt')
|
||||
|
||||
Image = namedtuple('Image', [
|
||||
'manylinux_version',
|
||||
|
||||
@@ -1 +1 @@
|
||||
__version__ = '1.7.0'
|
||||
__version__ = '1.7.4'
|
||||
|
||||
@@ -138,6 +138,16 @@ def build(options: BuildOptions) -> None:
|
||||
log.build_start(config.identifier)
|
||||
|
||||
dependency_constraint_flags: List[Union[str, PathLike]] = []
|
||||
if config.identifier.startswith("pp"):
|
||||
# Patch PyPy to make sure headers get installed into a venv
|
||||
patch_version = '_27' if config.version == '2.7' else ''
|
||||
patch_path = Path(__file__).absolute().parent / 'resources' / f'pypy_venv{patch_version}.patch'
|
||||
patch_docker_path = PurePath('/pypy_venv.patch')
|
||||
docker.copy_into(patch_path, patch_docker_path)
|
||||
try:
|
||||
docker.call(['patch', '--force', '-p1', '-d', config.path, '-i', patch_docker_path])
|
||||
except subprocess.CalledProcessError:
|
||||
print("PyPy patch not applied", file=sys.stderr)
|
||||
|
||||
if options.dependency_constraints:
|
||||
constraints_file = options.dependency_constraints.get_for_python_version(config.version)
|
||||
|
||||
@@ -37,9 +37,9 @@ def get_python_configurations(build_selector: BuildSelector) -> List[PythonConfi
|
||||
PythonConfiguration(version='2.7', identifier='cp27-macosx_x86_64', url='https://www.python.org/ftp/python/2.7.18/python-2.7.18-macosx10.9.pkg'),
|
||||
PythonConfiguration(version='3.5', identifier='cp35-macosx_x86_64', url='https://www.python.org/ftp/python/3.5.4/python-3.5.4-macosx10.6.pkg'),
|
||||
PythonConfiguration(version='3.6', identifier='cp36-macosx_x86_64', url='https://www.python.org/ftp/python/3.6.8/python-3.6.8-macosx10.9.pkg'),
|
||||
PythonConfiguration(version='3.7', identifier='cp37-macosx_x86_64', url='https://www.python.org/ftp/python/3.7.8/python-3.7.8-macosx10.9.pkg'),
|
||||
PythonConfiguration(version='3.8', identifier='cp38-macosx_x86_64', url='https://www.python.org/ftp/python/3.8.4/python-3.8.4-macosx10.9.pkg'),
|
||||
PythonConfiguration(version='3.9', identifier='cp39-macosx_x86_64', url='https://www.python.org/ftp/python/3.9.0/python-3.9.0-macosx10.9.pkg'),
|
||||
PythonConfiguration(version='3.7', identifier='cp37-macosx_x86_64', url='https://www.python.org/ftp/python/3.7.9/python-3.7.9-macosx10.9.pkg'),
|
||||
PythonConfiguration(version='3.8', identifier='cp38-macosx_x86_64', url='https://www.python.org/ftp/python/3.8.7/python-3.8.7-macosx10.9.pkg'),
|
||||
PythonConfiguration(version='3.9', identifier='cp39-macosx_x86_64', url='https://www.python.org/ftp/python/3.9.1/python-3.9.1-macosx10.9.pkg'),
|
||||
# PyPy
|
||||
PythonConfiguration(version='2.7', identifier='pp27-macosx_x86_64', url='https://downloads.python.org/pypy/pypy2.7-v7.3.3-osx64.tar.bz2'),
|
||||
PythonConfiguration(version='3.6', identifier='pp36-macosx_x86_64', url='https://downloads.python.org/pypy/pypy3.6-v7.3.3-osx64.tar.bz2'),
|
||||
@@ -105,6 +105,10 @@ def install_pypy(version: str, url: str) -> Path:
|
||||
downloaded_tar_bz2 = Path("/tmp") / pypy_tar_bz2
|
||||
download(url, downloaded_tar_bz2)
|
||||
call(['tar', '-C', '/tmp', '-xf', downloaded_tar_bz2])
|
||||
# Patch PyPy to make sure headers get installed into a venv
|
||||
patch_version = '_27' if version == '2.7' else ''
|
||||
patch_path = Path(__file__).absolute().parent / 'resources' / f'pypy_venv{patch_version}.patch'
|
||||
call(['patch', '--force', '-p1', '-d', installation_path, '-i', patch_path])
|
||||
|
||||
installation_bin_path = installation_path / 'bin'
|
||||
python_executable = 'pypy3' if version[0] == '3' else 'pypy'
|
||||
|
||||
@@ -2,25 +2,54 @@
|
||||
# This file is autogenerated by pip-compile
|
||||
# To update, run:
|
||||
#
|
||||
# bin/update_constraints.py
|
||||
# bin/update_dependencies.py
|
||||
#
|
||||
appdirs==1.4.4 # via virtualenv
|
||||
configparser==4.0.2 # via importlib-metadata
|
||||
contextlib2==0.6.0.post1 # via importlib-metadata, importlib-resources
|
||||
delocate==0.8.2 # via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.1 # via virtualenv
|
||||
filelock==3.0.12 # via virtualenv
|
||||
importlib-metadata==2.1.0 # via virtualenv
|
||||
importlib-resources==3.3.0 # via virtualenv
|
||||
pathlib2==2.3.5 # via importlib-metadata, importlib-resources, virtualenv
|
||||
scandir==1.10.0 # via pathlib2
|
||||
singledispatch==3.4.0.3 # via importlib-resources
|
||||
six==1.15.0 # via pathlib2, virtualenv
|
||||
typing==3.7.4.3 # via importlib-resources
|
||||
virtualenv==20.2.1 # via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.35.1 # via -r cibuildwheel/resources/constraints.in, delocate
|
||||
zipp==1.2.0 # via importlib-metadata, importlib-resources
|
||||
appdirs==1.4.4
|
||||
# via virtualenv
|
||||
configparser==4.0.2
|
||||
# via importlib-metadata
|
||||
contextlib2==0.6.0.post1
|
||||
# via
|
||||
# importlib-metadata
|
||||
# importlib-resources
|
||||
delocate==0.8.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.1
|
||||
# via virtualenv
|
||||
filelock==3.0.12
|
||||
# via virtualenv
|
||||
importlib-metadata==2.1.1
|
||||
# via virtualenv
|
||||
importlib-resources==3.3.1
|
||||
# via virtualenv
|
||||
pathlib2==2.3.5
|
||||
# via
|
||||
# importlib-metadata
|
||||
# importlib-resources
|
||||
# virtualenv
|
||||
scandir==1.10.0
|
||||
# via pathlib2
|
||||
singledispatch==3.4.0.3
|
||||
# via importlib-resources
|
||||
six==1.15.0
|
||||
# via
|
||||
# pathlib2
|
||||
# virtualenv
|
||||
typing==3.7.4.3
|
||||
# via importlib-resources
|
||||
virtualenv==20.2.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.36.2
|
||||
# via
|
||||
# -r cibuildwheel/resources/constraints.in
|
||||
# delocate
|
||||
zipp==1.2.0
|
||||
# via
|
||||
# importlib-metadata
|
||||
# importlib-resources
|
||||
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
pip==20.2.4 # via -r cibuildwheel/resources/constraints.in
|
||||
setuptools==44.1.1 # via -r cibuildwheel/resources/constraints.in
|
||||
pip==20.3.3
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
setuptools==44.1.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -2,19 +2,35 @@
|
||||
# This file is autogenerated by pip-compile
|
||||
# To update, run:
|
||||
#
|
||||
# bin/update_constraints.py
|
||||
# bin/update_dependencies.py
|
||||
#
|
||||
appdirs==1.4.4 # via virtualenv
|
||||
delocate==0.8.2 # via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.1 # via virtualenv
|
||||
filelock==3.0.12 # via virtualenv
|
||||
importlib-metadata==2.1.0 # via virtualenv
|
||||
importlib-resources==3.2.1 # via virtualenv
|
||||
six==1.15.0 # via virtualenv
|
||||
virtualenv==20.2.1 # via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.35.1 # via -r cibuildwheel/resources/constraints.in, delocate
|
||||
zipp==1.2.0 # via importlib-metadata, importlib-resources
|
||||
appdirs==1.4.4
|
||||
# via virtualenv
|
||||
delocate==0.8.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.1
|
||||
# via virtualenv
|
||||
filelock==3.0.12
|
||||
# via virtualenv
|
||||
importlib-metadata==2.1.1
|
||||
# via virtualenv
|
||||
importlib-resources==3.2.1
|
||||
# via virtualenv
|
||||
six==1.15.0
|
||||
# via virtualenv
|
||||
virtualenv==20.2.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.36.2
|
||||
# via
|
||||
# -r cibuildwheel/resources/constraints.in
|
||||
# delocate
|
||||
zipp==1.2.0
|
||||
# via
|
||||
# importlib-metadata
|
||||
# importlib-resources
|
||||
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
pip==20.2.4 # via -r cibuildwheel/resources/constraints.in
|
||||
setuptools==50.3.2 # via -r cibuildwheel/resources/constraints.in
|
||||
pip==20.3.3
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
setuptools==50.3.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -2,19 +2,37 @@
|
||||
# This file is autogenerated by pip-compile
|
||||
# To update, run:
|
||||
#
|
||||
# bin/update_constraints.py
|
||||
# bin/update_dependencies.py
|
||||
#
|
||||
appdirs==1.4.4 # via virtualenv
|
||||
delocate==0.8.2 # via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.1 # via virtualenv
|
||||
filelock==3.0.12 # via virtualenv
|
||||
importlib-metadata==3.1.0 # via virtualenv
|
||||
importlib-resources==3.3.0 # via virtualenv
|
||||
six==1.15.0 # via virtualenv
|
||||
virtualenv==20.2.1 # via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.35.1 # via -r cibuildwheel/resources/constraints.in, delocate
|
||||
zipp==3.4.0 # via importlib-metadata, importlib-resources
|
||||
appdirs==1.4.4
|
||||
# via virtualenv
|
||||
delocate==0.8.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.1
|
||||
# via virtualenv
|
||||
filelock==3.0.12
|
||||
# via virtualenv
|
||||
importlib-metadata==3.3.0
|
||||
# via virtualenv
|
||||
importlib-resources==4.1.1
|
||||
# via virtualenv
|
||||
six==1.15.0
|
||||
# via virtualenv
|
||||
typing-extensions==3.7.4.3
|
||||
# via importlib-metadata
|
||||
virtualenv==20.2.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.36.2
|
||||
# via
|
||||
# -r cibuildwheel/resources/constraints.in
|
||||
# delocate
|
||||
zipp==3.4.0
|
||||
# via
|
||||
# importlib-metadata
|
||||
# importlib-resources
|
||||
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
pip==20.2.4 # via -r cibuildwheel/resources/constraints.in
|
||||
setuptools==50.3.2 # via -r cibuildwheel/resources/constraints.in
|
||||
pip==20.3.3
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
setuptools==51.1.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -2,18 +2,33 @@
|
||||
# This file is autogenerated by pip-compile
|
||||
# To update, run:
|
||||
#
|
||||
# bin/update_constraints.py
|
||||
# bin/update_dependencies.py
|
||||
#
|
||||
appdirs==1.4.4 # via virtualenv
|
||||
delocate==0.8.2 # via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.1 # via virtualenv
|
||||
filelock==3.0.12 # via virtualenv
|
||||
importlib-metadata==3.1.0 # via virtualenv
|
||||
six==1.15.0 # via virtualenv
|
||||
virtualenv==20.2.1 # via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.35.1 # via -r cibuildwheel/resources/constraints.in, delocate
|
||||
zipp==3.4.0 # via importlib-metadata
|
||||
appdirs==1.4.4
|
||||
# via virtualenv
|
||||
delocate==0.8.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.1
|
||||
# via virtualenv
|
||||
filelock==3.0.12
|
||||
# via virtualenv
|
||||
importlib-metadata==3.3.0
|
||||
# via virtualenv
|
||||
six==1.15.0
|
||||
# via virtualenv
|
||||
typing-extensions==3.7.4.3
|
||||
# via importlib-metadata
|
||||
virtualenv==20.2.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.36.2
|
||||
# via
|
||||
# -r cibuildwheel/resources/constraints.in
|
||||
# delocate
|
||||
zipp==3.4.0
|
||||
# via importlib-metadata
|
||||
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
pip==20.2.4 # via -r cibuildwheel/resources/constraints.in
|
||||
setuptools==50.3.2 # via -r cibuildwheel/resources/constraints.in
|
||||
pip==20.3.3
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
setuptools==51.1.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
#
|
||||
# This file is autogenerated by pip-compile
|
||||
# To update, run:
|
||||
#
|
||||
# bin/update_dependencies.py
|
||||
#
|
||||
appdirs==1.4.4
|
||||
# via virtualenv
|
||||
delocate==0.8.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.1
|
||||
# via virtualenv
|
||||
filelock==3.0.12
|
||||
# via virtualenv
|
||||
six==1.15.0
|
||||
# via virtualenv
|
||||
virtualenv==20.2.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.36.2
|
||||
# via
|
||||
# -r cibuildwheel/resources/constraints.in
|
||||
# delocate
|
||||
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
pip==20.3.3
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
setuptools==51.1.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
@@ -0,0 +1,28 @@
|
||||
#
|
||||
# This file is autogenerated by pip-compile
|
||||
# To update, run:
|
||||
#
|
||||
# bin/update_dependencies.py
|
||||
#
|
||||
appdirs==1.4.4
|
||||
# via virtualenv
|
||||
delocate==0.8.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.1
|
||||
# via virtualenv
|
||||
filelock==3.0.12
|
||||
# via virtualenv
|
||||
six==1.15.0
|
||||
# via virtualenv
|
||||
virtualenv==20.2.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.36.2
|
||||
# via
|
||||
# -r cibuildwheel/resources/constraints.in
|
||||
# delocate
|
||||
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
pip==20.3.3
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
setuptools==51.1.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
@@ -2,16 +2,27 @@
|
||||
# This file is autogenerated by pip-compile
|
||||
# To update, run:
|
||||
#
|
||||
# bin/update_constraints.py
|
||||
# bin/update_dependencies.py
|
||||
#
|
||||
appdirs==1.4.4 # via virtualenv
|
||||
delocate==0.8.2 # via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.1 # via virtualenv
|
||||
filelock==3.0.12 # via virtualenv
|
||||
six==1.15.0 # via virtualenv
|
||||
virtualenv==20.2.1 # via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.35.1 # via -r cibuildwheel/resources/constraints.in, delocate
|
||||
appdirs==1.4.4
|
||||
# via virtualenv
|
||||
delocate==0.8.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.1
|
||||
# via virtualenv
|
||||
filelock==3.0.12
|
||||
# via virtualenv
|
||||
six==1.15.0
|
||||
# via virtualenv
|
||||
virtualenv==20.2.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.36.2
|
||||
# via
|
||||
# -r cibuildwheel/resources/constraints.in
|
||||
# delocate
|
||||
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
pip==20.2.4 # via -r cibuildwheel/resources/constraints.in
|
||||
setuptools==50.3.2 # via -r cibuildwheel/resources/constraints.in
|
||||
pip==20.3.3
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
setuptools==51.1.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
[x86_64]
|
||||
manylinux1 = quay.io/pypa/manylinux1_x86_64:2020-11-11-0f1f128
|
||||
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2020-11-11-201fb79
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2020-11-11-bc8ce45
|
||||
manylinux1 = quay.io/pypa/manylinux1_x86_64:2020-12-30-e2b3664
|
||||
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2020-12-30-3161d69
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2020-12-30-68d3257
|
||||
|
||||
[i686]
|
||||
manylinux1 = quay.io/pypa/manylinux1_i686:2020-11-11-0f1f128
|
||||
manylinux2010 = quay.io/pypa/manylinux2010_i686:2020-11-11-201fb79
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2020-11-11-bc8ce45
|
||||
manylinux1 = quay.io/pypa/manylinux1_i686:2020-12-30-e2b3664
|
||||
manylinux2010 = quay.io/pypa/manylinux2010_i686:2020-12-30-3161d69
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2020-12-30-68d3257
|
||||
|
||||
[pypy_x86_64]
|
||||
manylinux2010 = pypywheels/manylinux2010-pypy_x86_64:2020-11-21-a03b9e9
|
||||
manylinux2010 = pypywheels/manylinux2010-pypy_x86_64:2020-12-11-f1e0e80
|
||||
|
||||
[aarch64]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2020-11-11-bc8ce45
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2020-12-30-68d3257
|
||||
|
||||
[ppc64le]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2020-11-11-bc8ce45
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2020-12-30-68d3257
|
||||
|
||||
[s390x]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2020-11-11-bc8ce45
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2020-12-30-68d3257
|
||||
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
diff --git a/lib-python/3/sysconfig.py b/lib-python/3/sysconfig.py
|
||||
index 0d08cde66b4150e1772c13fdc6fe34d079c2b10d..30c77d165a2505d98bc7660ff0cc3b728f56c682 100644
|
||||
--- a/lib-python/3/sysconfig.py
|
||||
+++ b/lib-python/3/sysconfig.py
|
||||
@@ -618,9 +618,6 @@ def get_config_vars(*args):
|
||||
import _osx_support
|
||||
_osx_support.customize_config_vars(_CONFIG_VARS)
|
||||
|
||||
- _CONFIG_VARS['INCLUDEPY'] = os.path.join(_CONFIG_VARS['prefix'],
|
||||
- 'include')
|
||||
-
|
||||
if args:
|
||||
vals = []
|
||||
for name in args:
|
||||
diff --git a/lib_pypy/_sysconfigdata.py b/lib_pypy/_sysconfigdata.py
|
||||
index f1cca41a4b7553819bb1a2a63af1c1a9b8591ce9..a34216e8e12b82abd72fabdd7793b3e8bb19bbcf 100644
|
||||
--- a/lib_pypy/_sysconfigdata.py
|
||||
+++ b/lib_pypy/_sysconfigdata.py
|
||||
@@ -5,6 +5,7 @@ from distutils.spawn import find_executable
|
||||
|
||||
so_ext = _imp.extension_suffixes()[0]
|
||||
|
||||
+mybase = os.path.dirname(os.path.dirname(__file__))
|
||||
|
||||
build_time_vars = {
|
||||
# SOABI is PEP 3149 compliant, but CPython3 has so_ext.split('.')[1]
|
||||
@@ -25,7 +26,8 @@ build_time_vars = {
|
||||
'AR': "ar",
|
||||
'ARFLAGS': "rc",
|
||||
'EXE': "",
|
||||
- 'LIBDIR': os.path.join(sys.prefix, 'bin'),
|
||||
+ 'LIBDIR': os.path.join(mybase, 'lib'),
|
||||
+ 'INCLUDEPY': os.path.join(mybase, 'include'),
|
||||
}
|
||||
|
||||
if find_executable("gcc"):
|
||||
@@ -0,0 +1,27 @@
|
||||
--- a/lib-python/2.7/sysconfig.py
|
||||
+++ b/lib-python/2.7/sysconfig.py
|
||||
@@ -553,9 +553,6 @@ def get_config_vars(*args):
|
||||
if type_ == imp.C_EXTENSION:
|
||||
_CONFIG_VARS['SOABI'] = suffix.split('.')[1]
|
||||
break
|
||||
- _CONFIG_VARS['INCLUDEPY'] = os.path.join(_CONFIG_VARS['prefix'],
|
||||
- 'include')
|
||||
-
|
||||
if args:
|
||||
vals = []
|
||||
for name in args:
|
||||
--- a/lib_pypy/_sysconfigdata.py
|
||||
+++ b/lib_pypy/_sysconfigdata.py
|
||||
@@ -1,5 +1,11 @@
|
||||
-import imp
|
||||
+import imp, os
|
||||
+
|
||||
+mybase = os.path.dirname(os.path.dirname(__file__))
|
||||
|
||||
build_time_vars = {
|
||||
"SO": [s[0] for s in imp.get_suffixes() if s[2] == imp.C_EXTENSION][0]
|
||||
}
|
||||
+
|
||||
+build_time_vars['LIBDIR'] = os.path.join(mybase, 'lib')
|
||||
+build_time_vars['INCLUDEPY'] = os.path.join(mybase, 'include')
|
||||
+
|
||||
@@ -56,12 +56,12 @@ def get_python_configurations(build_selector: BuildSelector) -> List[PythonConfi
|
||||
PythonConfiguration(version='3.5.4', arch='64', identifier='cp35-win_amd64', url=None),
|
||||
PythonConfiguration(version='3.6.8', arch='32', identifier='cp36-win32', url=None),
|
||||
PythonConfiguration(version='3.6.8', arch='64', identifier='cp36-win_amd64', url=None),
|
||||
PythonConfiguration(version='3.7.8', arch='32', identifier='cp37-win32', url=None),
|
||||
PythonConfiguration(version='3.7.8', arch='64', identifier='cp37-win_amd64', url=None),
|
||||
PythonConfiguration(version='3.8.4', arch='32', identifier='cp38-win32', url=None),
|
||||
PythonConfiguration(version='3.8.4', arch='64', identifier='cp38-win_amd64', url=None),
|
||||
PythonConfiguration(version='3.9.0', arch='32', identifier='cp39-win32', url=None),
|
||||
PythonConfiguration(version='3.9.0', arch='64', identifier='cp39-win_amd64', url=None),
|
||||
PythonConfiguration(version='3.7.9', arch='32', identifier='cp37-win32', url=None),
|
||||
PythonConfiguration(version='3.7.9', arch='64', identifier='cp37-win_amd64', url=None),
|
||||
PythonConfiguration(version='3.8.7', arch='32', identifier='cp38-win32', url=None),
|
||||
PythonConfiguration(version='3.8.7', arch='64', identifier='cp38-win_amd64', url=None),
|
||||
PythonConfiguration(version='3.9.1', arch='32', identifier='cp39-win32', url=None),
|
||||
PythonConfiguration(version='3.9.1', arch='64', identifier='cp39-win_amd64', url=None),
|
||||
# PyPy
|
||||
PythonConfiguration(version='2.7', arch='32', identifier='pp27-win32', url='https://downloads.python.org/pypy/pypy2.7-v7.3.3-win32.zip'),
|
||||
PythonConfiguration(version='3.6', arch='32', identifier='pp36-win32', url='https://downloads.python.org/pypy/pypy3.6-v7.3.3-win32.zip'),
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
---
|
||||
title: Changelog
|
||||
---
|
||||
|
||||
{%
|
||||
include-markdown "../README.md"
|
||||
start="<!--changelog-start-->"
|
||||
end="<!--changelog-end-->"
|
||||
%}
|
||||
|
||||
<script>
|
||||
// undo the scrollTop that the theme did on this page, as there are loads
|
||||
// of toc entries and it's disorientating.
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
$('.wy-nav-side').scrollTop(0)
|
||||
})
|
||||
</script>
|
||||
@@ -0,0 +1,231 @@
|
||||
# Fields:
|
||||
# name: required, printed name
|
||||
# gh: Github repo (eventually a url: could be added for non-github projects)
|
||||
# stars: Github repo (optional, if different from package, such as for Twisted)
|
||||
# os: Operating system list, [windows, apple, linux] (optional)
|
||||
# ci: [appveyor, github, azurepipelines, circleci, gitlab, travisci] (optional)
|
||||
# notes: (text, optional)
|
||||
|
||||
- name: Matplotlib
|
||||
gh: matplotlib/matplotlib
|
||||
notes: The venerable Matplotlib, a Python library with C++ portions
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
|
||||
- name: pyinstrument_cext
|
||||
gh: joerick/pyinstrument_cext
|
||||
ci: [travisci, appveyor]
|
||||
os: [windows, apple, linux]
|
||||
notes: A simple C extension, without external dependencies
|
||||
|
||||
- name: websockets
|
||||
gh: aaugustin/websockets
|
||||
ci: [travisci]
|
||||
ci_config: .travis.yml
|
||||
os: [apple, linux]
|
||||
notes: |
|
||||
Library for building WebSocket servers and clients. Mostly written in
|
||||
Python, with a small C 'speedups' extension module.
|
||||
|
||||
- name: Parselmouth
|
||||
gh: YannickJadoul/Parselmouth
|
||||
notes: 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.
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
|
||||
# Seems to be defunct
|
||||
# - name: python-admesh
|
||||
# gh: admesh/python-admesh
|
||||
|
||||
- name: pybase64
|
||||
gh: mayeut/pybase64
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
|
||||
|
||||
- name: KDEpy
|
||||
gh: tommyod/KDEpy
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
|
||||
- name: AutoPy
|
||||
gh: autopilot-rs/autopy
|
||||
ci: [travisci]
|
||||
os: [windows, apple, linux]
|
||||
notes: Includes a Windows Travis build.
|
||||
|
||||
# Seems to be defunct
|
||||
# - name: apriltags2-ethz
|
||||
# gh: safijari/apriltags2_ethz
|
||||
|
||||
- name: TgCrypto
|
||||
gh: pyrogram/tgcrypto
|
||||
ci: [travisci]
|
||||
os: [windows, apple, linux]
|
||||
notes: Includes a Windows Travis build.
|
||||
|
||||
- name: twisted-iocpsupport
|
||||
gh: twisted/twisted-iocpsupport
|
||||
stars: twisted/twisted
|
||||
notes: A submodule of Twisted that hooks into native C APIs using Cython.
|
||||
ci: [github]
|
||||
os: [windows]
|
||||
|
||||
# cibuildwheel moved to backup folder
|
||||
# - name: gmic-py
|
||||
# gh: myselfhimself/gmic-py
|
||||
|
||||
- name: River
|
||||
gh: online-ml/river
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
|
||||
- name: PyAV
|
||||
gh: PyAV-Org/PyAV
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
notes: Pythonic bindings for FFmpeg's libraries.
|
||||
|
||||
- name: aiortc
|
||||
gh: aiortc/aiortc
|
||||
ci: [github]
|
||||
os: [apple, linux]
|
||||
notes: WebRTC and ORTC implementation for Python using asyncio.
|
||||
|
||||
- name: aioquic
|
||||
gh: aiortc/aioquic
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
|
||||
- name: pikepdf
|
||||
gh: pikepdf/pikepdf
|
||||
ci: [azurepipelines]
|
||||
os: [windows, apple, linux]
|
||||
|
||||
- name: fathon
|
||||
gh: stfbnc/fathon
|
||||
ci: [travisci]
|
||||
os: [apple, linux]
|
||||
|
||||
- name: etebase-py
|
||||
gh: etesync/etebase-py
|
||||
notes: Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed.
|
||||
ci: [travisci]
|
||||
os: [linux]
|
||||
|
||||
- name: xmlstarlet
|
||||
gh: dimitern/xmlstarlet
|
||||
notes: Python 3.6+ CFFI bindings with true MSVC build.
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
|
||||
- name: bx-python
|
||||
gh: bxlab/bx-python
|
||||
notes: A library that includes Cython extensions.
|
||||
ci: [travisci]
|
||||
os: [apple, linux]
|
||||
|
||||
- name: coverage.py
|
||||
gh: nedbat/coveragepy
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
notes: The coverage tool for Python
|
||||
|
||||
- name: scikit-learn
|
||||
gh: scikit-learn/scikit-learn
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
ci_config: .github/workflows/wheels.yml
|
||||
notes: |
|
||||
The machine learning library. A complex but clean config using many of
|
||||
cibuildwheel's features to build a large project with Cython and C++
|
||||
extensions.
|
||||
|
||||
- name: scikit-image
|
||||
gh: scikit-image/scikit-image
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
ci_config: .github/workflows/cibuildwheel.yml
|
||||
notes: |
|
||||
Image processing library. Uses cibuildwheel to build and test a project
|
||||
that uses Cython with platform-native code.
|
||||
|
||||
- name: google neuroglancer
|
||||
gh: google/neuroglancer
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
|
||||
- name: h5py
|
||||
gh: h5py/h5py
|
||||
ci: [azurepipelines]
|
||||
os: [windows, apple, linux]
|
||||
|
||||
- name: pyzmq
|
||||
gh: zeromq/pyzmq
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
ci_config: .github/workflows/wheels.yml
|
||||
notes: |
|
||||
Python bindings for zeromq, the networking library. Uses Cython and CFFI.
|
||||
|
||||
- name: python-rapidjson
|
||||
gh: python-rapidjson/python-rapidjson
|
||||
ci: [travisci, gitlab, appveyor]
|
||||
os: [windows, linux]
|
||||
|
||||
- name: jq.py
|
||||
gh: mwilliamson/jq.py
|
||||
ci: [travisci]
|
||||
os: [apple, linux]
|
||||
|
||||
- name: pybind11 python_example
|
||||
gh: pybind/python_example
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
|
||||
- name: pybind11 cmake_example
|
||||
gh: pybind/cmake_example
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
|
||||
- name: pybind11 scikit_build_example
|
||||
gh: pybind/scikit_build_example
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
|
||||
- name: iminuit
|
||||
gh: scikit-hep/iminuit
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
|
||||
- name: pyjet
|
||||
gh: scikit-hep/pyjet
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
|
||||
- name: numpythia
|
||||
gh: scikit-hep/numpythia
|
||||
ci: [github]
|
||||
os: [apple, linux]
|
||||
|
||||
- name: boost-histogram
|
||||
gh: scikit-hep/boost-histogram
|
||||
ci: [github, travisci]
|
||||
os: [windows, apple, linux]
|
||||
notes: Supports full range of wheels, including PyPy and alternate archs.
|
||||
|
||||
- name: Rtree
|
||||
gh: Toblerity/rtree
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
|
||||
- name: psutil
|
||||
gh: giampaolo/psutil
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
|
||||
- name: Dependency Injector
|
||||
gh: ets-labs/python-dependency-injector
|
||||
ci: [travisci]
|
||||
os: [windows, apple, linux]
|
||||
notes: Dependency injection framework for Python, uses Windows TravisCI
|
||||
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 24 24" width="16px" fill="#606060"><title>Apple icon</title><path d="M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701"/></svg>
|
||||
|
After Width: | Height: | Size: 683 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 24 24" width="16px" fill="#606060"><title>AppVeyor icon</title><path d="M 12,0 C 18.6,0 24,5.4 24,12 24,18.6 18.6,24 12,24 5.4,24 0,18.6 0,12 0,5.4 5.4,0 12,0 Z m 2.94,14.34 C 16.26,12.66 16.08,10.26 14.4,9 12.78,7.74 10.38,8.04 9,9.72 7.68,11.4 7.86,13.8 9.54,15.06 c 1.68,1.26 4.08,0.96 5.4,-0.72 z m -6.42,7.8 c 0.72,0.3 2.28,0.6 3.06,0.6 l 5.22,-7.56 c 1.68,-2.52 1.26,-5.94 -1.08,-7.8 -2.1,-1.68 -5.04,-1.62 -7.14,0 l -7.26,5.58 c 0.18,1.92 0.72,2.88 0.72,2.94 l 4.14,-4.5 c -0.3,1.98 0.42,4.02 2.1,5.28 1.44,1.14 3.18,1.44 4.86,1.08 z"/></svg>
|
||||
|
After Width: | Height: | Size: 613 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 24 24" width="16px" fill="#606060"><title>Azure Pipelines icon</title><path d="M1.8 18H0v6h6v-1.8H1.8zM23 0h-8.93a2 2 0 0 0-1.67.89L9 5.99H1a1 1 0 0 0-1 1v5.5l3.5 3.61 1.2-1.29 1.5 1.5L5 17.53l1.48 1.48 1.22-1.22 1.5 1.51L8 20.5l3.5 3.5H17a1 1 0 0 0 1-1v-8l5.11-3.4A2 2 0 0 0 24 9.92V1a1 1 0 0 0-1-1zm-5 9a3 3 0 1 1 0-6 3 3 0 0 1 0 6z"/></svg>
|
||||
|
After Width: | Height: | Size: 407 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 24 24" width="16px" fill="#606060"><title>CircleCI icon</title><path d="M8.963 12c0-1.584 1.284-2.855 2.855-2.855 1.572 0 2.856 1.284 2.856 2.855 0 1.572-1.284 2.856-2.856 2.856-1.57 0-2.855-1.284-2.855-2.856zm2.855-12C6.215 0 1.522 3.84.19 9.025c-.01.036-.01.07-.01.12 0 .313.252.576.575.576H5.59c.23 0 .433-.13.517-.333.997-2.16 3.18-3.672 5.712-3.672 3.466 0 6.286 2.82 6.286 6.287 0 3.47-2.82 6.29-6.29 6.29-2.53 0-4.714-1.5-5.71-3.673-.097-.19-.29-.336-.517-.336H.755c-.312 0-.575.253-.575.576 0 .037.014.072.014.12C1.514 20.16 6.214 24 11.818 24c6.624 0 12-5.375 12-12 0-6.623-5.376-12-12-12z"/></svg>
|
||||
|
After Width: | Height: | Size: 671 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 24 24" width="16px" fill="#606060"><title>GitHub icon</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>
|
||||
|
After Width: | Height: | Size: 855 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 24 24" width="16px" fill="#606060"><title>GitLab icon</title><path d="M4.845.904c-.435 0-.82.28-.955.692C2.639 5.449 1.246 9.728.07 13.335a1.437 1.437 0 00.522 1.607l11.071 8.045c.2.145.472.144.67-.004l11.073-8.04a1.436 1.436 0 00.522-1.61c-1.285-3.942-2.683-8.256-3.817-11.746a1.004 1.004 0 00-.957-.684.987.987 0 00-.949.69l-2.405 7.408H8.203l-2.41-7.408a.987.987 0 00-.942-.69h-.006zm-.006 1.42l2.173 6.678H2.675zm14.326 0l2.168 6.678h-4.341zm-10.593 7.81h6.862c-1.142 3.52-2.288 7.04-3.434 10.559L8.572 10.135zm-5.514.005h4.321l3.086 9.5zm13.567 0h4.325c-2.467 3.17-4.95 6.328-7.411 9.502 1.028-3.167 2.059-6.334 3.086-9.502zM2.1 10.762l6.977 8.947-7.817-5.682a.305.305 0 01-.112-.341zm19.798 0l.952 2.922a.305.305 0 01-.11.341v.002l-7.82 5.68.026-.035z"/></svg>
|
||||
|
After Width: | Height: | Size: 830 B |
|
After Width: | Height: | Size: 5.4 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 24 24" width="16px" fill="#606060"><title>Travis CI icon</title><path d="M9.32 13.025a.485.485 0 1 1-.97 0c0-.446-.167-.758-.406-.758-.239 0-.405.312-.405.758a.485.485 0 1 1-.97 0c0-1.187.713-1.728 1.375-1.728s1.376.541 1.376 1.728zm6.017.485a.485.485 0 0 0 .485-.485c0-.446.167-.758.405-.758s.405.312.405.758a.485.485 0 1 0 .97 0c0-1.187-.713-1.728-1.375-1.728s-1.375.541-1.375 1.728c0 .268.217.485.485.485zm7.967-4.454l-.191 2.459a.801.801 0 0 1-.367.623.852.852 0 0 1-.46.13 1.07 1.07 0 0 1-.366-.068c-.271-.101-.544-.192-.817-.285a8.978 8.978 0 0 1-.094 1.614c-.04.242-.092.471-.138.707a.485.485 0 0 1-.024.125 19.471 19.471 0 0 1-1.033 3.513l.033-.02.897-.537c.193-.137.599-.122.815.1a.645.645 0 0 1 .173.577.743.743 0 0 1-.053.159c-.061.135-.319.706-.866 1.906-.675 1.483-2.06 1.77-2.121 1.782.001.001-.907.214-1.879.44C15.458 23.419 13.87 24 12.087 24c-1.84 0-3.448-.58-4.787-1.713l-1.924-.45c-.041-.008-1.427-.294-2.103-1.778l-.87-1.914c-.005-.019-.05-.158-.053-.177-.009-.625.621-.914 1.023-.632l.858.512c.006.003.074.043.171.085a20.443 20.443 0 0 1-.982-3.444c-.063-.317-.129-.63-.183-.96a8.937 8.937 0 0 1-.09-1.7c-.357.118-.713.24-1.066.372-.292.109-.593.087-.827-.062a.802.802 0 0 1-.366-.621L.695 9.055c-.036-.475.305-.969.794-1.152l.3-.117c.225-.089.505-.198.837-.318C3.65 3.124 7.566 0 12.041 0c4.516 0 8.438 3.158 9.434 7.549.472.153.843.281 1.036.355.492.183.833.677.793 1.152zm-4.612 8.973c.369-.815.678-1.708.93-2.67l-.997.713a.952.952 0 0 1-.655.166l-4.467-.47a.96.96 0 0 1-.821-.698l-.558-1.923a2.482 2.482 0 0 0-.244 0l-.56 1.93a.955.955 0 0 1-.82.691l-4.471.471a.951.951 0 0 1-.642-.162l-.723-.503c.231.889.506 1.708.824 2.451.609-.028 1.207-.069 1.209-.069.001 0 .434-.039.788-.332l1.061-.885c.148-.165.652-.465 1.33-.271.196.055.495.146.815.243.062.019.12.05.17.092.532.445 1.832.445 2.365.002a.481.481 0 0 1 .168-.091c.337-.103.631-.192.823-.247.68-.193 1.182.108 1.374.314l1.016.843c.353.294.785.332.789.332-.001.001.658.045 1.296.073zm-6.605 5.001a6.42 6.42 0 0 0 1.949-.313c-.932-.209-1.555-1.019-1.588-1.062l-.406-.542-.407.543c-.031.043-.641.842-1.558 1.06.63.196 1.295.314 2.01.314zm6.941-4.016a63.622 63.622 0 0 1-1.701-.089 2.519 2.519 0 0 1-1.339-.554l-1.065-.888c-.055-.051-.187-.152-.442-.083-.176.05-.436.13-.717.216-.878.655-2.567.655-3.443-.003a43.693 43.693 0 0 0-.709-.212c-.258-.076-.386.03-.411.052l-1.097.918a2.523 2.523 0 0 1-1.341.553s-.872.059-1.594.085h-.002l-.106.004a2.41 2.41 0 0 1-1.341-.343l-.018-.01.453.996c.463 1.017 1.389 1.225 1.427 1.232.014.004 2.754.646 3.822.889.781.174 1.447-.696 1.454-.705l.795-1.061c.183-.245.594-.245.776 0l.796 1.061c.007.009.682.881 1.455.705 1.067-.243 3.807-.886 3.807-.886a2.193 2.193 0 0 0 1.442-1.236l.452-.993-.026.015a2.27 2.27 0 0 1-1.327.337zm1.096-7.412a28.286 28.286 0 0 0-15.998-.075 8.025 8.025 0 0 0 .067 1.845c.045.275.1.535.152.8l1.591 1.108 4.461-.476.642-2.243a.488.488 0 0 1 .395-.345 3.855 3.855 0 0 1 1.135.003.482.482 0 0 1 .394.344l.652 2.245 4.462.468 1.864-1.336c.036-.19.079-.374.111-.568a7.89 7.89 0 0 0 .072-1.77zm2.214-2.623c-.005-.034-.073-.133-.165-.167l-.004-.001c-.22-.083-.68-.242-1.256-.423l-.007-.005c-.955-.299-2.771-.823-4.267-.99a.485.485 0 0 1 .108-.964c1.192.134 2.529.466 3.637.787C19.298 3.552 15.913.97 12.041.97c-3.832 0-7.207 2.549-8.318 6.165a20.252 20.252 0 0 1 3.27-.705.484.484 0 1 1 .121.962 19.235 19.235 0 0 0-3.909.899l-.005.004c-.432.149-.785.288-1.056.394l-.315.123c-.094.035-.162.135-.167.175l.177 2.264a29.36 29.36 0 0 1 10.164-1.817c3.442 0 6.881.607 10.157 1.82l.178-2.275zm-8.534-5.986h-3.539a.485.485 0 0 0-.485.485v.811a.485.485 0 1 0 .97 0v-.326h.746v3.308h-.521a.485.485 0 1 0 0 .97h2.061a.485.485 0 1 0 0-.97h-.57V3.963h.853v.326a.485.485 0 1 0 .97 0v-.811a.485.485 0 0 0-.485-.485z"/></svg>
|
||||
|
After Width: | Height: | Size: 3.7 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 24 24" width="16px" fill="#606060"><title>Windows icon</title><path d="M0 3.449L9.75 2.1v9.451H0m10.949-9.602L24 0v11.4H10.949M0 12.6h9.75v9.451L0 20.699M10.949 12.6H24V24l-12.9-1.801"/></svg>
|
||||
|
After Width: | Height: | Size: 256 B |
@@ -29,7 +29,6 @@ h1, h2, h3, h4, h5, h6 {
|
||||
border-bottom: 1px solid #e1e4e5;
|
||||
margin-bottom: 0.8em;
|
||||
padding-bottom: 0.2em;
|
||||
|
||||
}
|
||||
|
||||
.rst-content blockquote {
|
||||
|
||||
@@ -81,3 +81,56 @@ To add the `/d2FH4-` flag to a standard `setup.py` using `setuptools`, the `extr
|
||||
```
|
||||
|
||||
To investigate the dependencies of a C extension (i.e., the `.pyd` file, a DLL in disguise) on Windows, [Dependency Walker](http://www.dependencywalker.com/) is a great tool.
|
||||
|
||||
|
||||
### Automatic updates {: #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.
|
||||
|
||||
#### Option 1: GitHub Action
|
||||
|
||||
If you use GitHub Actions for builds, you can use cibuildwheel as an action:
|
||||
|
||||
```yaml
|
||||
uses: joerick/cibuildwheel@v1.7.4
|
||||
```
|
||||
|
||||
This is a composite step that just installs and runs cibuildwheel. You can set command-line options as `with:` parameters, and use `env:` as normal.
|
||||
|
||||
Then, your `dependabot.yml` file could look like this:
|
||||
|
||||
```yaml
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
ignore:
|
||||
# Optional: Official actions have moving tags like v1;
|
||||
# if you use those, you don't need updates.
|
||||
- dependency-name: "actions/*"
|
||||
```
|
||||
|
||||
#### Option 2: Requirement files
|
||||
|
||||
The second option, and the only one that supports other CI systems, is using a `requirements-*.txt` file. The file should have a distinct name and have only one entry:
|
||||
|
||||
```bash
|
||||
# requirements-cibw.txt
|
||||
cibuildwheel==1.7.4
|
||||
```
|
||||
|
||||
Then your install step would have `python -m pip install -r requirements-cibw.txt` in it. Your `dependabot.yml` file could look like this:
|
||||
|
||||
```yaml
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "pip"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
```
|
||||
|
||||
This will also try to update other pins in all requirement files, so be sure you want to do that. The only control you have over the files used is via the directory option.
|
||||
|
||||
@@ -3,7 +3,7 @@ title: Home
|
||||
---
|
||||
|
||||
{%
|
||||
includemarkdown "../README.md"
|
||||
include-markdown "../README.md"
|
||||
start="<!--intro-start-->"
|
||||
end="<!--intro-end-->"
|
||||
%}
|
||||
|
||||
@@ -1,84 +0,0 @@
|
||||
import cgi
|
||||
import re
|
||||
from pathlib import Path
|
||||
|
||||
import mkdocs
|
||||
|
||||
INCLUDE_TAG_REGEX = re.compile(
|
||||
r'''
|
||||
{% # opening tag
|
||||
\s*
|
||||
include # directive name
|
||||
\s+
|
||||
"(?P<filename>[^"]+)" # "filename"
|
||||
\s*
|
||||
%} # closing tag
|
||||
''',
|
||||
flags=re.VERBOSE,
|
||||
)
|
||||
|
||||
INCLUDEMARKDOWN_TAG_REGEX = re.compile(
|
||||
r'''
|
||||
{% # opening tag
|
||||
\s*
|
||||
includemarkdown # directive name
|
||||
\s+
|
||||
"(?P<filename>[^"]+)" # "filename"
|
||||
(?:\s+start="(?P<start>[^"]+)")? # optional start expression
|
||||
(?:\s+end="(?P<end>[^"]+)")? # optional end expression
|
||||
\s*
|
||||
%} # closing tag
|
||||
''',
|
||||
flags=re.VERBOSE,
|
||||
)
|
||||
|
||||
|
||||
class ImportMarkdownPlugin(mkdocs.plugins.BasePlugin):
|
||||
def on_page_markdown(self, markdown, page, **kwargs):
|
||||
page_src_path = page.file.abs_src_path
|
||||
|
||||
def found_include_tag(match):
|
||||
filename = match.group('filename')
|
||||
|
||||
file_path_abs = Path(page_src_path).parent / filename
|
||||
|
||||
if not file_path_abs.exists():
|
||||
raise ValueError('file not found', filename)
|
||||
|
||||
text_to_include = file_path_abs.read_text(encoding='utf8')
|
||||
|
||||
# Allow good practice of having a final newline in the file
|
||||
if text_to_include.endswith('\n'):
|
||||
text_to_include = text_to_include[:-1]
|
||||
|
||||
return text_to_include
|
||||
|
||||
def found_includemarkdown_tag(match):
|
||||
filename = match.group('filename')
|
||||
start = match.group('start')
|
||||
end = match.group('end')
|
||||
|
||||
file_path_abs = Path(page_src_path).parent / filename
|
||||
|
||||
if not file_path_abs.exists():
|
||||
raise ValueError('file not found', filename)
|
||||
|
||||
text_to_include = file_path_abs.read_text(encoding='utf8')
|
||||
|
||||
if start:
|
||||
_, _, text_to_include = text_to_include.partition(start)
|
||||
|
||||
if end:
|
||||
text_to_include, _, _ = text_to_include.partition(end)
|
||||
|
||||
return (
|
||||
'<!-- BEGIN INCLUDE %s %s %s -->\n' % (
|
||||
filename, cgi.escape(start or ''), cgi.escape(end or '')
|
||||
)
|
||||
+ text_to_include
|
||||
+ '\n<!-- END INCLUDE -->'
|
||||
)
|
||||
|
||||
markdown = re.sub(INCLUDE_TAG_REGEX, found_include_tag, markdown)
|
||||
markdown = re.sub(INCLUDEMARKDOWN_TAG_REGEX, found_includemarkdown_tag, markdown)
|
||||
return markdown
|
||||
@@ -1,15 +0,0 @@
|
||||
from setuptools import setup
|
||||
|
||||
setup(
|
||||
name='mkdocs_include_markdown_plugin',
|
||||
version='1.0',
|
||||
author='Joe Rickerby',
|
||||
license='Apache 2',
|
||||
packages=['mkdocs_include_markdown_plugin'],
|
||||
entry_points={
|
||||
'mkdocs.plugins': [
|
||||
'importmarkdown = mkdocs_include_markdown_plugin.plugin:ImportMarkdownPlugin',
|
||||
]
|
||||
},
|
||||
zip_safe=False
|
||||
)
|
||||
@@ -17,6 +17,8 @@ For more info on this file, check out the [docs](https://help.github.com/en/acti
|
||||
|
||||
[`examples/github-deploy.yml`](https://github.com/joerick/cibuildwheel/blob/master/examples/github-deploy.yml) extends this minimal example with a demonstration of how to automatically upload the built wheels to PyPI.
|
||||
|
||||
You can also use cibuildwheel directly as an action with `uses: joerick/cibuildwheel@v1.7.4`; this combines the download and run steps into a single action, and command line arguments are available via `with:`. This makes it easy to manage cibuildwheel updates via normal actions update mechanisms like dependabot, see [Automatic updates](faq.md#automatic-updates).
|
||||
|
||||
# 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.
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
---
|
||||
title: Working examples
|
||||
---
|
||||
|
||||
{%
|
||||
include-markdown "../README.md"
|
||||
start="<!--working-examples-start-->"
|
||||
end="<!--working-examples-end-->"
|
||||
%}
|
||||
|
||||
<style>
|
||||
.wy-nav-content {
|
||||
/* this table benefits from a wider page */
|
||||
max-width: 1000px;
|
||||
}
|
||||
.rst-content .section table img {
|
||||
/* make the icons darker on this page */
|
||||
filter: brightness(0.5);
|
||||
}
|
||||
</style>
|
||||
@@ -12,7 +12,7 @@ stack: python 3.7
|
||||
init:
|
||||
- cmd: set PATH=C:\Python37;C:\Python37\Scripts;%PATH%
|
||||
|
||||
install: python -m pip install cibuildwheel==1.7.0
|
||||
install: python -m pip install cibuildwheel==1.7.4
|
||||
|
||||
build_script: python -m cibuildwheel --output-dir wheelhouse
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ jobs:
|
||||
- bash: |
|
||||
set -o errexit
|
||||
python3 -m pip install --upgrade pip
|
||||
pip3 install cibuildwheel==1.7.0
|
||||
pip3 install cibuildwheel==1.7.4
|
||||
displayName: Install dependencies
|
||||
- bash: cibuildwheel --output-dir wheelhouse .
|
||||
displayName: Build wheels
|
||||
@@ -20,7 +20,7 @@ jobs:
|
||||
- bash: |
|
||||
set -o errexit
|
||||
python3 -m pip install --upgrade pip
|
||||
python3 -m pip install cibuildwheel==1.7.0
|
||||
python3 -m pip install cibuildwheel==1.7.4
|
||||
displayName: Install dependencies
|
||||
- bash: cibuildwheel --output-dir wheelhouse .
|
||||
displayName: Build wheels
|
||||
@@ -36,7 +36,7 @@ jobs:
|
||||
- bash: |
|
||||
set -o errexit
|
||||
python -m pip install --upgrade pip
|
||||
pip install cibuildwheel==1.7.0
|
||||
pip install cibuildwheel==1.7.4
|
||||
displayName: Install dependencies
|
||||
- bash: cibuildwheel --output-dir wheelhouse .
|
||||
displayName: Build wheels
|
||||
|
||||
@@ -11,7 +11,7 @@ jobs:
|
||||
- run:
|
||||
name: Build the Linux wheels.
|
||||
command: |
|
||||
pip3 install --user cibuildwheel==1.7.0
|
||||
pip3 install --user cibuildwheel==1.7.4
|
||||
cibuildwheel --output-dir wheelhouse
|
||||
- store_artifacts:
|
||||
path: wheelhouse/
|
||||
@@ -25,7 +25,7 @@ jobs:
|
||||
- run:
|
||||
name: Build the OS X wheels.
|
||||
command: |
|
||||
pip3 install cibuildwheel==1.7.0
|
||||
pip3 install cibuildwheel==1.7.4
|
||||
cibuildwheel --output-dir wheelhouse
|
||||
- store_artifacts:
|
||||
path: wheelhouse/
|
||||
|
||||
@@ -28,7 +28,7 @@ jobs:
|
||||
|
||||
- name: Install cibuildwheel
|
||||
run: |
|
||||
python -m pip install cibuildwheel==1.7.0
|
||||
python -m pip install cibuildwheel==1.7.4
|
||||
|
||||
- name: Install Visual C++ for Python 2.7
|
||||
if: runner.os == 'Windows'
|
||||
|
||||
@@ -20,7 +20,7 @@ jobs:
|
||||
|
||||
- name: Install cibuildwheel
|
||||
run: |
|
||||
python -m pip install cibuildwheel==1.7.0
|
||||
python -m pip install cibuildwheel==1.7.4
|
||||
|
||||
- name: Install Visual C++ for Python 2.7
|
||||
if: runner.os == 'Windows'
|
||||
|
||||
@@ -19,22 +19,18 @@ jobs:
|
||||
# make sure it's on PATH as 'python3'
|
||||
- ln -s /c/Python38/python.exe /c/Python38/python3.exe
|
||||
|
||||
env:
|
||||
global:
|
||||
- TWINE_USERNAME=__token__
|
||||
# Note: TWINE_PASSWORD is set to a PyPI API token in Travis settings
|
||||
|
||||
install:
|
||||
- python3 -m pip install cibuildwheel==1.7.0
|
||||
- python3 -m pip install cibuildwheel==1.7.4
|
||||
|
||||
script:
|
||||
# build the wheels, put them into './wheelhouse'
|
||||
- python3 -m cibuildwheel --output-dir wheelhouse
|
||||
|
||||
after_success:
|
||||
# if the release was tagged, upload them to PyPI
|
||||
- |
|
||||
if [[ $TRAVIS_TAG ]]; then
|
||||
python3 -m pip install twine
|
||||
python3 -m twine upload wheelhouse/*.whl
|
||||
fi
|
||||
deploy:
|
||||
provider: pypi
|
||||
username: "__token__"
|
||||
skip_cleanup: true
|
||||
on:
|
||||
tags: true
|
||||
password:
|
||||
secure: "" # Set to an encrypted API token. See https://docs.travis-ci.com/user/deployment/pypi/
|
||||
|
||||
@@ -26,7 +26,7 @@ jobs:
|
||||
- ln -s /c/Python38/python.exe /c/Python38/python3.exe
|
||||
|
||||
install:
|
||||
- python3 -m pip install cibuildwheel==1.7.0
|
||||
- python3 -m pip install cibuildwheel==1.7.4
|
||||
|
||||
script:
|
||||
# build the wheels, put them into './wheelhouse'
|
||||
|
||||
@@ -55,7 +55,7 @@ jobs:
|
||||
- stage: deploy
|
||||
name: Build and deploy Linux wheels
|
||||
services: docker
|
||||
install: python3 -m pip install cibuildwheel==1.7.0
|
||||
install: python3 -m pip install cibuildwheel==1.7.4
|
||||
script: python3 -m cibuildwheel --output-dir wheelhouse
|
||||
after_success: |
|
||||
python3 -m pip install twine
|
||||
@@ -65,7 +65,7 @@ jobs:
|
||||
name: Build and deploy macOS wheels
|
||||
os: osx
|
||||
language: shell
|
||||
install: python3 -m pip install cibuildwheel==1.7.0
|
||||
install: python3 -m pip install cibuildwheel==1.7.4
|
||||
script: python3 -m cibuildwheel --output-dir wheelhouse
|
||||
after_success: |
|
||||
python3 -m pip install twine
|
||||
@@ -75,7 +75,7 @@ jobs:
|
||||
name: Build and deploy Windows wheels
|
||||
os: windows
|
||||
language: shell
|
||||
install: python3 -m pip install cibuildwheel==1.7.0
|
||||
install: python3 -m pip install cibuildwheel==1.7.4
|
||||
script: python3 -m cibuildwheel --output-dir wheelhouse
|
||||
after_success: |
|
||||
python3 -m pip install twine
|
||||
|
||||
@@ -20,7 +20,9 @@ nav:
|
||||
- deliver-to-pypi.md
|
||||
- cpp_standards.md
|
||||
- faq.md
|
||||
- working-examples.md
|
||||
- contributing.md
|
||||
- changelog.md
|
||||
|
||||
markdown_extensions:
|
||||
- fenced_code
|
||||
@@ -32,4 +34,4 @@ markdown_extensions:
|
||||
repo_url_shortener: True
|
||||
|
||||
plugins:
|
||||
- importmarkdown
|
||||
- include-markdown
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
[build-system]
|
||||
requires = [
|
||||
"setuptools>=42",
|
||||
"wheel"
|
||||
]
|
||||
|
||||
build-backend = "setuptools.build_meta"
|
||||
@@ -1,10 +1,13 @@
|
||||
-e .
|
||||
-e ./docs/mkdocs_include_markdown_plugin
|
||||
pytest
|
||||
pytest-timeout
|
||||
mkdocs==1.0.4
|
||||
mkdocs-include-markdown-plugin==2.1.1
|
||||
pymdown-extensions
|
||||
pip-tools
|
||||
requests
|
||||
click
|
||||
mypy
|
||||
pyyaml
|
||||
pygithub
|
||||
typing-extensions
|
||||
|
||||
@@ -11,7 +11,7 @@ long_description = (this_directory / 'README.md').read_text(encoding='utf-8')
|
||||
|
||||
setup(
|
||||
name='cibuildwheel',
|
||||
version='1.7.0',
|
||||
version='1.7.4',
|
||||
install_requires=['bashlex!=0.13', 'toml', 'certifi'],
|
||||
description="Build Python wheels on CI with minimal configuration.",
|
||||
long_description=long_description,
|
||||
|
||||
@@ -37,13 +37,15 @@ class TestBeforeTest(TestCase):
|
||||
def test(tmp_path):
|
||||
project_dir = tmp_path / 'project'
|
||||
before_test_project.generate(project_dir)
|
||||
test_project_dir = project_dir / 'dependency'
|
||||
test_projects.new_c_project().generate(test_project_dir)
|
||||
|
||||
# build the wheels
|
||||
actual_wheels = utils.cibuildwheel_run(project_dir, add_env={
|
||||
# write python version information to a temporary file, this is
|
||||
# checked in setup.py
|
||||
'CIBW_BEFORE_TEST': '''python -c "import sys; open('/tmp/pythonversion.txt', 'w').write(sys.version)" && python -c "import sys; open('/tmp/pythonprefix.txt', 'w').write(sys.prefix)"''',
|
||||
'CIBW_BEFORE_TEST_WINDOWS': '''python -c "import sys; open('c:\\pythonversion.txt', 'w').write(sys.version)" && python -c "import sys; open('c:\\pythonprefix.txt', 'w').write(sys.prefix)"''',
|
||||
'CIBW_BEFORE_TEST': '''python -c "import sys; open('/tmp/pythonversion.txt', 'w').write(sys.version)" && python -c "import sys; open('/tmp/pythonprefix.txt', 'w').write(sys.prefix)" && python -m pip install {project}/dependency''',
|
||||
'CIBW_BEFORE_TEST_WINDOWS': '''python -c "import sys; open('c:\\pythonversion.txt', 'w').write(sys.version)" && python -c "import sys; open('c:\\pythonprefix.txt', 'w').write(sys.prefix)" && python -m pip install {project}/dependency''',
|
||||
'CIBW_TEST_REQUIRES': 'nose',
|
||||
# the 'false ||' bit is to ensure this command runs in a shell on
|
||||
# mac/linux.
|
||||
|
||||
@@ -64,6 +64,10 @@ class TestSpam(TestCase):
|
||||
bits = struct.calcsize("P") * 8
|
||||
if bits == 32:
|
||||
self.assertEqual(platform.machine(), "i686")
|
||||
|
||||
def test_time_to_remove_the_pypy_venv_patch(self):
|
||||
if sys.platform == "darwin":
|
||||
assert not hasattr(sys, "pypy_version_info") or sys.pypy_version_info < (7,3,4)
|
||||
'''
|
||||
|
||||
|
||||
|
||||
@@ -10,7 +10,8 @@ def test_defaults():
|
||||
resources_dir = project_root / 'cibuildwheel' / 'resources'
|
||||
|
||||
assert dependency_constraints.base_file_path.samefile(resources_dir / 'constraints.txt')
|
||||
assert dependency_constraints.get_for_python_version('3.8').samefile(resources_dir / 'constraints.txt')
|
||||
assert dependency_constraints.get_for_python_version('3.99').samefile(resources_dir / 'constraints.txt')
|
||||
assert dependency_constraints.get_for_python_version('3.9').samefile(resources_dir / 'constraints-python39.txt')
|
||||
assert dependency_constraints.get_for_python_version('3.6').samefile(resources_dir / 'constraints-python36.txt')
|
||||
assert dependency_constraints.get_for_python_version('3.5').samefile(resources_dir / 'constraints-python35.txt')
|
||||
assert dependency_constraints.get_for_python_version('2.7').samefile(resources_dir / 'constraints-python27.txt')
|
||||
|
||||