-
-
Notifications
You must be signed in to change notification settings - Fork 2.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update wheel builds to include Python 3.10 #6021
Update wheel builds to include Python 3.10 #6021
Conversation
cibuildwheel no longer supports building Python 3.5 wheels
This is related to PEP 656 (https://www.python.org/dev/peps/pep-0656/). In late Oct 2021, cibuildwheel started adding Musl builds by default. This commit is to disable these for now.
we will not have any new v0.17.x releases
Also, we do not specify |
Looks reasonable to me. One detail that I am not sure on is the two sections for MacOS. Perhaps these can now be merged. I cannot spot any differences between them other than the python versions specified. It may have been that a particular python version caused the package to be compiled slightly differently at one point but now I can't spot the reason for the separation (and indeed duplication): As far as I can tell we build for 3.9 and 3.10, and then build for 3.7, 3.8, 3.10.
I am thinking alpine users would be the main ones to be impacted by this. We would need to know they exist... That sounds reasonable, building from source is an adequate alternative when the wheels themselves are not passing tests.
I read this as, the default used is "auto" which for MacOS is: |
Yes, that did seem a bit odd. The difference is that the run section installs libomp via homebrew for the 3.9 (now also 3.10) case:
I am not sure why this was being done only for Python 3.9, though? I see the comment mentions "scikit-learn" so it was apparently copied from there at some point.
yeah, I think that is right. We built all three for PyWavelets, but in the script there I did specify "x86_64 arm64 universal2" instead of "auto". |
I pushed a tag in my fork, and there are a lot of failures, mostly related to pip trying to build SciPy and Pillow from source. Looking on PyPI it seems that the most recent Pillow 8.4.0 and SciPy 1.7.2 only provide manylinux2014 wheels while we are only trying to use manylinux2014 for aarch64 and Python10 while staying on manylinux2010 for Python 3.9 and manylinux1 for 3.7 and 3.8. Pillow 8.3.2 and SciPy 1.7.1 do have manylinux1 wheels, but instead of using those, pip is trying to build the latest release from source and fails due to missing dependencies like libjpeg and BLAS/LAPACK. On OS X there is a separate issue: trying to download |
exclude arm64 and universal2 on Mac OS until scipy distributes wheels for these exclude i686 on linux until 2 tests failures can be resolved exclude x86 on Windows for Python 3.10 (wheel not provided by NumPy
aarch64 builds are still running, but everything else has completed successfully for the latest attempt: https://github.com/grlee77/scikit-image/runs/4180032144?check_suite_focus=true The primary issues are: These are the test failures that occurred in a previous run for i686:
|
SciPy 1.8.0 is currently targeted for early Jan 2022 but it is likely a 1.7.3 release adding Mac OS arm64 support will occur earlier. See discussion here: https://mail.python.org/archives/list/scipy-dev@python.org/thread/LPKBGLCMDAWVMX5FLAADGGLM4JRQ3WFZ/ |
The first of the two i686 failures looks like a minor difference that could be fixed by testing with I opened a PR that should avoid both failures: #6031 |
Some aarch64 cases timed out after 6 hours. They seem to have gotten stuck indefinitely at 79% tests complete. See, for example the log that shows it stuck for ~1 hour 45 minutes in
no idea why the Python 3.8 case passed (total job time ~3.5 hours and |
are you emulating for arm? if so, it might be pretty hard to get test suites to run in time. we see a lot of flutlctuation in time to complete when emulation or others techniques like that are used. |
Yes, cibuildwheel uses QEMU for aarch64 |
…_to_include_py3_10
split aarch64 linux builds out into a separate job enable musllinux builds for non-aarch64 linux cases
…lee77/scikit-image into update_wheel_builds_to_include_py3_10
This has now been updated to restore i686 wheel builds on linux for Python 3.7-3.9. I split the aarch cases out to a separate job. Let's see if they get stuck again. In progress here: https://github.com/grlee77/scikit-image/actions/runs/1455089432 |
very nice |
Okay, things are now working pretty well. All non-aarch64 builds are passing. This time around 2/4 aarch64 completed and the other two made it to around 90% and no particular test seemed to get stuck. We may want to disable the wheel testing on aarch64 when making a release in order to be sure nothing times out. |
@scikit-image/core: please see the following summary of wheel building (also posted to Zulip) The cases that are now working are:linux x86_64: Python 3.7-3.10 manylinux variants usedFor x86_64 and i686 linux wheels, I currently have Python 3.7 and 3.8 wheels using manylinux1, 3.9 using manylinux2010 and 3.10 using manylinux2014 while all aarch64 wheels must use manylinux2014. This was what I did for the recent PyWavelets release, but I saw that the most recent SciPy point release just used manylinux2014 for most things (i686 wheels and the Python 3.7 x86_64 wheels were manylinux2010), so now I am not sure if we should do the same. I will ping @rgommers and see if he has a recommendation. Not working, but propose to add in a future point release (0.19.1):mac OS: arm64, universal2 : will be easiest to wait for SciPy to provide these, otherwise we have problems with SciPy trying to build from source and not finding BLAS/LAPACK, etc. during wheel testing. |
The upcoming numpy 1.22.0 will do this too I believe (and that's confirmed by https://anaconda.org/scipy-wheels-nightly/numpy/files only having
Agreed. Any day now ....
No plans for adding |
Okay, thanks. I will try setting Python 3.7 to manylinux2010 and use manylinux2014 for everything else. |
…_to_include_py3_10
This is needed for x86 builds with Pythran
this was added during debugging, but makes the log MUCH longer
The changes in a0e0f7a here were to get clang-cl to be used as the compiler for x86 windows wheels. This was needed to build wheels using Pythran (See discussion in #3226 (comment)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Awesome @grlee77!!!
Thank you @grlee77! |
Description
This PR attempts to add Python 3.10 wheels to our wheel building workflow.
@leej3 and @viniciusdc, it would be great if you can confirm that the changes proposed here look sane. I based them on ones I made recently for PyWavelets.
For PyWavelets, the combination of Musl linux wheels and aarch64 was leading to timeouts while running the tests, so we disabled these wheels. I think they are pretty niche, so I just disabled the
musllinux
cases altogether here. If we want to provide them we can try it, but I am not sure it is currently worth the effort.For reviewers
later.
__init__.py
.doc/release/release_dev.rst
.