| # Copyright 2017 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| """Manages the generation and uploading of Python wheel CIPD packages. |
| |
| == A Note on Universality == |
| |
| Our wheel generation uses CIPD package naming to represent the platform, |
| architecture, and ABI of generated wheels. Because of that, we offload the |
| actual Python wheel naming (which "pip" checks when installing wheels) to the |
| CIPD naming layer and represent every generated wheel filename as universal. |
| |
| Naming wheels universally will cause "pip" to agreeably install any wheel onto |
| any platform, effectively establishing the CIPD naming scheme as the absolute |
| authority removing any protection against mismatched tags that "pip" supplies. |
| |
| We are deferring to CIPD's platform resolution for backwards-compatible |
| architectures, notably: |
| |
| - CIPD's "armv6l" platform loads on "armv7l", "armv8l", "armv9l", ... |
| - CIPD's "arm64" platform loads on "aarch64". |
| |
| An alternative is to enumerate compatible platforms explicitly, such as |
| "linux_armv6l.linux_armv7l.linux_armv8l.linux_armv9l". This can work in the |
| short-term, but imagine adding the hypothetically-backwards-compatible |
| "linux_armv10l" platform: |
| |
| - CIPD will continue to resolve "${platform}" to "linux-armv6l". |
| - The "linux-armv6l" CIPD package will contain a wheel with the above platform |
| enumeration, which will NOT resolve on the new "linux_armv10l" platform. |
| - We probably recognized this because users reported failures on their |
| "linux_armv10l" systems, meaning that the "linux-armv6l" CIPD package is |
| cached. |
| |
| We can respond in one of three ways: |
| - Forcefully differentiate "armv10l" from its predecessors. This is not |
| technically consistent with other CIPD platform approaches, and would be |
| done for convenience, rather than effective, reasons. |
| - Append ".linux_armv10l" to the wheel's platform enumeration, generate new |
| CIPD packages with different tags, and update every "vpython" spec file to |
| reference the new tags. This is tedious. |
| - Append ".linux_armv10l" to the wheel's platform enumeration, delete the |
| current CIPD package, and manually purge any "linux-armv10l" systems' CIPD |
| caches. This is tedious and unsupported. |
| |
| None of these options is particularly great, nor are any of them guaranteed to |
| scale based on the new platform circumstances. Consequently, we remove the |
| architecture decision from "pip" altogether by using a universal name for every |
| wheel. Now, "pip" will install any packaged wheel on any platform, so it is |
| our decision to NOT install the wrong wheels on incompatible platforms. We use |
| CIPD and "vpython"'s naming resolution to ensure that this doesn't happen. |
| |
| Internally to "dockerbuild", we still name wheels appropriately; we only |
| make them universal for CIPD packaging. This allows correct wheels to still be |
| generated by "dockerbuild" for non-CIPD purposes. |
| """ |
| |
| from __future__ import print_function |
| |
| import difflib |
| import sys |
| from pkg_resources import parse_version |
| |
| from . import build_platform |
| |
| # This is the NumPy-ecosystem list of platforms that their mac-x64 wheel |
| # supports. |
| _NUMPY_MAC_x64 = [ |
| 'macosx_10_6_intel', |
| 'macosx_10_9_intel', |
| 'macosx_10_9_x86_64', |
| 'macosx_10_10_intel', |
| 'macosx_10_10_x86_64', |
| ] |
| |
| _NUMPY_MAC_ARM = [ |
| 'macosx_11_0_arm64', |
| ] |
| |
| |
| def assert_sorted(section_type, *builders): |
| name_vers = [] |
| for i, builder in enumerate(builders): |
| name_vers.append((builder.spec.name, |
| parse_version(builder.spec.version or '???'))) |
| t = type(builder).__name__ |
| if t != section_type: |
| print( |
| 'Section %r contains wrong type at index %d: %r' % |
| (section_type, i, t), |
| file=sys.stderr) |
| sys.exit(1) |
| |
| name_vers_sort = sorted(name_vers) |
| if name_vers == name_vers_sort: |
| return builders |
| |
| name_vers_flat = ['%s @ %s' % (n, v) for n, v in name_vers] |
| name_vers_sort_flat = ['%s @ %s' % (n, v) for n, v in name_vers_sort] |
| |
| print( |
| 'Section %r in wheel.py is not sorted:' % (section_type,), |
| file=sys.stderr) |
| for line in difflib.unified_diff(name_vers_flat, name_vers_sort_flat): |
| print(' ', line, file=sys.stderr) |
| sys.exit(1) |
| |
| |
| SPECS = {} |
| |
| # When adding a wheel, please add it to the appropriate section. |
| |
| # SourceOrPrebuilts. These are for packages on PyPi which have prebuilts for |
| # some platforms, but should fallback to tarballs for platforms which are |
| # missing prebuilt wheels. |
| from .wheel_wheel import SourceOrPrebuilt |
| SPECS.update({ |
| s.spec.tag: s for s in assert_sorted( |
| 'SourceOrPrebuilt', |
| SourceOrPrebuilt( |
| 'MarkupSafe', |
| '1.0', |
| packaged=(), |
| only_plat=build_platform.ALL_LINUX, |
| pyversions=['py2'], |
| ), |
| SourceOrPrebuilt( |
| 'MarkupSafe', |
| '1.1.1', |
| packaged=( |
| 'mac-x64', |
| 'manylinux-x64', |
| 'windows-x86', |
| 'windows-x64', |
| ), |
| pyversions=['py2', 'py3'], |
| ), |
| SourceOrPrebuilt( |
| 'PyYAML', |
| '3.12', |
| packaged=[ |
| 'windows-x86', |
| 'windows-x64', |
| ], |
| pyversions=['py2'], |
| ), |
| SourceOrPrebuilt( |
| 'SQLAlchemy', |
| '1.2.5', |
| packaged=(), |
| only_plat=['manylinux-x64'], |
| pyversions=['py2'], |
| ), |
| SourceOrPrebuilt( |
| 'bcrypt', |
| '3.1.4', |
| packaged=[ |
| 'mac-x64', |
| 'manylinux-x64', |
| 'windows-x86', |
| 'windows-x64', |
| ], |
| pyversions=['py2', 'py3'], |
| # To build this on mac-arm64, we would need to supply the |
| # arm64 cffi wheel. |
| skip_plat=['mac-x64-cp38', 'mac-arm64', 'mac-arm64-cp38'], |
| ), |
| SourceOrPrebuilt( |
| 'cffi', |
| '1.10.0', |
| arch_map={ |
| 'mac-x64': ['macosx_10_6_intel'], |
| }, |
| pyversions=['py2'], |
| skip_plat=['mac-arm64'], |
| ), |
| SourceOrPrebuilt( |
| 'cffi', |
| '1.12.3', |
| arch_map={ |
| 'mac-x64': ['macosx_10_6_intel'], |
| }, |
| pyversions=['py2'], |
| skip_plat=['mac-arm64'], |
| ), |
| SourceOrPrebuilt( |
| 'cffi', |
| '1.14.3', |
| pyversions=['py3'], |
| skip_plat=['mac-x64-cp38', 'mac-arm64-cp38'], |
| ), |
| SourceOrPrebuilt( |
| 'cffi', |
| '1.14.5', |
| packaged=(), |
| pyversions=['py2', 'py3'], |
| ), |
| SourceOrPrebuilt( |
| 'cffi', |
| '1.14.5', |
| packaged=(), |
| pyversions=['py2', 'py3'], |
| patch_version='chromium.3', # Rebuild for crbug/1210346 and 1233745 |
| ), |
| SourceOrPrebuilt( |
| 'coverage', |
| '4.3.4', |
| packaged=[ |
| 'manylinux-x64', |
| 'windows-x86', |
| 'windows-x64', |
| ], |
| pyversions=['py2'], |
| ), |
| SourceOrPrebuilt( |
| 'coverage', |
| '4.5.1', |
| packaged=[ |
| 'manylinux-x64', |
| 'windows-x86', |
| 'windows-x64', |
| ], |
| pyversions=['py2'], |
| ), |
| SourceOrPrebuilt( |
| 'coverage', |
| '4.5.3', |
| packaged=[ |
| 'manylinux-x64', |
| 'windows-x86', |
| 'windows-x64', |
| ], |
| pyversions=['py2'], |
| ), |
| SourceOrPrebuilt( |
| 'coverage', |
| '5.5', |
| packaged=(), |
| pyversions=['py2', 'py3'], |
| patch_version='chromium.2', # Rebuild for crbug/1233745 |
| ), |
| SourceOrPrebuilt( |
| 'crcmod', |
| '1.7', |
| packaged=(), |
| pyversions=['py2', 'py3'], |
| patch_version='chromium.2', # Rebuild for https://crbug.com/1233745 |
| ), |
| SourceOrPrebuilt( |
| 'gevent', |
| '1.4.0', |
| packaged=('manylinux-x64', 'windows-x86', 'windows-x64'), |
| env={ |
| # manylinux1 is too old to build libuv. |
| # So, maybe when manylinux2010 catches on we can build it. |
| # That said, this is currently only used for the recipe engine, |
| # so event loop performance shouldn't be a large concern. |
| 'GEVENT_NO_LIBUV_BUILD': '1', |
| }, |
| pyversions=['py2'], |
| ), |
| SourceOrPrebuilt( |
| 'gevent', |
| '1.5.0', |
| packaged=(), |
| only_plat=[ |
| 'manylinux-x64-py3', |
| 'manylinux-x64-py3.9', |
| 'windows-x64-py3', |
| 'mac-x64-cp38', |
| # 'mac-arm64-cp38', Needs cffi to build |
| ], |
| pyversions=['py3'], |
| ), |
| SourceOrPrebuilt( |
| 'google-crc32c', |
| '1.1.2', |
| packaged=[], |
| # Other platforms not yet tested. |
| only_plat=['manylinux-x64-py3', 'manylinux-x64-py3.9'], |
| pyversions=['py3'], |
| ), |
| SourceOrPrebuilt( |
| 'greenlet', |
| '0.4.15', |
| packaged=( |
| 'manylinux-x64', |
| 'windows-x64', |
| ), |
| skip_plat=[ |
| 'windows-x86', |
| # greenlet 0.4.15 relies on private Python internals which were |
| # changed in 3.9. |
| 'manylinux-x64-py3.9', |
| ], |
| pyversions=['py2', 'py3'], |
| ), |
| SourceOrPrebuilt( |
| 'greenlet', |
| '1.0.0', |
| packaged=[ |
| 'windows-x86', |
| 'windows-x64', |
| 'windows-x86-py3', |
| 'windows-x64-py3', |
| ], |
| ), |
| SourceOrPrebuilt( |
| 'grpcio', '1.4.0', pyversions=['py2'], skip_plat=['mac-arm64']), |
| SourceOrPrebuilt( |
| 'grpcio', |
| '1.32.0', |
| skip_plat=[ |
| 'manylinux-x64-py3.9', |
| 'linux-arm64-py3', |
| # grpcio does not yet support Mac ARM64, but work is underway. |
| # See https://github.com/grpc/grpc/issues/24002 |
| 'mac-arm64-cp38', |
| ], |
| pyversions=['py3']), |
| SourceOrPrebuilt( |
| 'grpcio', |
| '1.34.1', |
| skip_plat=[ |
| 'manylinux-x64-py3.9', |
| 'linux-arm64-py3', |
| # grpcio does not yet support Mac ARM64, but work is underway. |
| # See https://github.com/grpc/grpc/issues/24002 |
| 'mac-arm64-cp38', |
| ], |
| pyversions=['py3']), |
| SourceOrPrebuilt( |
| 'grpcio', |
| '1.39.0', |
| skip_plat=[ |
| 'manylinux-x64-py3.9', |
| 'linux-arm64-py3', |
| ], |
| pyversions=['py3']), |
| SourceOrPrebuilt( |
| 'grpcio-tools', |
| '1.32.0', |
| skip_plat=[ |
| 'manylinux-x64-py3.9', |
| 'linux-arm64-py3', |
| 'mac-arm64-cp38', |
| ], |
| pyversions=['py3']), |
| SourceOrPrebuilt( |
| 'grpcio-tools', |
| '1.39.0', |
| skip_plat=[ |
| 'manylinux-x64-py3.9', |
| 'linux-arm64-py3', |
| ], |
| pyversions=['py3']), |
| SourceOrPrebuilt( |
| 'lazy-object-proxy', |
| '1.3.1', |
| packaged=[ |
| 'manylinux-x64', |
| 'windows-x86', |
| 'windows-x64', |
| ], |
| skip_plat=[ |
| 'linux-arm64-py3', |
| 'mac-x64-cp38', |
| ], |
| pyversions=['py2', 'py3'], |
| ), |
| SourceOrPrebuilt( |
| 'lazy-object-proxy', |
| '1.4.3', |
| packaged=[ |
| 'manylinux-x64-cp38', |
| ], |
| skip_plat=[ |
| 'linux-arm64-py3', |
| ], |
| pyversions=['py3'], |
| ), |
| SourceOrPrebuilt( |
| 'netifaces', |
| '0.10.9', |
| packaged=['manylinux-x64'], |
| skip_plat=[ |
| 'mac-x64', |
| 'windows-x86', |
| 'windows-x64', |
| ], |
| pyversions=['py2'], |
| ), |
| SourceOrPrebuilt( |
| 'ninja', |
| '1.10.0.post2', |
| packaged=(), |
| only_plat=['manylinux-x64-py3', 'manylinux-x64-py3.9'], |
| pyversions=['py3'], |
| ), |
| SourceOrPrebuilt( |
| 'numpy', |
| '1.11.3', |
| abi_map={ |
| 'windows-x86': 'none', |
| 'windows-x64': 'none', |
| }, |
| arch_map={'mac-x64': _NUMPY_MAC_x64}, |
| pyversions=['py2'], |
| # This wheel currently doesn't build at HEAD. |
| # TODO(crbug.com/1218659): Get it working again. |
| default=False, |
| ), |
| SourceOrPrebuilt( |
| 'numpy', |
| '1.12.1', |
| abi_map={ |
| 'windows-x86': 'none', |
| 'windows-x64': 'none', |
| }, |
| arch_map={'mac-x64': _NUMPY_MAC_x64}, |
| skip_plat=('linux-arm64', 'mac-arm64'), |
| pyversions=['py2'], |
| ), |
| SourceOrPrebuilt( |
| 'numpy', |
| '1.19.2', |
| skip_plat=[ |
| 'mac-x64-cp38', 'mac-arm64-cp38', 'windows-x86-py3', |
| 'windows-x64-py3' |
| ], |
| packaged=[], |
| pyversions=['py3'], |
| ), |
| SourceOrPrebuilt( |
| 'numpy', |
| '1.19.5', |
| packaged=[], |
| only_plat=[ |
| 'manylinux-x64-py3', |
| 'manylinux-x64-py3.9', |
| 'mac-x64-cp38', |
| 'windows-x86-py3', |
| 'windows-x64-py3', |
| ], |
| pyversions=['py3'], |
| ), |
| SourceOrPrebuilt( |
| 'numpy', |
| '1.21.1', |
| packaged=[ |
| 'mac-arm64-cp38', |
| ], |
| arch_map={'mac-arm64-cp38': _NUMPY_MAC_ARM}, |
| only_plat=[ |
| 'mac-x64-cp38', |
| 'mac-arm64-cp38', |
| ], |
| pyversions=['py3'], |
| ), |
| SourceOrPrebuilt( |
| 'pandas', |
| '1.1.3', |
| packaged=[], |
| skip_plat=[ |
| 'manylinux-x64-py3.9', |
| 'mac-x64-cp38', |
| 'mac-arm64-cp38', |
| 'windows-x86-py3', |
| 'windows-x64-py3', |
| ], |
| pyversions=['py3'], |
| ), |
| SourceOrPrebuilt( |
| 'psutil', |
| '1.2.1', |
| packaged=[], |
| only_plat=build_platform.ALL_LINUX + ['mac-x64'], |
| pyversions=['py2'], |
| ), |
| SourceOrPrebuilt( |
| 'psutil', |
| '5.2.2', |
| abi_map={ |
| 'windows-x86': 'none', |
| 'windows-x64': 'none', |
| }, |
| arch_map={'mac-x64': _NUMPY_MAC_x64}, |
| packaged=['windows-x86', 'windows-x64'], |
| pyversions=['py2'], |
| skip_plat=['mac-arm64'], |
| ), |
| SourceOrPrebuilt( |
| 'psutil', |
| '5.4.7', |
| abi_map={ |
| 'windows-x86': 'none', |
| 'windows-x64': 'none', |
| }, |
| arch_map={'mac-x64': _NUMPY_MAC_x64}, |
| packaged=['windows-x86', 'windows-x64'], |
| pyversions=['py2'], |
| skip_plat=['mac-arm64'], |
| ), |
| SourceOrPrebuilt( |
| 'psutil', |
| '5.6.2', |
| abi_map={ |
| 'windows-x86': 'none', |
| 'windows-x64': 'none', |
| }, |
| arch_map={'mac-x64': _NUMPY_MAC_x64}, |
| packaged=['windows-x86', 'windows-x64'], |
| skip_plat=[ |
| 'linux-arm64-py3', |
| 'mac-arm64', |
| 'manylinux-x64-py3', |
| 'manylinux-x64-py3.9', |
| ], |
| pyversions=['py2', 'py3'], |
| ), |
| SourceOrPrebuilt( |
| 'psutil', |
| '5.7.2', |
| packaged=[], |
| pyversions=['py3'], |
| ), |
| SourceOrPrebuilt( |
| 'psutil', |
| '5.8.0', |
| packaged=[], |
| patches=('cpu-affinity',), |
| patch_version='chromium.2', # Rebuild for crbug/1233745 |
| pyversions=['py2', 'py3'], |
| ), |
| SourceOrPrebuilt( |
| 'pyahocorasick', |
| '1.4.1', |
| packaged=(), |
| pyversions=['py3'], |
| patch_version='chromium.2', # Rebuild for crbug/1233745 |
| ), |
| SourceOrPrebuilt( |
| 'pyasn', |
| '1.6.0b1', |
| packaged=(), |
| only_plat=['manylinux-x64'], |
| pyversions=['py2'], |
| ), |
| # Prefer to use 'cryptography' instead of PyCrypto, if possible. We have |
| # to use PyCrypto for GAE dev server (it's the only crypto package |
| # available on GAE). Since we support it only on Linux and OSX, build |
| # only for these platforms. |
| SourceOrPrebuilt( |
| 'pycrypto', |
| '2.6.1', |
| packaged=(), |
| only_plat=[ |
| 'manylinux-x64', |
| 'manylinux-x64-py3', |
| 'manylinux-x64-py3.9', |
| 'mac-x64', |
| ], |
| pyversions=['py2', 'py3'], |
| ), |
| SourceOrPrebuilt( |
| 'pycryptodome', |
| '3.10.1', |
| packaged=(), |
| only_plat=['manylinux-x64-py3', 'manylinux-x64-py3.9'], |
| pyversions=['py3'], |
| ), |
| SourceOrPrebuilt( |
| 'pynacl', |
| '1.2.1', |
| packaged=(), |
| skip_plat=[ |
| 'mac-x64-cp38', 'mac-arm64-cp38', 'linux-arm64-py3', |
| 'windows-x86-py3', 'windows-x64-py3' |
| ], |
| pyversions=['py3'], |
| ), |
| SourceOrPrebuilt( |
| 'pytype', |
| '2021.2.9', |
| packaged=(), |
| only_plat=['manylinux-x64-py3'], |
| pyversions=['py3'], |
| ), |
| SourceOrPrebuilt( |
| 'scan-build', |
| '2.0.8', |
| packaged=(), |
| skip_plat=[ |
| 'mac-x64', |
| 'windows-x86', |
| 'windows-x64', |
| ], |
| pyversions=['py2'], |
| ), |
| SourceOrPrebuilt( |
| 'scandir', |
| '1.7', |
| packaged=[ |
| 'windows-x86', |
| 'windows-x64', |
| ], |
| pyversions=['py2'], |
| ), |
| SourceOrPrebuilt( |
| 'scandir', |
| '1.9.0', |
| packaged=[ |
| 'windows-x86', |
| 'windows-x64', |
| ], |
| pyversions=['py2'], |
| ), |
| SourceOrPrebuilt( |
| 'simplejson', |
| '3.13.2', |
| packaged=[ |
| 'windows-x86', |
| 'windows-x64', |
| ], |
| pyversions=['py2'], |
| ), |
| SourceOrPrebuilt( |
| 'subprocess32', |
| '3.5.0rc1', |
| packaged=['mac-x64'], |
| skip_plat=[ |
| 'windows-x86', |
| 'windows-x64', |
| ], |
| pyversions=['py2'], |
| ), |
| SourceOrPrebuilt( |
| 'typed-ast', |
| '1.4.2', |
| packaged=(), |
| only_plat=['manylinux-x64-py3', 'manylinux-x64-py3.9'], |
| pyversions=['py3'], |
| ), |
| SourceOrPrebuilt( |
| 'wrapt', |
| '1.10.11', |
| packaged=(), |
| only_plat=[ |
| 'manylinux-x64', |
| 'manylinux-x64-py3', |
| 'manylinux-x64-py3.9', |
| 'mac-x64-cp38', |
| 'windows-x64-py3', |
| ], |
| pyversions=['py2', 'py3']), |
| SourceOrPrebuilt( |
| 'wrapt', |
| '1.12.1', |
| packaged=(), |
| only_plat=[ |
| 'manylinux-x64-py3', |
| 'manylinux-x64-py3.9', |
| 'mac-x64-cp38', |
| 'windows-x64-py3', |
| ], |
| pyversions=['py3']), |
| ) |
| }) |
| |
| # Prebuilts only. These are packages where the build process is pretty complex, |
| # but fortunately the prebuilts cover all the platforms that we care about in |
| # practice. |
| from .wheel_wheel import Prebuilt |
| SPECS.update({ |
| s.spec.tag: s for s in assert_sorted( |
| 'Prebuilt', |
| Prebuilt( |
| 'debugpy', |
| '1.0.0rc2', |
| ['mac-x64', 'manylinux-x64', 'windows-x86', 'windows-x64'], |
| ), |
| # We can't build this ourselves as the build depends on Bazel. |
| Prebuilt( |
| 'dm-tree', |
| '0.1.6', |
| # TODO: The prebuilt Mac wheel is built against 10.14, but we |
| # require 10.11 or earlier. We'll need to do something else to get |
| # it working. |
| ['manylinux-x64-py3', 'manylinux-x64-py3.9', 'windows-x64-py3'], |
| ), |
| Prebuilt( |
| 'freetype-py', |
| '2.1.0.post1', |
| [ |
| 'mac-x64', |
| 'mac-x64-cp38', |
| 'manylinux-x64', |
| 'manylinux-x64-py3', |
| 'manylinux-x64-py3.9', |
| 'windows-x86', |
| 'windows-x86-py3', |
| 'windows-x64', |
| 'windows-x64-py3', |
| ], |
| pyversions=['py2', 'py3'], |
| ), |
| # We can't build this ourselves as the build depends on libhdf5. |
| Prebuilt( |
| 'h5py', |
| '2.10.0', |
| ['manylinux-x64-py3', 'windows-x64-py3', 'mac-x64-cp38'], |
| ), |
| Prebuilt( |
| 'h5py', |
| '3.1.0', |
| ['manylinux-x64-py3', 'windows-x64-py3', 'mac-x64-cp38'], |
| ), |
| Prebuilt( |
| 'lxml', |
| '4.2.5', |
| ['mac-x64', 'manylinux-x64', 'windows-x86', 'windows-x64'], |
| ), |
| Prebuilt( |
| 'lxml', |
| '4.6.2', |
| ['manylinux-x64-py3', 'manylinux-x64-py3.9'], |
| ), |
| Prebuilt( |
| 'pandas', |
| '0.23.4', |
| ['manylinux-x64', 'mac-x64', 'windows-x86', 'windows-x64'], |
| arch_map={'mac-x64': _NUMPY_MAC_x64}, |
| ), |
| Prebuilt( |
| 'pillow', |
| '5.2.0', |
| ['mac-x64', 'manylinux-x64', 'windows-x86', 'windows-x64'], |
| arch_map={'mac-x64': _NUMPY_MAC_x64}, |
| ), |
| Prebuilt( |
| 'pillow', |
| '5.4.1', |
| ['mac-x64', 'manylinux-x64', 'windows-x86', 'windows-x64'], |
| arch_map={'mac-x64': _NUMPY_MAC_x64}, |
| ), |
| Prebuilt( |
| 'pillow', |
| '6.0.0', |
| ['mac-x64', 'manylinux-x64', 'windows-x86', 'windows-x64'], |
| arch_map={'mac-x64': _NUMPY_MAC_x64}, |
| ), |
| Prebuilt( |
| 'pillow', |
| '8.1.2', |
| ['manylinux-x64-py3', 'manylinux-x64-py3.9', 'windows-x64-py3'], |
| ), |
| Prebuilt( |
| 'pillow', |
| '8.2.0', |
| [ |
| 'manylinux-x64-py3', 'manylinux-x64-py3.9', 'mac-x64-cp38', |
| 'windows-x64-py3' |
| ], |
| ), |
| Prebuilt( |
| 'pillow', |
| '8.3.1', |
| [ |
| 'manylinux-x64-py3', 'manylinux-x64-py3.9', 'mac-x64-cp38', |
| 'mac-arm64-cp38', 'windows-x64-py3' |
| ], |
| ), |
| Prebuilt('pynacl', '1.2.1', ['manylinux-x64', 'mac-x64']), |
| Prebuilt( |
| 'pypiwin32', |
| '219', |
| ['windows-x86', 'windows-x64'], |
| ), |
| Prebuilt( |
| 'pywin32', |
| '224', |
| ['windows-x86', 'windows-x64'], |
| ), |
| Prebuilt( |
| 'pywin32', |
| '225', |
| ['windows-x86', 'windows-x64'], |
| ), |
| Prebuilt( |
| 'pywin32', |
| '227', |
| ['windows-x86', 'windows-x64'], |
| ), |
| Prebuilt( |
| 'pywin32', |
| '300', |
| ['windows-x86-py3', 'windows-x64-py3'], |
| pyversions=['py3'], |
| ), |
| Prebuilt( |
| 'scipy', |
| '0.19.0', |
| ['mac-x64', 'manylinux-x64'], |
| arch_map={'mac-x64': _NUMPY_MAC_x64}, |
| ), |
| Prebuilt( |
| 'scipy', |
| '1.6.0', |
| ['manylinux-x64-py3', 'manylinux-x64-py3.9'], |
| pyversions=['py3'], |
| ), |
| Prebuilt( |
| 'scipy', |
| '1.6.2', |
| [ |
| 'manylinux-x64-py3', 'manylinux-x64-py3.9', 'mac-x64-cp38', |
| 'windows-x64-py3' |
| ], |
| pyversions=['py3'], |
| ), |
| Prebuilt( |
| 'tensorflow', |
| '2.4.1', |
| ['manylinux-x64-py3', 'mac-x64-cp38', 'windows-x64-py3'], |
| pyversions=['py3'], |
| ), |
| Prebuilt( |
| 'tensorflow', |
| '2.5.0', |
| ['manylinux-x64-py3', 'mac-x64-cp38', 'windows-x64-py3'], |
| pyversions=['py3'], |
| ), |
| ) |
| }) |
| |
| # UniversalSource. These are packages which produce universal (pure-python) |
| # wheels, but are only available in tarball form. |
| from .wheel_wheel import UniversalSource |
| SPECS.update({ |
| s.spec.tag: s for s in assert_sorted( |
| 'UniversalSource', |
| UniversalSource( |
| 'Appium_Python_Client', '0.24', pypi_name='Appium-Python-Client'), |
| UniversalSource('Django', '1.5.1'), |
| UniversalSource('PeakUtils', '1.0.3'), |
| UniversalSource('Phidgets', '2.1.8'), |
| UniversalSource('PyYAML', '5.3.1', pyversions=['py3']), |
| UniversalSource('Pympler', '0.8'), |
| UniversalSource('absl-py', '0.7.1'), |
| UniversalSource('apache-beam', '2.0.0'), |
| UniversalSource('backport_ipaddress', '0.1', pyversions=['py2']), |
| UniversalSource('backports.ssl_match_hostname', '3.5.0.1'), |
| UniversalSource('black', '19.10b0', pyversions=['py3']), |
| UniversalSource('configparser', '3.5.0'), |
| UniversalSource('crontab', '0.22.0'), |
| UniversalSource('distlib', '0.3.0', pyversions=['py2']), |
| UniversalSource('distlib', '0.3.0', pyversions=['py3']), |
| UniversalSource('future', '0.16.0'), |
| UniversalSource('future', '0.18.2'), |
| UniversalSource('gin', '0.1.006', pyversions=['py3']), |
| UniversalSource('glob2', '0.7'), |
| UniversalSource('google-cloud-trace', '0.16.0'), |
| UniversalSource( |
| 'google_compute_engine', '2.6.2', |
| pypi_name='google-compute-engine'), |
| UniversalSource('googleapis-common-protos', '1.5.3'), |
| UniversalSource('grpc-google-iam-admin-v1', '0.10.0'), |
| UniversalSource('grpc-google-iam-v1', '0.11.4'), |
| UniversalSource('gym', '0.18.0', pyversions=['py3']), |
| UniversalSource('httplib2', '0.10.3'), |
| UniversalSource('httplib2', '0.12.1'), |
| UniversalSource('httplib2', '0.13.1'), |
| UniversalSource('importlab', '0.6.1', pyversions=['py3']), |
| UniversalSource('ink-extensions', '1.0.2'), |
| UniversalSource('inotify_simple', '1.1.7'), |
| UniversalSource('itsdangerous', '1.1.0'), |
| UniversalSource('libcst', '0.3.19', pyversions=['py3']), |
| UniversalSource('libusb1', '1.5.3'), |
| UniversalSource('libusb1', '1.7.1'), |
| UniversalSource('mox', '0.5.3'), |
| UniversalSource('mozinfo', '0.10'), |
| UniversalSource('mozinfo', '1.1.0'), |
| UniversalSource('mozinfo', '1.2.2'), |
| UniversalSource('oauth2client', '3.0.0'), |
| UniversalSource('odictliteral', '1.0.0'), |
| UniversalSource('pefile', '2018.8.8'), |
| UniversalSource('perfect-hash', '0.2.1'), |
| UniversalSource('portpicker', '1.3.0'), |
| UniversalSource('portpicker', '1.3.1'), |
| UniversalSource('proto-plus', '1.13.0', pyversions=['py3']), |
| UniversalSource('protobuf-to-dict', '0.1.0'), |
| UniversalSource('pybrctl', '0.1.3'), |
| UniversalSource('pycparser', '2.17'), |
| UniversalSource('pycparser', '2.19'), |
| UniversalSource('pyftpdlib', '0.7.0'), |
| UniversalSource('pyftpdlib', '1.0.0'), |
| UniversalSource('pyftpdlib', '1.5.3'), |
| UniversalSource( |
| 'pylint', '1.5.6', patches=( |
| 'multiprocessing',), pyversions=['py2']), |
| UniversalSource( |
| 'pylint', |
| '1.8.4', |
| patches=('disable-log-spam',), |
| pyversions=['py2']), |
| UniversalSource( |
| 'pylint', |
| '1.9.5', |
| patches=('disable-log-spam',), |
| pyversions=['py2']), |
| UniversalSource('pylint-quotes', '0.1.8'), |
| UniversalSource('pyperclip', '1.8.0'), |
| UniversalSource('pyrsistent', '0.16.0', pyversions=['py3']), |
| UniversalSource('requests-unixsocket', '0.1.5'), |
| UniversalSource('retrying', '1.3.3'), |
| UniversalSource('selenium', '2.29.0'), |
| UniversalSource('termcolor', '1.1.0'), |
| UniversalSource('tlslite', '0.4.9'), |
| UniversalSource('websocket_client', '0.40.0'), |
| ) |
| }) |
| |
| # Universal. These are packages which produce universal (pure-python) wheels, |
| # and are available from PyPi in wheel form (.whl) already. |
| from .wheel_wheel import Universal |
| # yapf: disable |
| SPECS.update({ |
| s.spec.tag: s for s in assert_sorted('Universal', *[ |
| Universal('CherryPy', '14.2.0'), |
| Universal('Click', '7.0'), |
| Universal('Django', '1.9'), |
| Universal('GitPython', '2.1.9'), |
| Universal('Jinja2', '2.10'), |
| Universal('Jinja2', '2.10.1'), |
| Universal('Keras-Preprocessing', '1.1.2'), |
| Universal('Markdown', '3.0.1'), |
| Universal('Markdown', '3.3.4', pyversions=['py3']), |
| Universal('SecretStorage', '3.1.2', pyversions=['py3']), |
| Universal('WebOb', '1.8.6'), |
| Universal('WebTest', '2.0.35'), |
| Universal('Werkzeug', '0.15.2'), |
| Universal('Werkzeug', '1.0.1'), |
| Universal('absl-py', '0.11.0', pyversions=['py3']), |
| Universal('aenum', '2.1.2', pyversions=['py2']), |
| Universal('aenum', '2.1.2', pyversions=['py3']), |
| Universal('altgraph', '0.16.1'), |
| Universal('apipkg', '1.5'), |
| Universal('appdirs', '1.4.3'), |
| Universal('argcomplete', '1.12.2'), |
| Universal('argparse', |
| '1.4.0'), # Includes fixes missing from stdlib 2.7.6 |
| Universal('asn1crypto', '0.22.0'), |
| Universal('asn1crypto', '1.0.1'), |
| Universal('astroid', '1.4.9'), |
| Universal('astroid', '1.5.3'), |
| Universal('astroid', '1.6.6'), |
| Universal('astroid', '2.0.4', pyversions=['py3']), |
| Universal('astroid', '2.1.0', pyversions=['py3']), |
| Universal('astroid', '2.2.5', pyversions=['py3']), |
| Universal('astroid', '2.3.3', pyversions=['py3']), |
| Universal('astroid', '2.4.2', pyversions=['py3']), |
| Universal('astroid', '2.5.3', pyversions=['py3']), |
| Universal('astunparse', '1.5.0'), |
| Universal('astunparse', '1.6.3'), |
| Universal('atomicwrites', '1.3.0'), |
| Universal('attrs', '17.4.0'), |
| Universal('attrs', '18.2.0'), |
| Universal('attrs', '19.3.0'), |
| Universal('attrs', '20.3.0'), |
| Universal('backports.functools_lru_cache', '1.5'), |
| Universal('backports.shutil_get_terminal_size', '1.0.0'), |
| Universal('beautifulsoup4', '4.9.0', pyversions=['py2']), |
| Universal('beautifulsoup4', '4.9.0', pyversions=['py3']), |
| Universal('blessings', '1.7', pyversions=['py2']), |
| Universal('blessings', '1.7', pyversions=['py3']), |
| Universal('boto', '2.48.0'), |
| Universal('cachetools', '2.0.1'), |
| Universal('cachetools', '4.2.1', pyversions=['py3']), |
| Universal('certifi', '2018.11.29'), |
| Universal('certifi', '2019.3.9'), |
| Universal('certifi', '2020.4.5.1'), |
| Universal('certifi', '2020.11.8'), |
| Universal('certifi', '2020.12.5'), |
| Universal('chardet', '3.0.4'), |
| Universal('chardet', '4.0.0'), |
| Universal('cheroot', '6.2.4'), |
| Universal('cloudpickle', '1.6.0', pyversions=['py3']), |
| Universal('colorama', '0.4.1'), |
| Universal('contextlib2', '0.5.5'), |
| Universal('decorator', '4.4.2', pyversions=['py3']), |
| Universal('decorator', '5.0.7', pyversions=['py3']), |
| Universal('docker', '2.7.0'), |
| Universal('docker', '5.0.0'), |
| Universal('docker-pycreds', '0.2.1'), |
| Universal('enum34', '1.1.6', pyversions=['py2']), |
| Universal('enum34', '1.1.6', pyversions=['py3']), |
| Universal('execnet', '1.8.0'), |
| Universal('fabric', '1.14.0', pyversions=['py2']), |
| Universal('fasteners', '0.14.1'), |
| Universal('filelock', '3.0.12', pyversions=['py3']), |
| Universal('flask', '1.0.2'), |
| Universal('flatbuffers', '1.12'), |
| Universal('funcsigs', '1.0.2'), |
| Universal('futures', '3.1.1', pyversions=['py2']), |
| Universal('futures', '3.1.1', pyversions=['py3']), |
| Universal('gast', '0.3.3'), |
| Universal('gast', '0.4.0', pyversions=['py3']), |
| Universal('gin-config', '0.4.0'), |
| Universal('gitdb2', '2.0.3'), |
| Universal('google-api-core', '0.1.1'), |
| Universal('google-api-core', '1.25.1'), |
| Universal('google-api-python-client', '1.6.2'), |
| Universal('google-api-python-client', '1.12.8'), |
| Universal('google-api-python-client', '2.2.0', pyversions=['py3']), |
| Universal('google-apitools', '0.5.27', pyversions=['py2']), |
| Universal('google-auth', '1.2.1'), |
| Universal('google-auth', '1.20.1'), |
| Universal('google-auth', '1.25.0'), |
| Universal('google-auth', '1.29.0'), |
| Universal('google-auth-httplib2', '0.0.3'), |
| Universal('google-auth-httplib2', '0.1.0'), |
| Universal('google-auth-oauthlib', '0.3.0'), |
| Universal('google-auth-oauthlib', '0.4.4', pyversions=['py3']), |
| Universal('google-cloud-bigquery', '0.28.0'), |
| Universal('google-cloud-bigquery', '2.7.0', pyversions=['py3']), |
| Universal('google-cloud-bigtable', '0.28.1'), |
| Universal('google-cloud-core', '0.28.0'), |
| Universal('google-cloud-core', '1.5.0'), |
| Universal('google-cloud-datastore', '1.6.0'), |
| Universal('google-cloud-datastore', '2.1.6', pyversions=['py3']), |
| Universal('google-cloud-dns', '0.28.0'), |
| Universal('google-cloud-firestore', '0.28.0'), |
| Universal('google-cloud-language', '1.0.0'), |
| Universal('google-cloud-logging', '1.4.0'), |
| Universal('google-cloud-monitoring', '0.28.0'), |
| Universal('google-cloud-pubsub', '0.29.0'), |
| Universal('google-cloud-resource-manager', '0.28.0'), |
| Universal('google-cloud-runtimeconfig', '0.28.0'), |
| Universal('google-cloud-spanner', '0.29.0'), |
| Universal('google-cloud-speech', '0.30.0'), |
| Universal('google-cloud-storage', '1.6.0'), |
| Universal('google-cloud-translate', '1.3.0'), |
| Universal('google-cloud-videointelligence', '0.28.0'), |
| Universal('google-pasta', '0.2.0', pyversions=['py3']), |
| Universal('google-resumable-media', '0.3.1'), |
| Universal('google-resumable-media', '1.2.0'), |
| Universal('googleapis-common-protos', '1.52.0'), |
| Universal('html5lib', '1.0.1'), |
| Universal('httplib2', '0.19.1', pyversions=['py3']), |
| Universal('hypothesis', '6.9.1', pyversions=['py3']), |
| Universal('idna', '2.5'), |
| Universal('idna', '2.8'), |
| Universal('idna', '2.10'), |
| Universal('importlib-metadata', '1.6.0'), |
| Universal('iniconfig', '1.1.1', pyversions=['py3']), |
| Universal('ipaddress', '1.0.18', pyversions=['py2']), |
| Universal('iso8601', '0.1.12', pyversions=['py2']), |
| Universal('iso8601', '0.1.12', pyversions=['py3']), |
| Universal('isort', '4.3.4', pyversions=['py2']), |
| Universal('isort', '4.3.4', pyversions=['py3']), |
| Universal('isort', '5.8.0', pyversions=['py3']), |
| Universal('json5', '0.6.0'), |
| Universal('jsonlines', '1.2.0'), |
| Universal('jsonschema', '3.2.0'), # py2 + py3 |
| Universal('keras-nightly', '2.5.0.dev2021032900', pyversions=['py3']), |
| Universal('keyring', '18.0.1'), |
| Universal('macholib', '1.11'), |
| Universal('mccabe', '0.6.1'), |
| Universal('mock', '2.0.0'), |
| Universal('monotonic', '1.5'), |
| Universal('more-itertools', '4.1.0', pyversions=['py2']), |
| Universal('more-itertools', '4.1.0', pyversions=['py3']), |
| Universal('mozdebug', '0.1.1'), |
| Universal('mozdebug', '0.2'), |
| Universal('mozfile', '2.0.0'), |
| Universal('mozlog', '3.8'), |
| Universal('mozlog', '4.1'), |
| Universal('mozlog', '4.2.0'), |
| Universal('mozlog', '5.0'), |
| Universal('mozlog', '7.1.0'), |
| Universal('mozprocess', '0.26', pyversions=['py2']), |
| Universal('mozprocess', '1.2.1'), |
| Universal('mozterm', '1.0.0'), |
| Universal('multiprocessing-logging', '0.3.1'), |
| Universal('mypy-extensions', '0.4.3', pyversions=['py3']), |
| Universal('networkx', '2.5', pyversions=['py3']), |
| Universal('nose', '1.3.7', pyversions=['py2']), |
| Universal('nose', '1.3.7', pyversions=['py3']), |
| Universal('nose2', '0.9.1'), |
| Universal('nose2', '0.9.2'), |
| Universal('oauth2client', '4.0.0'), |
| Universal('oauth2client', '4.1.2'), |
| Universal('oauth2client', '4.1.3'), |
| Universal('oauthlib', '3.0.1'), |
| Universal('oauthlib', '3.1.0'), |
| Universal('opt-einsum', '3.3.0', pyversions=['py3']), |
| Universal('packaging', '16.8'), |
| Universal('parameterized', '0.7.0'), |
| Universal('parameterized', '0.7.1'), |
| Universal('parameterized', '0.8.1'), |
| Universal('paramiko', '1.16.3'), |
| Universal('paramiko', '2.4.1'), |
| Universal('paramiko', '2.7.2'), |
| Universal('pathlib2', '2.3.3'), |
| Universal('pbr', '3.0.0'), |
| Universal('pipenv', '2018.11.26', pyversions=['py2']), |
| Universal('pipenv', '2018.11.26', pyversions=['py3']), |
| Universal('pluggy', '0.6.0', pyversions=['py2']), |
| Universal('pluggy', '0.6.0', pyversions=['py3']), |
| Universal('pluggy', '0.7.1'), |
| Universal('pluggy', '0.8.1'), |
| Universal('pluggy', '0.13.1', pyversions=['py3']), |
| Universal('ply', '3.11'), |
| Universal('portend', '2.2'), |
| Universal('protobuf', '3.2.0'), |
| Universal('protobuf', '3.6.0'), |
| Universal('protobuf', '3.6.1'), |
| Universal('protobuf', '3.10.0'), |
| Universal('protobuf', '3.12.2'), |
| Universal('protobuf', '3.13.0'), |
| Universal('protobuf', '3.15.8'), |
| Universal('py', '1.5.3'), |
| Universal('py', '1.10.0'), |
| Universal('pyasn1', '0.2.3'), |
| Universal('pyasn1', '0.4.5'), |
| Universal('pyasn1', '0.4.8'), |
| Universal('pyasn1_modules', '0.0.8'), |
| Universal('pyasn1_modules', '0.2.4'), |
| Universal('pyasn1_modules', '0.2.8'), |
| Universal('pyfakefs', '3.7.2'), |
| Universal('pyglet', '1.5.0'), |
| Universal('pylint', '1.6.5', pyversions=['py2']), |
| Universal('pylint', '1.7.6', pyversions=['py2']), |
| Universal('pylint', '2.0.1', pyversions=['py3']), |
| Universal('pylint', '2.1.1', pyversions=['py3']), |
| Universal('pylint', '2.2.3', pyversions=['py3']), |
| Universal('pylint', '2.3.1', pyversions=['py3']), |
| Universal('pylint', '2.4.4', pyversions=['py3']), |
| Universal('pylint', '2.6.0', pyversions=['py3']), |
| Universal('pylint', '2.7.4', pyversions=['py3']), |
| Universal('pylint-quotes', '0.2.1', pyversions=['py3']), |
| Universal('pyopenssl', '17.2.0'), |
| Universal('pyopenssl', '19.0.0'), |
| Universal('pyparsing', '2.2.0'), |
| Universal('pyparsing', '2.4.7'), |
| Universal('pyserial', '3.4'), |
| Universal('pytest', '3.5.0'), |
| Universal('pytest', '3.6.2'), |
| Universal('pytest', '3.6.4'), |
| Universal('pytest', '3.10.1'), |
| Universal('pytest', '4.1.1'), |
| Universal('pytest', '5.4.3', pyversions=['py3']), |
| Universal('pytest', '6.2.2', pyversions=['py3']), |
| Universal('pytest-asyncio', '0.14.0', pyversions=['py3']), |
| Universal('pytest-cov', '2.5.1'), |
| Universal('pytest-cov', '2.6.1'), |
| Universal('pytest-cov', '2.8.1'), |
| Universal('pytest-cov', '2.11.1'), |
| Universal('pytest-forked', '1.3.0'), |
| Universal('pytest-reportlog', '0.1.2', pyversions=['py3']), |
| Universal('pytest-xdist', '1.31.0'), |
| Universal('python-dateutil', '2.7.3'), |
| Universal('python-dateutil', '2.8.1'), |
| Universal('python-magic', '0.4.24'), |
| Universal('pytz', '2018.4'), |
| Universal('pytz', '2021.1'), |
| Universal('pywinauto', '0.6.8'), |
| Universal('requests', '2.13.0'), |
| Universal('requests', '2.21.0'), |
| Universal('requests', '2.25.1'), |
| Universal('requests-oauthlib', '1.2.0'), |
| Universal('requests-oauthlib', '1.3.0'), |
| Universal('rsa', '3.4.2'), |
| Universal('rsa', '4.0'), |
| Universal('rsa', '4.7.2', pyversions=['py3']), |
| Universal('selenium', '3.4.1'), |
| Universal('selenium', '3.14.0'), |
| Universal('setuptools', '34.3.2'), |
| Universal('setuptools', '44.1.0'), |
| Universal('setuptools', '46.1.3', pyversions=['py3']), |
| Universal('singledispatch', '3.4.0.3'), |
| Universal('six', '1.10.0'), |
| Universal('six', '1.11.0'), |
| Universal('six', '1.12.0'), |
| Universal('six', '1.14.0'), |
| Universal('six', '1.15.0'), |
| Universal('smmap2', '2.0.3'), |
| Universal('sortedcontainers', '2.4.0', pyversions=['py3']), |
| Universal('soupsieve', '1.9.5'), |
| Universal('tempora', '1.11'), |
| Universal('tensorboard', '2.5.0', pyversions=['py3']), |
| Universal('tensorboard-data-server', '0.6.0', pyversions=['py3']), |
| Universal('tensorboard-plugin-wit', '1.8.0', pyversions=['py3']), |
| Universal('tensorflow-estimator', '2.4.0'), |
| Universal('tensorflow-estimator', '2.5.0'), |
| Universal('tensorflow-probability', '0.12.2'), |
| Universal('tf-agents', '0.7.1', pyversions=['py3']), |
| Universal('toml', '0.10.1', pyversions=['py3']), |
| Universal('typing', '3.6.4', pyversions=['py2']), |
| Universal('typing-extensions', '3.7.4.3', pyversions=['py3']), |
| Universal('typing-inspect', '0.7.1', pyversions=['py3']), |
| Universal('uritemplate', '3.0.0'), |
| Universal('urllib3', '1.22'), |
| Universal('urllib3', '1.24.1'), |
| Universal('urllib3', '1.24.3'), |
| Universal('urllib3', '1.26.4'), |
| Universal('virtualenv', '20.0.20'), |
| Universal('virtualenv-clone', '0.5.4'), |
| Universal('vulture', '2.3', pyversions=['py3']), |
| Universal('waitress', '1.4.3'), |
| Universal('wand', '0.6.6'), |
| Universal('wcwidth', '0.1.8'), |
| Universal('wcwidth', '0.2.5'), |
| Universal('webencodings', '0.5.1'), |
| Universal('wheel', '0.33.1'), |
| Universal('wheel', '0.36.2'), |
| Universal('yapf', '0.22.0'), |
| Universal('yapf', '0.24.0'), |
| Universal('yapf', '0.27.0'), |
| Universal('yapf', '0.30.0'), |
| Universal('yapf', '0.31.0'), |
| Universal('zipp', '1.2.0'), |
| Universal('zipp', '3.1.0', pyversions=['py3']), |
| ]) |
| }) |
| # yapf: enable |
| |
| # Special packages. |
| # |
| # The following packages all require specialized compilation, and so have their |
| # own custom builder types. |
| |
| from .wheel_opencv import OpenCV |
| SPECS.update({ |
| s.spec.tag: s for s in assert_sorted( |
| 'OpenCV', |
| OpenCV( |
| 'opencv_python', |
| '2.4.13.2', |
| '1.11.3', |
| only_plat=['manylinux-x64'], |
| # This wheel currently doesn't build at HEAD. |
| # TODO(crbug.com/1218659): Get it working again. |
| default=False), |
| # TODO: 'packaged' and 'only_plat' are identical for this wheel, so it |
| # may as well just be a 'Prebuilt'. |
| OpenCV( |
| 'opencv_python', |
| '3.2.0.7', |
| '1.12.1', |
| packaged=[ |
| 'mac-x64', |
| 'manylinux-x64', |
| 'windows-x86', |
| 'windows-x64', |
| ], |
| arch_map={'mac-x64': _NUMPY_MAC_x64}, |
| only_plat=['mac-64', 'manylinux-x64', 'windows-x86', 'windows-x64'], |
| ), |
| OpenCV( |
| 'opencv_python', |
| '4.5.3.56', |
| '1.21.1', |
| packaged=[ |
| 'mac-arm64-cp38', |
| ], |
| arch_map={'mac-arm64-cp38': _NUMPY_MAC_ARM}, |
| only_plat=['mac-arm64-cp38'], |
| ), |
| ) |
| }) |
| |
| from .wheel_cryptography import CryptographyPyPI |
| _OLD_CRYPTOGRAPHY_PACKAGED_PLATFORMS = [ |
| 'manylinux-x64', |
| 'mac-x64', |
| 'windows-x86', |
| 'windows-x64', |
| ] |
| SPECS.update({ |
| s.spec.tag: s for s in assert_sorted( |
| 'CryptographyPyPI', |
| CryptographyPyPI( |
| 'cryptography', |
| '2.0.3', |
| openssl='1.1.0f', |
| packaged=_OLD_CRYPTOGRAPHY_PACKAGED_PLATFORMS, |
| skip_plat=['mac-arm64'], |
| # This wheel currently doesn't build at HEAD. |
| # TODO(crbug.com/1218659): Get it working again. |
| default=False), |
| CryptographyPyPI( |
| 'cryptography', |
| '2.6.1', |
| openssl='1.1.0f', |
| pyversions=['py2', 'py3'], |
| skip_plat=[ |
| 'mac-arm64', 'mac-x64-cp38', 'mac-arm64-cp38', |
| 'linux-arm64-py3', 'windows-x86-py3', 'windows-x64-py3' |
| ], |
| packaged=_OLD_CRYPTOGRAPHY_PACKAGED_PLATFORMS, |
| # This wheel currently doesn't build at HEAD. |
| # TODO(crbug.com/1218659): Get it working again. |
| default=False), |
| CryptographyPyPI( |
| 'cryptography', |
| '2.9.2', |
| openssl='1.1.1i', |
| pyversions=['py2', 'py3'], |
| packaged=[ |
| 'windows-x86', 'windows-x86-py3', 'windows-x64', |
| 'windows-x64-py3' |
| ], |
| ), |
| CryptographyPyPI( |
| 'cryptography', |
| '3.3.1', |
| openssl='1.1.1i', |
| pyversions=['py2', 'py3'], |
| packaged=[ |
| 'windows-x86', 'windows-x86-py3', 'windows-x64', |
| 'windows-x64-py3' |
| ], |
| ), |
| ) |
| }) |
| |
| from .wheel_wheel import MultiWheel |
| from .wheel_mpi4py import Mpi4py |
| SPECS.update({ |
| s.spec.tag: s for s in assert_sorted( |
| 'MultiWheel', |
| # This should actually be 0.2.7, but the version needs to change in |
| # order to pick up dependencies that weren't included when the |
| # MultiWheel was originally added. |
| # |
| # Note: One of the subwheels (ppft) produces separate py2 and py3 |
| # wheels. As a result, we need separate py2 and py3 versions of the |
| # pathos multiwheel. |
| MultiWheel( |
| 'pathos', |
| '0.2.7.chromium.3', |
| ([ |
| Universal('dill', '0.3.3'), |
| Universal('klepto', '0.2.0', default=False), |
| Mpi4py( |
| 'mpi4py', |
| '3.0.3', |
| 'version:3.4.1.chromium.4', |
| packaged=[ |
| 'windows-x86', |
| 'windows-x86-py3', |
| 'windows-x64', |
| 'windows-x64-py3', |
| ], |
| ), |
| SourceOrPrebuilt( |
| 'multiprocess', |
| '0.70.11.1', |
| packaged=[], |
| pyversions=['py2', 'py3'], |
| ), |
| Universal('pathos', '0.2.7'), |
| Universal('pox', '0.2.9'), |
| Universal('ppft', '1.6.6.3', pyversions=['py2']), |
| Universal('pyina', '0.2.4'), |
| ]), |
| pyversions=['py2'], |
| # No 3pp builders for these platforms, so cannot build mpi4py. |
| skip_plat=[ |
| 'linux-armv6', |
| 'linux-mipsel', |
| 'linux-mips', |
| 'linux-mips64', |
| 'mac-arm64', |
| 'mac-arm64-cp38', |
| ], |
| ), |
| MultiWheel( |
| 'pathos', |
| '0.2.7.chromium.3', |
| ([ |
| Universal('dill', '0.3.3'), |
| Universal('klepto', '0.2.0', default=False), |
| Mpi4py( |
| 'mpi4py', |
| '3.0.3', |
| 'version:3.4.1.chromium.4', |
| packaged=[ |
| 'windows-x86', |
| 'windows-x86-py3', |
| 'windows-x64', |
| 'windows-x64-py3', |
| ], |
| ), |
| SourceOrPrebuilt( |
| 'multiprocess', |
| '0.70.11.1', |
| packaged=[], |
| pyversions=['py2', 'py3'], |
| ), |
| Universal('pathos', '0.2.7'), |
| Universal('pox', '0.2.9'), |
| Universal('ppft', '1.6.6.3', pyversions=['py3']), |
| Universal('pyina', '0.2.4'), |
| ]), |
| pyversions=['py3'], |
| # No 3pp builders for these platforms, so cannot build mpi4py. |
| skip_plat=[ |
| 'linux-armv6', |
| 'linux-mipsel', |
| 'linux-mips', |
| 'linux-mips64', |
| 'mac-arm64', |
| 'mac-arm64-cp38', |
| ], |
| ), |
| MultiWheel( |
| 'pathos', |
| '0.2.7.chromium.4', |
| ([ |
| Universal('dill', '0.3.3'), |
| Universal('klepto', '0.2.0', default=False), |
| Mpi4py( |
| 'mpi4py', |
| '3.0.3', |
| 'version:3.4.1.chromium.4', |
| packaged=[ |
| 'windows-x86', |
| 'windows-x86-py3', |
| 'windows-x64', |
| 'windows-x64-py3', |
| ], |
| ), |
| SourceOrPrebuilt( |
| 'multiprocess', |
| '0.70.11.1', |
| packaged=[], |
| pyversions=['py2', 'py3'], |
| ), |
| Universal('pathos', '0.2.7'), |
| Universal('pox', '0.2.9'), |
| Universal('ppft', '1.6.6.4', pyversions=['py2']), |
| Universal('pyina', '0.2.4'), |
| ]), |
| pyversions=['py2'], |
| # No 3pp builders for these platforms, so cannot build mpi4py. |
| skip_plat=[ |
| 'linux-armv6', |
| 'linux-mipsel', |
| 'linux-mips', |
| 'linux-mips64', |
| 'mac-arm64', |
| 'mac-arm64-cp38', |
| ], |
| ), |
| MultiWheel( |
| 'pathos', |
| '0.2.7.chromium.4', |
| ([ |
| Universal('dill', '0.3.3'), |
| Universal('klepto', '0.2.0', default=False), |
| Mpi4py( |
| 'mpi4py', |
| '3.0.3', |
| 'version:2@3.4.1.chromium.4', |
| packaged=[ |
| 'windows-x86', |
| 'windows-x86-py3', |
| 'windows-x64', |
| 'windows-x64-py3', |
| ], |
| ), |
| SourceOrPrebuilt( |
| 'multiprocess', |
| '0.70.11.1', |
| packaged=[], |
| pyversions=['py2', 'py3'], |
| ), |
| Universal('pathos', '0.2.7'), |
| Universal('pox', '0.2.9'), |
| Universal('ppft', '1.6.6.4', pyversions=['py3']), |
| Universal('pyina', '0.2.4'), |
| ]), |
| pyversions=['py3'], |
| # No 3pp builders for these platforms, so cannot build mpi4py. |
| skip_plat=[ |
| 'linux-armv6', |
| 'linux-mipsel', |
| 'linux-mips', |
| 'linux-mips64', |
| 'mac-arm64', |
| ], |
| ), |
| # List cultivated from "pyobjc-7.3"'s "setup.py" as a superset of |
| # available packages. |
| # |
| # This package is designed to be built on 10.15 (x86_64) or |
| # 11.x (arm64). |
| MultiWheel( |
| 'pyobjc', |
| '7.3.chromium.1', # Rebuild for crbug/1233745 |
| ([ |
| SourceOrPrebuilt( |
| name, |
| '7.3', |
| pyversions=['py3'], |
| packaged=[], |
| patch_base='pyobjc-framework' if name |
| .startswith('pyobjc-framework') else None, |
| patches=('setup',)) for name in ['pyobjc-core'] + [ |
| 'pyobjc-framework-%s' % (v,) for v in [ |
| 'libdispatch', |
| 'AdSupport', |
| 'AuthenticationServices', |
| 'AutomaticAssessmentConfiguration', |
| 'AVKit', |
| 'AVFoundation', |
| 'Accounts', |
| 'AddressBook', |
| 'AppleScriptKit', |
| 'AppleScriptObjC', |
| 'ApplicationServices', |
| 'Automator', |
| 'BusinessChat', |
| 'CFNetwork', |
| 'CalendarStore', |
| 'CloudKit', |
| 'Cocoa', |
| 'Collaboration', |
| 'ColorSync', |
| 'Contacts', |
| 'ContactsUI', |
| 'CoreAudio', |
| 'CoreAudioKit', |
| 'CoreBluetooth', |
| 'CoreData', |
| 'CoreHaptics', |
| 'CoreLocation', |
| 'CoreMedia', |
| 'CoreMediaIO', |
| 'CoreML', |
| 'CoreMotion', |
| 'CoreServices', |
| 'CoreSpotlight', |
| 'CoreText', |
| 'CoreWLAN', |
| 'CryptoTokenKit', |
| 'DeviceCheck', |
| 'DictionaryServices', |
| 'DiscRecording', |
| 'DiscRecordingUI', |
| 'DiskArbitration', |
| 'DVDPlayback', |
| 'EventKit', |
| 'ExceptionHandling', |
| 'ExecutionPolicy', |
| 'ExternalAccessory', |
| 'FileProvider', |
| 'FileProviderUI', |
| 'FSEvents', |
| 'FinderSync', |
| 'GameCenter', |
| 'GameController', |
| 'IMServicePlugIn', |
| 'InputMethodKit', |
| 'ImageCaptureCore', |
| 'Intents', |
| 'InstallerPlugins', |
| 'InstantMessage', |
| 'IOSurface', |
| 'LatentSemanticMapping', |
| 'LaunchServices', |
| 'LinkPresentation', |
| 'LocalAuthentication', |
| 'MapKit', |
| 'MediaAccessibility', |
| 'MediaLibrary', |
| 'MediaPlayer', |
| 'MediaToolbox', |
| 'Metal', |
| 'MetalKit', |
| 'ModelIO', |
| 'MultipeerConnectivity', |
| 'NaturalLanguage', |
| 'NetFS', |
| 'Network', |
| 'NetworkExtension', |
| 'NotificationCenter', |
| 'OpenDirectory', |
| 'OSAKit', |
| 'OSLog', |
| 'PencilKit', |
| 'Photos', |
| 'PhotosUI', |
| 'PreferencePanes', |
| 'PushKit', |
| 'Quartz', |
| 'QuickLookThumbnailing', |
| 'SafariServices', |
| 'ScreenSaver', |
| 'ScriptingBridge', |
| 'Security', |
| 'SecurityFoundation', |
| 'SecurityInterface', |
| 'SearchKit', |
| 'ServiceManagement', |
| 'Social', |
| 'Speech', |
| 'SpriteKit', |
| 'StoreKit', |
| 'SyncServices', |
| 'SystemConfiguration', |
| 'WebKit', |
| 'GameKit', |
| 'GameplayKit', |
| 'SceneKit', |
| 'SoundAnalysis', |
| 'SystemExtensions', |
| 'UserNotifications', |
| 'VideoSubscriberAccount', |
| 'VideoToolbox', |
| 'Vision', |
| 'iTunesLibrary', |
| ] |
| ] |
| ]), |
| only_plat=['mac-x64-cp38', 'mac-arm64-cp38'], |
| pyversions=['py3'], |
| ), |
| # List cultivated from "pyobjc-2.5.1"'s "setup.py" as a superset of |
| # available packages. |
| # |
| # - This must be built on Mac 10.9 or lower due to a version string |
| # parsing error in "setup.py" that rates "10.10" as a lower version |
| # than "10.9". |
| # - The package requires that "setuptools==1" package be installed. |
| # Since "run.py" doesn't support this version, the user must create |
| # their own VirtualEnv, manually install "setuptools==1", and then use |
| # the "--native-python" Dockerbuild flag to build using that Python. |
| MultiWheel( |
| 'pyobjc', |
| '2.5.1', |
| ([ |
| SourceOrPrebuilt(name, '2.5.1', packaged=[]) |
| for name in ['pyobjc-core'] + [ |
| 'pyobjc-framework-%s' % (v,) for v in [ |
| 'Accounts', |
| 'AddressBook', |
| 'AppleScriptKit', |
| 'AppleScriptObjC', |
| 'Automator', |
| 'CFNetwork', |
| 'CalendarStore', |
| 'Cocoa', |
| 'Collaboration', |
| 'CoreData', |
| 'CoreLocation', |
| 'CoreText', |
| 'DictionaryServices', |
| 'EventKit', |
| 'ExceptionHandling', |
| 'FSEvents', |
| 'InputMethodKit', |
| 'InstallerPlugins', |
| 'InstantMessage', |
| 'LatentSemanticMapping', |
| 'LaunchServices', |
| 'Message', |
| 'PreferencePanes', |
| 'PubSub', |
| 'QTKit', |
| 'Quartz', |
| 'ScreenSaver', |
| 'ScriptingBridge', |
| 'SearchKit', |
| 'ServerNotification', |
| 'ServiceManagement', |
| 'Social', |
| 'SyncServices', |
| 'SystemConfiguration', |
| 'WebKit', |
| ] |
| ] |
| ]), |
| only_plat=['mac-x64'], |
| # Because this requires a specialized environment, we will not |
| # include it in the default wheel list. |
| default=False, |
| ), |
| |
| # List cultivated from "pyobjc-4.1"'s "setup.py" as a superset of |
| # available packages. |
| # |
| # This package is designed to be built on 10.12, and had to omit the |
| # following framework packages, which require 10.13 to build: |
| # - CoreML |
| # - CoreSpotlight |
| # - ExternalAccessory |
| # - Vision |
| MultiWheel( |
| 'pyobjc', |
| '4.1', |
| ([ |
| SourceOrPrebuilt(name, '4.1', packaged=[]) |
| for name in ['pyobjc-core'] + [ |
| 'pyobjc-framework-%s' % (v,) for v in [ |
| 'AVFoundation', |
| 'AVKit', |
| 'Accounts', |
| 'AddressBook', |
| 'AppleScriptKit', |
| 'AppleScriptObjC', |
| 'ApplicationServices', |
| 'Automator', |
| 'CFNetwork', |
| 'CalendarStore', |
| 'CloudKit', |
| 'Cocoa', |
| 'Collaboration', |
| 'ColorSync', |
| 'Contacts', |
| 'ContactsUI', |
| 'CoreBluetooth', |
| 'CoreData', |
| 'CoreLocation', |
| 'CoreServices', |
| 'CoreText', |
| 'CoreWLAN', |
| 'CryptoTokenKit', |
| 'DictionaryServices', |
| 'DiskArbitration', |
| 'EventKit', |
| 'ExceptionHandling', |
| 'FSEvents', |
| 'FinderSync', |
| 'GameCenter', |
| 'GameController', |
| 'GameKit', |
| 'GameplayKit', |
| 'IMServicePlugIn', |
| 'IOSurface', |
| 'ImageCaptureCore', |
| 'InputMethodKit', |
| 'InstallerPlugins', |
| 'InstantMessage', |
| 'Intents', |
| 'InterfaceBuilderKit', |
| 'LatentSemanticMapping', |
| 'LaunchServices', |
| 'LocalAuthentication', |
| 'MapKit', |
| 'MediaAccessibility', |
| 'MediaLibrary', |
| 'MediaPlayer', |
| 'Message', |
| 'ModelIO', |
| 'MultipeerConnectivity', |
| 'NetFS', |
| 'NetworkExtension', |
| 'NotificationCenter', |
| 'OpenDirectory', |
| 'Photos', |
| 'PhotosUI', |
| 'PreferencePanes', |
| 'PubSub', |
| 'QTKit', |
| 'Quartz', |
| 'SafariServices', |
| 'SceneKit', |
| 'ScreenSaver', |
| 'ScriptingBridge', |
| 'SearchKit', |
| 'Security', |
| 'SecurityFoundation', |
| 'SecurityInterface', |
| 'ServerNotification', |
| 'ServiceManagement', |
| 'Social', |
| 'SpriteKit', |
| 'StoreKit', |
| 'SyncServices', |
| 'SystemConfiguration', |
| 'WebKit', |
| 'XgridFoundation', |
| 'iTunesLibrary', |
| 'libdispatch', |
| ] |
| ] |
| ]), |
| only_plat=['mac-x64'], |
| # This wheel currently doesn't build at HEAD. |
| # TODO(crbug.com/1218659): Get it working again. |
| default=False, |
| ), |
| # List cultivated from "pyobjc-6.2.2"'s "setup.py" as a superset of |
| # available packages. |
| # |
| # This package is designed to be built on 10.15. |
| MultiWheel( |
| 'pyobjc', |
| '6.2.2', |
| ([ |
| SourceOrPrebuilt( |
| name, '6.2.2', pyversions=['py3'], packaged=[]) |
| for name in ['pyobjc-core'] + [ |
| 'pyobjc-framework-%s' % (v,) for v in [ |
| 'libdispatch', |
| 'AdSupport', |
| 'AuthenticationServices', |
| 'AutomaticAssessmentConfiguration', |
| 'AVKit', |
| 'AVFoundation', |
| 'Accounts', |
| 'AddressBook', |
| 'AppleScriptKit', |
| 'AppleScriptObjC', |
| 'ApplicationServices', |
| 'Automator', |
| 'BusinessChat', |
| 'CFNetwork', |
| 'CalendarStore', |
| 'CloudKit', |
| 'Cocoa', |
| 'Collaboration', |
| 'ColorSync', |
| 'Contacts', |
| 'ContactsUI', |
| 'CoreAudio', |
| 'CoreAudioKit', |
| 'CoreBluetooth', |
| 'CoreData', |
| 'CoreHaptics', |
| 'CoreLocation', |
| 'CoreMedia', |
| 'CoreMediaIO', |
| 'CoreML', |
| 'CoreMotion', |
| 'CoreServices', |
| 'CoreSpotlight', |
| 'CoreText', |
| 'CoreWLAN', |
| 'CryptoTokenKit', |
| 'DeviceCheck', |
| 'DictionaryServices', |
| 'DiscRecording', |
| 'DiscRecordingUI', |
| 'DiskArbitration', |
| 'DVDPlayback', |
| 'EventKit', |
| 'ExceptionHandling', |
| 'ExecutionPolicy', |
| 'ExternalAccessory', |
| 'FileProvider', |
| 'FileProviderUI', |
| 'FSEvents', |
| 'FinderSync', |
| 'GameCenter', |
| 'GameController', |
| 'IMServicePlugIn', |
| 'InputMethodKit', |
| 'ImageCaptureCore', |
| 'Intents', |
| 'InstallerPlugins', |
| 'InstantMessage', |
| 'IOSurface', |
| 'LatentSemanticMapping', |
| 'LaunchServices', |
| 'LinkPresentation', |
| 'LocalAuthentication', |
| 'MapKit', |
| 'MediaAccessibility', |
| 'MediaLibrary', |
| 'MediaPlayer', |
| 'MediaToolbox', |
| 'Metal', |
| 'MetalKit', |
| 'ModelIO', |
| 'MultipeerConnectivity', |
| 'NaturalLanguage', |
| 'NetFS', |
| 'Network', |
| 'NetworkExtension', |
| 'NotificationCenter', |
| 'OpenDirectory', |
| 'OSAKit', |
| 'OSLog', |
| 'PencilKit', |
| 'Photos', |
| 'PhotosUI', |
| 'PreferencePanes', |
| 'PushKit', |
| 'Quartz', |
| 'QuickLookThumbnailing', |
| 'SafariServices', |
| 'ScreenSaver', |
| 'ScriptingBridge', |
| 'Security', |
| 'SecurityFoundation', |
| 'SecurityInterface', |
| 'SearchKit', |
| 'ServiceManagement', |
| 'Social', |
| 'Speech', |
| 'SpriteKit', |
| 'StoreKit', |
| 'SyncServices', |
| 'SystemConfiguration', |
| 'WebKit', |
| 'GameKit', |
| 'GameplayKit', |
| 'SceneKit', |
| 'SoundAnalysis', |
| 'SystemExtensions', |
| 'UserNotifications', |
| 'VideoSubscriberAccount', |
| 'VideoToolbox', |
| 'Vision', |
| 'iTunesLibrary', |
| ] |
| ] |
| ]), |
| only_plat=['mac-x64-cp38'], |
| pyversions=['py3'], |
| ), |
| ) |
| }) |
| |
| from .wheel_mysql import MySQLPython |
| SPECS.update({ |
| s.spec.tag: s for s in assert_sorted( |
| 'MySQLPython', |
| MySQLPython( |
| '1.2.5', |
| only_plat=[ |
| 'manylinux-x64', |
| 'linux-arm64', |
| 'linux-armv6', |
| 'linux-mips64', |
| ], |
| ), |
| ) |
| }) |
| |
| from .wheel_infra import InfraPackage |
| SPECS.update({ |
| s.spec.tag: s for s in assert_sorted( |
| 'InfraPackage', |
| InfraPackage('expect_tests'), |
| InfraPackage('infra_libs'), |
| ) |
| }) |
| |
| SPEC_NAMES = sorted(SPECS.keys()) |
| DEFAULT_SPEC_NAMES = sorted( |
| [s.spec.tag for s in SPECS.values() if s.spec.default]) |