Compare commits

...
37 Commits
Author SHA1 Message Date
Joe Rickerby 1e16497776 Bump version: v1.6.3 2020-10-12 21:05:20 +01:00
Joe Rickerby 39ea08469c Add merged PRs shortcut 2020-10-12 21:00:46 +01:00
Joe Rickerby 441a98f054 Merge pull request #448 from Czaki/dependency_constraints_str
Add str representation to DependencyConstraints
2020-10-11 10:42:30 +01:00
Joe Rickerby 7664768b8e Merge pull request #449 from mayeut/macos-update-ssl-patch
Update openssl patch from 1.0.2u to 1.1.1h on macOS
2020-10-11 10:41:58 +01:00
mayeut b2c4f3d385 Update openssl patch from 1.0.2u to 1.1.1h on macOS
- Update openssl patch from 1.0.2u to 1.1.1h on macOS
- Remove python 3.5 workaround in install_certifi.py
2020-10-10 18:55:26 +02:00
8094b3f6db Update macOS SSL certificates (#447)
Update macOS SSL certificates using latest `certifi` certificate bundle.

Co-authored-by: Yannick Jadoul <yannick.jadoul@belgacom.net>
Co-authored-by: Matthieu Darbois <mayeut@users.noreply.github.com>
2020-10-10 18:24:15 +02:00
Grzegorz Bokota d781111941 add str representation to DependencyConstraints 2020-10-09 23:10:44 +02:00
Joe Rickerby 97dd4ee1c0 Bump version: v1.6.2 2020-10-09 13:23:04 +01:00
Joe Rickerby f6eaa9feec Merge pull request #444 from joerick/joerick-patch-1
Add Python 3.9 to build identifiers table in docs
2020-10-08 13:32:29 +01:00
Joe Rickerby acedefdda5 Add Python 3.9 to build identifiers table in docs
Just noticed this was missing from the docs, have added it :)
2020-10-08 08:54:58 +01:00
Henry SchreinerandMatthieu Darbois 9fbe8186f9 chore: Python 3.9.0 final, Python 3.7 constraints (#440)
* chore: update to 3.9.0 final

* chore: add python 3.7 constraints

* chore: missed one image due to travis-ci fail

Co-authored-by: Matthieu Darbois <mayeut@users.noreply.github.com>

Co-authored-by: Matthieu Darbois <mayeut@users.noreply.github.com>
2020-10-06 22:02:11 -04:00
Yannick Jadoul 015f382418 Merge pull request #430 from YannickJadoul/pypy-7.3.2
[READY] Updating PyPy to 7.3.2
2020-10-06 17:47:34 +02:00
Yannick Jadoul 0154a8f992 Run less tests in macOS builds on Travis CI 2020-10-04 00:13:18 +02:00
Yannick Jadoul cd53552b4b Change examples to use macOS >= 10.14 2020-10-03 21:37:17 +02:00
Joe Rickerby 630653b786 add henryiii to maintainers 🎉 2020-10-03 11:18:29 +01:00
Yannick Jadoul 870bf3f740 Update Travis CI and CircleCI to use macOS 10.14 2020-09-27 13:44:48 +02:00
Yannick Jadoul 6ef2f92dfc Reverting to the official PyPy docker image 2020-09-26 22:46:40 +02:00
Yannick Jadoul b3a16d58cf PyPy 7.3.2 was released 2020-09-25 15:42:05 +02:00
Yannick Jadoul 7f95eb3d8f Update PyPy to 7.3.2rc2 2020-09-25 15:41:33 +02:00
Yannick Jadoul a7b69cc16d Remove workaround for AppVeyor bug on macOS (#318), as the AppVeyor issue is closed now 2020-09-25 15:41:33 +02:00
Yannick Jadoul 87dfa75dcb Revert "Allow failures on Appveyor macos"
This reverts commit f1c4ebbed0.
2020-09-25 15:41:33 +02:00
Yannick Jadoul 61c45248bd Temporarily fixing some tests of default docker images (now that pypywheels/manylinux2010-pypy_x86_64 temporarily moved to yannickjadoul/manylinux2010-pypy_x86_64) 2020-09-25 15:41:33 +02:00
Yannick Jadoul acd9300077 Update Linux versions as well, with 'yannickjadoul/manylinux2010-pypy_x86_64:7.3.2rc1' temporary docker image 2020-09-25 15:41:33 +02:00
Yannick Jadoul 37a6504351 Adding PyPy Python 3.7 to the tests 2020-09-25 15:41:33 +02:00
Yannick Jadoul 452631eb60 Updating PyPy to 7.3.2rc1 on macOS and Windows, and adding the Python 3.7 version 2020-09-25 15:41:33 +02:00
Joe Rickerby aacd0fe33c Bump version: v1.6.1 2020-09-20 17:36:35 +01:00
Joe Rickerby 26705eef1b Merge pull request #436 from YannickJadoul/update-docker-images-ppc64le
Update pinned_docker_images.cfg after the ppc64le manylinux2014 image is built again on Travis CI
2020-09-20 17:27:42 +01:00
Yannick Jadoul ff277fd345 Remove Python 3.9 on ppc64le warning from README 2020-09-20 15:53:37 +02:00
Yannick Jadoul 3d9fef458c Update pinned_docker_images.cfg after the ppc64le manylinux2014 image is built again on Travis CI 2020-09-20 15:51:10 +02:00
Joe Rickerby fac9b13307 Merge pull request #433 from mondeja/fix-travis-examples
Fix TravisCI deploy example link and TravisCI config example in README
2020-09-20 10:15:19 +01:00
Álvaro Mondéjar 31a4e3c86b Fix TravisCI deploy example link and TravisCI config example in README 2020-09-20 00:01:25 +02:00
Joe Rickerby bd0aca510c Add notes to some of the examples in README 2020-09-19 10:59:49 +01:00
Joe Rickerby 93b2ce39f0 Merge pull request #432 from tasn/patch-1
README: add etebase-py to the list of users
2020-09-18 15:49:15 +01:00
Tom Hacohen d696481714 README: add etebase-py to the list of users 2020-09-16 14:43:13 +03:00
Joe Rickerby 42b81ab47f Merge pull request #428 from adamchainz/patch-1
Add project_urls to setup.py
2020-09-09 18:45:38 +01:00
Joe Rickerby c013e0d0e6 Update README.md 2020-09-09 18:42:41 +01:00
Adam Johnson 2fd18793c1 Add project_urls to setup.py
These links make it easier to jump from PyPI to the respective page.
2020-09-09 09:17:42 +01:00
33 changed files with 264 additions and 89 deletions
+1 -1
View File
@@ -3,7 +3,7 @@ version: 2
jobs:
osx-python3.6:
macos:
xcode: "9.4.1"
xcode: 10.2.1
environment:
PYTHON: python3
steps:
+5 -2
View File
@@ -28,7 +28,10 @@ jobs:
- name: macOS | x86_64 | Python 3.x
os: osx
env: PYTHON=python3
osx_image: xcode10.2
env:
- PYTHON=python3
- PYTEST_ADDOPTS='-k "unit_test or test_0_basic" --suppress-no-test-exit-code'
- name: Windows | x86_64 | Python 3.6
os: windows
@@ -52,6 +55,6 @@ jobs:
# must repeat the s390x job above exactly to match
- *linux_s390x_36
install: $PYTHON -m pip install -r requirements-dev.txt
install: $PYTHON -m pip install -r requirements-dev.txt pytest-custom-exit-code
script: $PYTHON ./bin/run_tests.py
+36 -7
View File
@@ -22,14 +22,14 @@ What does it do?
| CPython 3.6 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅² | ✅² | ✅³ |
| CPython 3.7 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅² | ✅² | ✅³ |
| CPython 3.8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅² | ✅² | ✅³ |
| CPython 3.9 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅³ |
| PyPy 2.7 v7.3.0 | ✅ | | ✅ | ✅ | | | | |
| PyPy 3.6 v7.3.0 | ✅ | | ✅ | ✅ | | | | |
| CPython 3.9 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅² | ✅² | ✅³ |
| PyPy 2.7 v7.3.2 | ✅ | | ✅ | ✅ | | | | |
| PyPy 3.6 v7.3.2 | ✅ | | ✅ | ✅ | | | | |
| PyPy 3.7 (alpha) v7.3.2 | ✅ | | ✅ | ✅ | | | | |
<sup>¹ Not supported on Travis</sup><br>
<sup>² Only supported on Travis</sup><br>
<sup>³ Beta support until Travis CI fixes <a href="https://travis-ci.community/t/no-space-left-on-device-for-system-z/5954/11">a bug</a></sup><br>
<sup>⁴ Only Python 3.9 beta 3 is supported, until <a href="https://github.com/pypa/manylinux/issues/758">a bug</a> in building the manylinux2014 is fixed</sup><br>
- Builds manylinux, macOS and Windows wheels for CPython and PyPy using Azure Pipelines, Travis CI, AppVeyor, and CircleCI
- Bundles shared library dependencies on Linux and macOS through [auditwheel](https://github.com/pypa/auditwheel) and [delocate](https://github.com/matthew-brett/delocate)
@@ -67,6 +67,8 @@ jobs:
- services: docker
# and a mac build
- os: osx
# PyPy 7.3.2 needs macOS >= 10.14
osx_image: xcode10.2
language: shell
# and a windows build
- os: windows
@@ -74,6 +76,8 @@ jobs:
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
env:
global:
@@ -81,7 +85,7 @@ env:
# Note: TWINE_PASSWORD is set to a PyPI API token in Travis settings
install:
- python3 -m pip install cibuildwheel==1.6.0
- python3 -m pip install cibuildwheel==1.6.3
script:
# build the wheels, put them into './wheelhouse'
@@ -123,7 +127,7 @@ Working examples
Here are some repos that use cibuildwheel.
- [pyinstrument_cext](https://github.com/joerick/pyinstrument_cext)
- [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)
- [python-admesh](https://github.com/admesh/python-admesh)
@@ -140,8 +144,11 @@ Here are some repos that use cibuildwheel.
- [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.
> Add your repo here! Send a PR.
>
> <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>
Legal note
----------
@@ -155,12 +162,33 @@ This is similar to static linking, so it might have some licence implications. C
Changelog
=========
### 1.6.3
_12 October 2020_
- 🐛 Fix missing SSL certificates on macOS (#447)
- 🛠 Update OpenSSL Python 3.5 patch to 1.1.1h on macOS (#449)
### 1.6.2
_9 October 2020_
- ✨ Python 3.9 updated to the final release version - v3.9.0 (#440)
- 🛠 Pypy updated to v7.3.2, adding alpha support for Python 3.7 (#430)
### 1.6.1
_20 September 2020_
- 🛠 Add PPC64LE manylinux image supporting Python 3.9. (#436)
- 📚 Add project URLs to PyPI listing (#428)
### 1.6.0
_9 September 2020_
- 🌟 Add Python 3.9 support! This initial support uses release candidate
builds. You should can preparing your library for Python 3.9 now, ahead of
builds. You can start publishing wheels for Python 3.9 now, ahead of
the official release. (#382)
Minor note - if you're building PPC64LE wheels, the manylinux image pinned
@@ -528,6 +556,7 @@ Maintainers
- Joe Rickerby [@joerick](https://github.com/joerick)
- Yannick Jadoul [@YannickJadoul](https://github.com/YannickJadoul)
- Matthieu Darbois [@mayeut](https://github.com/mayeut)
- Henry Schreiner [@henryiii](https://github.com/henryiii)
Credits
-------
+1 -9
View File
@@ -1,7 +1,4 @@
environment:
# workaround an appveyor bug on macos
# see https://github.com/appveyor/ci/issues/3376#issuecomment-611314299
APPVEYOR_CONSOLE_DISABLE_PTY: true
matrix:
- APPVEYOR_BUILD_WORKER_IMAGE: Ubuntu
APPVEYOR_JOB_NAME: "python37-x64-ubuntu"
@@ -10,11 +7,6 @@ environment:
- APPVEYOR_BUILD_WORKER_IMAGE: macos-mojave
APPVEYOR_JOB_NAME: "python37-x64-macos-mojave"
# while pypy libffi dependency is failing the build, allow failures on macos
matrix:
allow_failures:
- APPVEYOR_BUILD_WORKER_IMAGE: macos-mojave
stack: python 3.7
build: off
@@ -24,7 +16,7 @@ init:
- ps: |
$BRANCH = if ($env:APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH) { $env:APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH } else { $env:APPVEYOR_REPO_BRANCH }
if (-not ($BRANCH -eq 'master' -or $BRANCH.ToLower().StartsWith('appveyor-'))) {
$env:PYTEST_ADDOPTS='-k "unit_test or _basic" --suppress-no-test-exit-code'
$env:PYTEST_ADDOPTS='-k "unit_test or test_0_basic" --suppress-no-test-exit-code'
}
install: python -m pip install -r requirements-dev.txt pytest-custom-exit-code
+19
View File
@@ -7,6 +7,7 @@ import cibuildwheel
from packaging.version import Version, InvalidVersion
import subprocess
import glob
import urllib.parse
config = [
# file path, version find/replace format
@@ -87,6 +88,24 @@ def bump_version():
print('Files updated. If you want to update the changelog as part of this')
print('commit, do that now.')
print()
try:
commit_date_str = subprocess.run([
'git',
'show', '-s', '--pretty=format:%ci',
f'v{current_version}^{{commit}}'
], check=True, capture_output=True, encoding='utf8').stdout
commit_date_parts = commit_date_str.split(' ')
url = 'https://github.com/joerick/cibuildwheel/pulls?' + urllib.parse.urlencode({
'q': f'is:pr merged:>{commit_date_parts[0]}T{commit_date_parts[1]}{commit_date_parts[2]}',
})
print(f'PRs merged since last release:\n {url}')
print()
except subprocess.CalledProcessError as e:
print(e)
print('Failed to get previous version tag information.')
while input('Type "done" to continue: ').strip().lower() != 'done':
pass
+1 -1
View File
@@ -19,7 +19,7 @@ subprocess.check_call([
'--upgrade',
'cibuildwheel/resources/constraints.in',
])
for python_version in ['27', '35', '36']:
for python_version in ['27', '35', '36', '37']:
subprocess.check_call([
f'./env{python_version}/bin/pip-compile',
'--allow-unsafe',
+1 -1
View File
@@ -1 +1 @@
__version__ = '1.6.0'
__version__ = '1.6.3'
+1
View File
@@ -60,6 +60,7 @@ def get_python_configurations(build_selector: BuildSelector) -> List[PythonConfi
PythonConfiguration(version='3.9', identifier='cp39-manylinux_i686', path_str='/opt/python/cp39-cp39'),
PythonConfiguration(version='2.7', identifier='pp27-manylinux_x86_64', path_str='/opt/python/pp27-pypy_73'),
PythonConfiguration(version='3.6', identifier='pp36-manylinux_x86_64', path_str='/opt/python/pp36-pypy36_pp73'),
PythonConfiguration(version='3.7', identifier='pp37-manylinux_x86_64', path_str='/opt/python/pp37-pypy37_pp73'),
PythonConfiguration(version='3.5', identifier='cp35-manylinux_aarch64', path_str='/opt/python/cp35-cp35m'),
PythonConfiguration(version='3.6', identifier='cp36-manylinux_aarch64', path_str='/opt/python/cp36-cp36m'),
PythonConfiguration(version='3.7', identifier='cp37-manylinux_aarch64', path_str='/opt/python/cp37-cp37m'),
+11 -7
View File
@@ -11,7 +11,7 @@ from typing import Dict, List, NamedTuple, Optional, Sequence, Union
from .environment import ParsedEnvironment
from .util import (BuildOptions, BuildSelector, NonPlatformWheelError, download,
get_build_verbosity_extra_flags, get_pip_script,
prepare_command)
prepare_command, install_certifi_script)
def call(args: Union[str, Sequence[Union[str, PathLike]]], env: Optional[Dict[str, str]] = None, cwd: Optional[str] = None, shell: bool = False) -> int:
@@ -38,10 +38,11 @@ def get_python_configurations(build_selector: BuildSelector) -> List[PythonConfi
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.0rc1-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'),
# PyPy
PythonConfiguration(version='2.7', identifier='pp27-macosx_x86_64', url='https://downloads.python.org/pypy/pypy2.7-v7.3.1-osx64.tar.bz2'),
PythonConfiguration(version='3.6', identifier='pp36-macosx_x86_64', url='https://downloads.python.org/pypy/pypy3.6-v7.3.1-osx64.tar.bz2'),
PythonConfiguration(version='2.7', identifier='pp27-macosx_x86_64', url='https://downloads.python.org/pypy/pypy2.7-v7.3.2-osx64.tar.bz2'),
PythonConfiguration(version='3.6', identifier='pp36-macosx_x86_64', url='https://downloads.python.org/pypy/pypy3.6-v7.3.2-osx64.tar.bz2'),
PythonConfiguration(version='3.7', identifier='pp37-macosx_x86_64', url='https://downloads.python.org/pypy/pypy3.7-v7.3.2-osx64.tar.bz2'),
]
# skip builds as required
@@ -71,6 +72,9 @@ def install_cpython(version: str, url: str) -> Path:
# if this version of python isn't installed, get it from python.org and install
python_package_identifier = f'org.python.Python.PythonFramework-{version}'
python_executable = 'python3' if version[0] == '3' else 'python'
installation_bin_path = Path(f'/Library/Frameworks/Python.framework/Versions/{version}/bin')
if python_package_identifier not in installed_system_packages:
# download the pkg
download(url, Path('/tmp/Python.pkg'))
@@ -78,12 +82,12 @@ def install_cpython(version: str, url: str) -> Path:
call(['sudo', 'installer', '-pkg', '/tmp/Python.pkg', '-target', '/'])
# patch open ssl
if version == '3.5':
open_ssl_patch_url = f'https://github.com/mayeut/patch-macos-python-openssl/releases/download/v1.0.2u/patch-macos-python-{version}-openssl-v1.0.2u.tar.gz'
open_ssl_patch_url = f'https://github.com/mayeut/patch-macos-python-openssl/releases/download/v1.1.1h/patch-macos-python-{version}-openssl-v1.1.1h.tar.gz'
download(open_ssl_patch_url, Path('/tmp/python-patch.tar.gz'))
call(['sudo', 'tar', '-C', f'/Library/Frameworks/Python.framework/Versions/{version}/', '-xmf', '/tmp/python-patch.tar.gz'])
installation_bin_path = Path(f'/Library/Frameworks/Python.framework/Versions/{version}/bin')
python_executable = 'python3' if version[0] == '3' else 'python'
call(["sudo", str(installation_bin_path/python_executable), str(install_certifi_script)])
pip_executable = 'pip3' if version[0] == '3' else 'pip'
make_symlinks(installation_bin_path, python_executable, pip_executable)
@@ -10,17 +10,17 @@ 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==1.7.0 # via virtualenv
importlib-metadata==2.0.0 # via virtualenv
importlib-resources==3.0.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.0.31 # via -r cibuildwheel/resources/constraints.in
virtualenv==20.0.33 # 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
# The following packages are considered to be unsafe in a requirements file:
pip==20.2.2 # via -r cibuildwheel/resources/constraints.in
pip==20.2.3 # via -r cibuildwheel/resources/constraints.in
setuptools==44.1.1 # via -r cibuildwheel/resources/constraints.in
@@ -8,13 +8,13 @@ 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==1.7.0 # via virtualenv
importlib-metadata==2.0.0 # via virtualenv
importlib-resources==3.0.0 # via virtualenv
six==1.15.0 # via virtualenv
virtualenv==20.0.31 # via -r cibuildwheel/resources/constraints.in
virtualenv==20.0.33 # 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
# The following packages are considered to be unsafe in a requirements file:
pip==20.2.2 # via -r cibuildwheel/resources/constraints.in
pip==20.2.3 # via -r cibuildwheel/resources/constraints.in
setuptools==50.3.0 # via -r cibuildwheel/resources/constraints.in
@@ -8,13 +8,13 @@ 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==1.7.0 # via virtualenv
importlib-metadata==2.0.0 # via virtualenv
importlib-resources==3.0.0 # via virtualenv
six==1.15.0 # via virtualenv
virtualenv==20.0.31 # via -r cibuildwheel/resources/constraints.in
virtualenv==20.0.33 # via -r cibuildwheel/resources/constraints.in
wheel==0.35.1 # via -r cibuildwheel/resources/constraints.in, delocate
zipp==3.1.0 # via importlib-metadata, importlib-resources
zipp==3.3.0 # via importlib-metadata, importlib-resources
# The following packages are considered to be unsafe in a requirements file:
pip==20.2.2 # via -r cibuildwheel/resources/constraints.in
pip==20.2.3 # via -r cibuildwheel/resources/constraints.in
setuptools==50.3.0 # via -r cibuildwheel/resources/constraints.in
@@ -0,0 +1,19 @@
#
# This file is autogenerated by pip-compile
# To update, run:
#
# bin/update_constraints.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.0.0 # via virtualenv
six==1.15.0 # via virtualenv
virtualenv==20.0.33 # via -r cibuildwheel/resources/constraints.in
wheel==0.35.1 # via -r cibuildwheel/resources/constraints.in, delocate
zipp==3.3.0 # via importlib-metadata
# The following packages are considered to be unsafe in a requirements file:
pip==20.2.3 # via -r cibuildwheel/resources/constraints.in
setuptools==50.3.0 # via -r cibuildwheel/resources/constraints.in
+2 -4
View File
@@ -8,12 +8,10 @@ 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==1.7.0 # via virtualenv
six==1.15.0 # via virtualenv
virtualenv==20.0.31 # via -r cibuildwheel/resources/constraints.in
virtualenv==20.0.33 # via -r cibuildwheel/resources/constraints.in
wheel==0.35.1 # via -r cibuildwheel/resources/constraints.in, delocate
zipp==3.1.0 # via importlib-metadata
# The following packages are considered to be unsafe in a requirements file:
pip==20.2.2 # via -r cibuildwheel/resources/constraints.in
pip==20.2.3 # via -r cibuildwheel/resources/constraints.in
setuptools==50.3.0 # via -r cibuildwheel/resources/constraints.in
+50
View File
@@ -0,0 +1,50 @@
# Based on: https://github.com/python/cpython/blob/master/Mac/BuildScript/resources/install_certificates.command
# install_certifi.py
#
# sample script to install or update a set of default Root Certificates
# for the ssl module. Uses the certificates provided by the certifi package:
# https://pypi.org/project/certifi/
import os
import os.path
import ssl
import stat
import subprocess
import sys
STAT_0o775 = (stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR
| stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP
| stat.S_IROTH | stat.S_IXOTH)
if sys.version_info[0] == 2:
FileNotFoundError = OSError
def main():
openssl_dir, openssl_cafile = os.path.split(
ssl.get_default_verify_paths().openssl_cafile)
print(" -- pip install --upgrade certifi")
subprocess.check_call([sys.executable,
"-E", "-s", "-m", "pip", "install", "--upgrade", "certifi"])
import certifi
# change working directory to the default SSL directory
os.chdir(openssl_dir)
relpath_to_certifi_cafile = os.path.relpath(certifi.where())
print(" -- removing any existing file or link")
try:
os.remove(openssl_cafile)
except FileNotFoundError:
pass
print(" -- creating symlink to certifi certificate bundle")
os.symlink(relpath_to_certifi_cafile, openssl_cafile)
print(" -- setting permissions")
os.chmod(openssl_cafile, STAT_0o775)
print(" -- update complete")
if __name__ == '__main__':
main()
+10 -11
View File
@@ -1,22 +1,21 @@
[x86_64]
manylinux1 = quay.io/pypa/manylinux1_x86_64:2020-08-20-a535ba4
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2020-08-20-df89e22
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2020-08-29-f97fd86
manylinux1 = quay.io/pypa/manylinux1_x86_64:2020-10-06-c4a4a7c
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2020-10-06-786a931
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2020-10-06-b2ca7a1
[i686]
manylinux1 = quay.io/pypa/manylinux1_i686:2020-08-20-a535ba4
manylinux2010 = quay.io/pypa/manylinux2010_i686:2020-08-20-df89e22
manylinux2014 = quay.io/pypa/manylinux2014_i686:2020-08-29-f97fd86
manylinux1 = quay.io/pypa/manylinux1_i686:2020-10-06-c4a4a7c
manylinux2010 = quay.io/pypa/manylinux2010_i686:2020-10-06-786a931
manylinux2014 = quay.io/pypa/manylinux2014_i686:2020-10-06-b2ca7a1
[pypy_x86_64]
manylinux2010 = pypywheels/manylinux2010-pypy_x86_64:2020-07-02-fd8c128
manylinux2010 = pypywheels/manylinux2010-pypy_x86_64:2020-09-26-8f210b5
[aarch64]
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2020-08-29-f97fd86
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2020-10-06-b2ca7a1
[ppc64le]
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2020-08-03-bb4aa00
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2020-10-06-b2ca7a1
[s390x]
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2020-08-29-f97fd86
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2020-10-06-b2ca7a1
+4
View File
@@ -107,6 +107,9 @@ class DependencyConstraints:
else:
return self.base_file_path
def __str__(self):
return f"File '{self.base_file_path}'"
class BuildOptions(NamedTuple):
package_dir: Path
@@ -127,6 +130,7 @@ class BuildOptions(NamedTuple):
resources_dir = Path(__file__).resolve().parent / 'resources'
get_pip_script = resources_dir / 'get-pip.py'
install_certifi_script = resources_dir / "install_certifi.py"
class NonPlatformWheelError(Exception):
+5 -4
View File
@@ -58,11 +58,12 @@ def get_python_configurations(build_selector: BuildSelector) -> List[PythonConfi
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-rc1', arch='32', identifier='cp39-win32', url=None),
PythonConfiguration(version='3.9.0-rc1', arch='64', identifier='cp39-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),
# PyPy
PythonConfiguration(version='2.7', arch='32', identifier='pp27-win32', url='https://downloads.python.org/pypy/pypy2.7-v7.3.1-win32.zip'),
PythonConfiguration(version='3.6', arch='32', identifier='pp36-win32', url='https://downloads.python.org/pypy/pypy3.6-v7.3.1-win32.zip'),
PythonConfiguration(version='2.7', arch='32', identifier='pp27-win32', url='https://downloads.python.org/pypy/pypy2.7-v7.3.2-win32.zip'),
PythonConfiguration(version='3.6', arch='32', identifier='pp36-win32', url='https://downloads.python.org/pypy/pypy3.6-v7.3.2-win32.zip'),
PythonConfiguration(version='3.7', arch='32', identifier='pp37-win32', url='https://downloads.python.org/pypy/pypy3.7-v7.3.2-win32.zip'),
]
if IS_RUNNING_ON_TRAVIS:
+47 -7
View File
@@ -38,29 +38,69 @@ cibuildwheel's _minimal_ example configs can be tested on a simple project on ci
To test minimal configs, make sure you have a clean git repo, then run the script:
bin/run_example_ci_configs.py
```bash
bin/run_example_ci_configs.py
```
The script will create an isolated 'orphan' commit containing all the minimal config CI files, and a simple C extension project, and push that to a branch on the `origin` repo. The project's CI is already set up to run on branch push, so will begin testing.
The script then outputs a Markdown table that can be copy/pasted into a PR to monitor and record the test.
## Preparing environments
The dependency update script in the next section requires multiple python versions installed. One way to do this is to use `pyenv`:
```bash
pyenv install 2.7.18
pyenv install 3.5.9
pyenv install 3.6.11
pyenv install 3.7.8
# Optionally add 3.8 and make it the local version;
# otherwise assuming 3.8+ already is your current python version
```
Then, you need to make the required virtual environments:
```bash
$(pyenv prefix 2.7.18)/bin/python -m pip install virtualenv
$(pyenv prefix 2.7.18)/bin/python -m virtualenv env27
$(pyenv prefix 3.5.9)/bin/python -m venv env35
$(pyenv prefix 3.6.11)/bin/python -m venv env36
$(pyenv prefix 3.7.8)/bin/python -m venv env37
```
<!-- Note for fish users: use zsh/bash for these lines for now, there's not a nice one-line fish replacement -->
And, you need to install the requirements into each environment:
```bash
for f in env*/bin/pip; do $f install pip-tools; done
```
## Making a release
Before making a release, ensure pinned dependencies are up-to-date. Run the script:
bin/make_dependency_update_pr.py
```bash
bin/make_dependency_update_pr.py
```
If updates are needed, this will push a PR with those updates for the CI to test. Once green, merge this PR.
Then, increment the project version number using:
bin/bump_version.py
```bash
bin/bump_version.py
```
You'll be prompted to enter the new version number. Update the changelog when prompted. The script will create a 'bump version' commit and version tag.
Finally, cut the release and upload to PyPI/Github.
rm -rf dist
python setup.py sdist bdist_wheel
twine upload dist/*
git push && git push --tags
```bash
rm -rf dist
python setup.py sdist bdist_wheel
twine upload dist/*
git push && git push --tags
```
+6 -3
View File
@@ -86,13 +86,16 @@ When setting the options, you can use shell-style globbing syntax (as per [`fnma
| Python 3.6 | cp36-macosx_x86_64 | cp36-manylinux_x86_64 | cp36-manylinux_i686 | cp36-win_amd64 | cp36-win32 | cp36-manylinux_aarch64 | cp36-manylinux_ppc64le | cp36-manylinux_s390x |
| Python 3.7 | cp37-macosx_x86_64 | cp37-manylinux_x86_64 | cp37-manylinux_i686 | cp37-win_amd64 | cp37-win32 | cp37-manylinux_aarch64 | cp37-manylinux_ppc64le | cp37-manylinux_s390x |
| Python 3.8 | cp38-macosx_x86_64 | cp38-manylinux_x86_64 | cp38-manylinux_i686 | cp38-win_amd64 | cp38-win32 | cp38-manylinux_aarch64 | cp38-manylinux_ppc64le | cp38-manylinux_s390x |
| PyPy 2.7 v7.3.0 | pp27-macosx_x86_64 | pp27-manylinux_x86_64 | | | pp27-win32 | | | |
| PyPy 3.6 v7.3.0 | pp36-macosx_x86_64 | pp36-manylinux_x86_64 | | | pp36-win32 | | | |
| Python 3.9 | cp39-macosx_x86_64 | cp39-manylinux_x86_64 | cp39-manylinux_i686 | cp39-win_amd64 | cp39-win32 | cp39-manylinux_aarch64 | cp39-manylinux_ppc64le | cp39-manylinux_s390x |
| PyPy 2.7 v7.3.2 | pp27-macosx_x86_64 | pp27-manylinux_x86_64 | | | pp27-win32 | | | |
| PyPy 3.6 v7.3.2 | pp36-macosx_x86_64 | pp36-manylinux_x86_64 | | | pp36-win32 | | | |
| PyPy 3.7 (alpha) v7.3.2 | pp37-macosx_x86_64 | pp37-manylinux_x86_64 | | | pp37-win32 | | | |
The list of supported and currently selected build identifiers can also be retrieved by passing the `--print-build-identifiers` flag to `cibuildwheel`.
The format is `python_tag-platform_tag`, with tags similar to those in [PEP 425](https://www.python.org/dev/peps/pep-0425/#details).
For CPython, the minimally supported macOS version is 10.9; for PyPy 2.7 and PyPy 3.6, respectively macOS 10.7 and 10.13 or higher is required.
For CPython, the minimally supported macOS version is 10.9; for PyPy 2.7 and PyPy 3.6/3.7, respectively macOS 10.7 and 10.13 or higher is required.
#### Examples
+1 -1
View File
@@ -48,7 +48,7 @@ Commit this file, enable building of your repo on Travis CI, and push.
Then setup a deployment method by following the [Travis CI deployment docs](https://docs.travis-ci.com/user/deployment/), or see [Delivering to PyPI](deliver-to-pypi.md). For more info on `.travis.yml`, check out the [docs](https://docs.travis-ci.com/).
[`examples/travis-deploy.yml`](https://github.com/joerick/cibuildwheel/blob/master/examples/travis-deploy.yml) extends this minimal example with a demonstration of how to automatically upload the built wheels to PyPI.
[`examples/travis-ci-deploy.yml`](https://github.com/joerick/cibuildwheel/blob/master/examples/travis-ci-deploy.yml) extends this minimal example with a demonstration of how to automatically upload the built wheels to PyPI.
# CircleCI [linux/mac] {: #circleci}
+1 -1
View File
@@ -12,7 +12,7 @@ stack: python 3.7
init:
- cmd: set PATH=C:\Python37;C:\Python37\Scripts;%PATH%
install: python -m pip install cibuildwheel==1.6.0
install: python -m pip install cibuildwheel==1.6.3
build_script: python -m cibuildwheel --output-dir wheelhouse
+3 -3
View File
@@ -5,7 +5,7 @@ jobs:
- task: UsePythonVersion@0
- bash: |
python3 -m pip install --upgrade pip
pip3 install cibuildwheel==1.6.0
pip3 install cibuildwheel==1.6.3
cibuildwheel --output-dir wheelhouse .
- task: PublishBuildArtifacts@1
inputs: {pathtoPublish: 'wheelhouse'}
@@ -16,7 +16,7 @@ jobs:
- task: UsePythonVersion@0
- bash: |
python3 -m pip install --upgrade pip
pip3 install cibuildwheel==1.6.0
pip3 install cibuildwheel==1.6.3
cibuildwheel --output-dir wheelhouse .
- task: PublishBuildArtifacts@1
inputs: {pathtoPublish: 'wheelhouse'}
@@ -29,7 +29,7 @@ jobs:
displayName: Install Visual C++ for Python 2.7
- bash: |
python -m pip install --upgrade pip
pip install cibuildwheel==1.6.0
pip install cibuildwheel==1.6.3
cibuildwheel --output-dir wheelhouse .
- task: PublishBuildArtifacts@1
inputs: {pathtoPublish: 'wheelhouse'}
+4 -3
View File
@@ -11,7 +11,7 @@ jobs:
- run:
name: Build the Linux wheels.
command: |
pip3 install --user cibuildwheel==1.6.0
pip3 install --user cibuildwheel==1.6.3
cibuildwheel --output-dir wheelhouse
- store_artifacts:
path: wheelhouse/
@@ -19,13 +19,14 @@ jobs:
osx-wheels:
working_directory: ~/osx-wheels
macos:
xcode: "10.0.0"
# PyPy 7.3.2 needs macOS >= 10.14
xcode: 10.2.1
steps:
- checkout
- run:
name: Build the OS X wheels.
command: |
pip3 install cibuildwheel==1.6.0
pip3 install cibuildwheel==1.6.3
cibuildwheel --output-dir wheelhouse
- store_artifacts:
path: wheelhouse/
+1 -1
View File
@@ -28,7 +28,7 @@ jobs:
- name: Install cibuildwheel
run: |
python -m pip install cibuildwheel==1.6.0
python -m pip install cibuildwheel==1.6.3
- name: Install Visual C++ for Python 2.7
if: runner.os == 'Windows'
+1 -1
View File
@@ -20,7 +20,7 @@ jobs:
- name: Install cibuildwheel
run: |
python -m pip install cibuildwheel==1.6.0
python -m pip install cibuildwheel==1.6.3
- name: Install Visual C++ for Python 2.7
if: runner.os == 'Windows'
+3 -1
View File
@@ -9,6 +9,8 @@ jobs:
- services: docker
# and a mac build
- os: osx
# PyPy 7.3.2 needs macOS >= 10.14
osx_image: xcode10.2
language: shell
# and a windows build
- os: windows
@@ -25,7 +27,7 @@ env:
# Note: TWINE_PASSWORD is set to a PyPI API token in Travis settings
install:
- python3 -m pip install cibuildwheel==1.6.0
- python3 -m pip install cibuildwheel==1.6.3
script:
# build the wheels, put them into './wheelhouse'
+3 -1
View File
@@ -15,6 +15,8 @@ jobs:
arch: s390x
# and a mac build
- os: osx
# PyPy 7.3.2 needs macOS >= 10.14
osx_image: xcode10.2
language: shell
# and a windows build
- os: windows
@@ -26,7 +28,7 @@ jobs:
- ln -s /c/Python38/python.exe /c/Python38/python3.exe
install:
- python3 -m pip install cibuildwheel==1.6.0
- python3 -m pip install cibuildwheel==1.6.3
script:
# build the wheels, put them into './wheelhouse'
+5 -3
View File
@@ -55,7 +55,7 @@ jobs:
- stage: deploy
name: Build and deploy Linux wheels
services: docker
install: python3 -m pip install cibuildwheel==1.6.0
install: python3 -m pip install cibuildwheel==1.6.3
script: python3 -m cibuildwheel --output-dir wheelhouse
after_success: |
python3 -m pip install twine
@@ -64,8 +64,10 @@ jobs:
- stage: deploy
name: Build and deploy macOS wheels
os: osx
# PyPy 7.3.2 needs macOS >= 10.14
osx_image: xcode10.2
language: shell
install: python3 -m pip install cibuildwheel==1.6.0
install: python3 -m pip install cibuildwheel==1.6.3
script: python3 -m cibuildwheel --output-dir wheelhouse
after_success: |
python3 -m pip install twine
@@ -75,7 +77,7 @@ jobs:
name: Build and deploy Windows wheels
os: windows
language: shell
install: python3 -m pip install cibuildwheel==1.6.0
install: python3 -m pip install cibuildwheel==1.6.3
script: python3 -m cibuildwheel --output-dir wheelhouse
after_success: |
python3 -m pip install twine
+5 -1
View File
@@ -11,7 +11,7 @@ long_description = (this_directory / 'README.md').read_text(encoding='utf-8')
setup(
name='cibuildwheel',
version='1.6.0',
version='1.6.3',
install_requires=['bashlex!=0.13', 'toml'],
description="Build Python wheels on CI with minimal configuration.",
long_description=long_description,
@@ -19,6 +19,10 @@ setup(
author="Joe Rickerby",
author_email='joerick@mac.com',
url='https://github.com/joerick/cibuildwheel',
project_urls={
'Changelog': 'https://github.com/joerick/cibuildwheel#changelog',
'Documentation': 'https://cibuildwheel.readthedocs.io/',
},
packages=['cibuildwheel', ],
license="BSD",
zip_safe=False,
+3
View File
@@ -66,6 +66,9 @@ def test_pinned_versions(tmp_path, python_version):
elif python_version == '3.6':
constraint_filename = 'constraints-python36.txt'
build_pattern = '[cp]p36-*'
elif python_version == '3.7':
constraint_filename = 'constraints-python37.txt'
build_pattern = '[cp]p37-*'
else:
constraint_filename = 'constraints.txt'
build_pattern = '[cp]p38-*'
+4 -5
View File
@@ -13,11 +13,10 @@ project_with_ssl_tests = test_projects.new_c_project(
else:
from urllib.request import urlopen
if sys.version_info[0:2] == (3, 3):
data = urlopen("https://www.nist.gov")
else:
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
data = urlopen("https://www.nist.gov", context=context)
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
data = urlopen("https://www.nist.gov", context=context)
data = urlopen("https://raw.githubusercontent.com/joerick/cibuildwheel/master/CI.md", context=context)
data = urlopen("https://raw.githubusercontent.com/joerick/cibuildwheel/master/CI.md")
''')
)
+1 -1
View File
@@ -94,7 +94,7 @@ def expected_wheels(package_name, package_version, manylinux_versions=None,
python_abi_tags = ['cp35-cp35m', 'cp36-cp36m', 'cp37-cp37m', 'cp38-cp38', 'cp39-cp39']
if pm.machine() in ['x86_64', 'AMD64', 'x86']:
python_abi_tags += ['cp27-cp27m', 'pp27-pypy_73', 'pp36-pypy36_pp73']
python_abi_tags += ['cp27-cp27m', 'pp27-pypy_73', 'pp36-pypy36_pp73', 'pp37-pypy37_pp73']
if platform == 'linux':
python_abi_tags.append('cp27-cp27mu') # python 2.7 has 2 different ABI on manylinux