blob: 95e7bf41f3b040524af54698ee50689fff438644 [file] [log] [blame]
# 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 re
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',
]
# Workaround for windows to avoid file paths exceeding 260 limit.
# These samples are not required for building opencv.
_OPENCV_SRC_RE = re.compile('opencv-python-[0-9.]+/opencv/samples/.*')
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 = {}
from .wheel_wheel import ConditionalWheel
# Select Numpy version based on platform. Accelerate framework on old macOS
# releases is buggy and prebuilt numpy 1.20.x disabled it. For version after
# 1.21.0 it's re-enabled which is causing numpy breaking on old macOS.
# We need numpy 1.21.0 or later to support mac-arm.
# See also: https://crbug.com/1223517#c10
def select_numpy(_system, wheel):
# Use prebuilt numpy~=1.20.0 for mac-x64, which runs old macOS.
if wheel.plat.name.startswith('mac-x64'):
return Prebuilt(
'numpy',
'1.20.3',
['mac-x64-cp38'],
arch_map={
'mac-x64-cp38': _NUMPY_MAC_x64,
},
pyversions=['py3'],
)
# Use numpy>=1.21.0 for all other platforms to include support for mac-arm.
return SourceOrPrebuilt(
'numpy',
'1.21.1',
packaged=[
'mac-arm64-cp38',
],
arch_map={
'mac-arm64-cp38': _NUMPY_MAC_ARM,
},
skip_plat=[
'mac-x64-py3',
'mac-x64-cp38',
],
pyversions=['py3'],
)
# 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
from .builder import BuildDependencies
_CFFI_DEPENDENCY = SourceOrPrebuilt(
'cffi',
'1.14.5',
patch_version='chromium.6',
packaged=[],
)
# lxml doesn't emmbed dependencies in the repo. Instead it downloads
# the dependencies' source code in the build script. We use
# LIBXML2_VERSION and LIBXSLT_VERSION to specify the versions of
# libxml2 and libxslt.
def _LxmlEnv():
env = {
'CFLAGS': '-O2 -g -fPIC',
'STATIC_DEPS': 'true',
'LIBXML2_VERSION': '2.9.10',
'LIBXSLT_VERSION': '1.1.34',
}
# This is necessary to prevent lxml's build system from forcing
# x86_64 on Mac.
if sys.platform == 'darwin':
env['LDFLAGS'] = ''
return env
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(
'MarkupSafe',
'2.0.1',
packaged=(),
pyversions=['py3'],
),
SourceOrPrebuilt(
'PyYAML',
'3.12',
packaged=[
'windows-x86',
'windows-x64',
],
pyversions=['py2'],
skip_auditwheel=True,
),
SourceOrPrebuilt(
'PyYAML',
'5.4.1',
packaged=(),
skip_auditwheel=True,
),
SourceOrPrebuilt(
'SQLAlchemy',
'1.2.5',
packaged=(),
only_plat=['manylinux-x64'],
pyversions=['py2'],
),
SourceOrPrebuilt(
'aioquic',
'0.9.15',
# TODO(crbug/1252073): We don't yet build OpenSSL for Windows.
packaged=[
'windows-x86', 'windows-x86-py3', 'windows-x64',
'windows-x64-py3'
],
pyversions=['py3'],
tpp_libs=[('infra/3pp/static_libs/openssl',
'version:2@1.1.1j.chromium.1')],
),
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 is incremented to force a rebuild when fixes are
# made to the build environment.
patch_version='chromium.6',
),
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(
'freetype-py',
'2.2.0',
packaged=(),
pyversions=['py3'],
skip_auditwheel=True,
),
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'],
patch_version='chromium.1',
),
SourceOrPrebuilt(
'gevent',
'1.5.0',
build_deps=BuildDependencies(
remote=[
'setuptools >= 40.8.0',
'wheel',
'Cython == 3.0a1',
],
local=[
_CFFI_DEPENDENCY,
SourceOrPrebuilt(
'greenlet',
'0.4.16',
packaged=[
'windows-x86',
'windows-x64',
'windows-x86-py3',
'windows-x64-py3',
],
),
],
),
packaged=[],
pyversions=['py3'],
patch_version='chromium.1',
),
SourceOrPrebuilt(
'google-crc32c',
'1.1.2',
packaged=[],
# Other platforms not yet tested.
only_plat=['manylinux-x64-py3', 'manylinux-x64-py3.9'],
pyversions=['py3'],
skip_auditwheel=True,
),
SourceOrPrebuilt(
'greenlet',
'0.4.15',
packaged=(
'manylinux-x64',
'windows-x64',
'windows-x86',
),
skip_plat=[
# greenlet 0.4.15 relies on private Python internals which were
# changed in 3.9.
'manylinux-x64-py3.9',
],
pyversions=['py2', 'py3'],
patch_version='chromium.1',
),
SourceOrPrebuilt(
'greenlet',
'0.4.16',
packaged=(
'windows-x64',
'windows-x86',
),
pyversions=['py2', 'py3'],
),
SourceOrPrebuilt(
'greenlet',
'1.0.0',
packaged=[
'windows-x86',
'windows-x64',
'windows-x86-py3',
'windows-x64-py3',
],
patch_version='chromium.1',
),
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'],
default=False),
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(
'lxml',
'4.6.3',
env=_LxmlEnv(),
packaged=[
'windows-x86-py3',
'windows-x64-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.18.5',
skip_plat=[
'mac-arm64-cp38',
],
packaged=[],
pyversions=['py3'],
),
SourceOrPrebuilt(
'numpy',
'1.19.2',
skip_plat=[
'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',
'linux-arm64-py3',
'mac-x64-cp38',
'windows-x86-py3',
'windows-x64-py3',
],
pyversions=['py3'],
),
SourceOrPrebuilt(
'numpy',
'1.20.3',
packaged=[
'mac-x64-cp38',
],
arch_map={'mac-x64-cp38': _NUMPY_MAC_x64},
skip_plat=[
'mac-arm64-cp38',
],
pyversions=['py3'],
),
SourceOrPrebuilt(
'numpy',
'1.21.1',
packaged=[
'mac-arm64-cp38',
],
arch_map={
'mac-arm64-cp38': _NUMPY_MAC_ARM,
},
pyversions=['py3'],
),
SourceOrPrebuilt(
'opencv_python',
'4.5.3.56',
build_deps=BuildDependencies(
remote=[
'setuptools',
'wheel',
'scikit-build',
'cmake',
],
local=[
ConditionalWheel(
'numpy',
'1.2x.supported.1',
select_numpy,
),
]),
packaged=(),
skip_plat=[
'linux-arm64-py3',
],
patch_version='chromium.3',
pyversions=['py3'],
src_filter=lambda path: not _OPENCV_SRC_RE.match(path),
),
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(
'pandas',
'1.3.2',
build_deps=BuildDependencies(
remote=[
'setuptools>=51.0.0',
'wheel',
'Cython>=0.29.21,<3',
],
local=[
ConditionalWheel(
'numpy',
'1.2x.supported.1',
select_numpy,
),
],
),
packaged=[
# TODO(fancl): We should copy msvcp140.dll and
# msvcp140_1.dll for windows build. See also:
# https://github.com/MacPython/pandas-wheels/blob/master/azure/windows.yml
'windows-x86-py3',
'windows-x64-py3',
],
skip_plat=[
'linux-arm64-py3',
],
patch_version='chromium.1',
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(
'pylsqpack',
'0.3.12',
packaged=(),
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(
'pynacl',
'1.4.0',
build_deps=BuildDependencies(
remote=[
'setuptools >= 40.8.0',
'wheel',
],
local=[
_CFFI_DEPENDENCY,
],
),
packaged=(
'windows-x86-py3',
'windows-x64-py3',
),
skip_plat=['linux-arm64-py3'],
pyversions=['py3'],
),
SourceOrPrebuilt(
'pytype',
'2021.2.9',
packaged=(),
only_plat=['manylinux-x64-py3'],
pyversions=['py3'],
),
SourceOrPrebuilt(
'pytype',
'2021.11.2',
packaged=(),
only_plat=['manylinux-x64-py3'],
pyversions=['py3'],
),
SourceOrPrebuilt(
'ruamel.yaml.clib',
'0.2.6',
packaged=(),
pyversions=['py3'],
),
SourceOrPrebuilt(
'scan-build',
'2.0.8',
packaged=(),
skip_plat=[
'mac-x64',
'windows-x86',
'windows-x64',
],
pyversions=['py2'],
skip_auditwheel=True,
),
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'],
default=False,
),
# 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(
'libclang',
'11.1.0',
['manylinux-x64-py3', 'windows-x64-py3', 'mac-x64-cp38'],
arch_map={'mac-x64': _NUMPY_MAC_x64},
),
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',
'windows-x86-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(
'scipy',
'1.7.1',
[
'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'],
),
Prebuilt(
'tensorflow',
'2.6.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('clang', '5.0'),
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('gym', '0.19.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('itsdangerous', '2.0.1', pyversions=['py3']),
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('tlslite-ng', '0.7.6'),
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('Click', '8.0.3', pyversions=['py3']),
Universal('Django', '1.9'),
Universal('GitPython', '2.1.9'),
Universal('Jinja2', '2.10'),
Universal('Jinja2', '2.10.1'),
Universal('Jinja2', '3.0.2', pyversions=['py3']),
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('Werkzeug', '2.0.1', pyversions=['py3']),
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('appengine-python-standard', '0.2.2', pyversions=['py3']),
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('boto3', '1.18.56', pyversions=['py3']),
Universal('cachetools', '2.0.1'),
Universal('cachetools', '4.2.1', pyversions=['py3']),
Universal('cachetools', '4.2.2', 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('certifi', '2021.5.30'),
Universal('chardet', '3.0.4'),
Universal('chardet', '4.0.0'),
Universal('charset_normalizer', '2.0.4', pyversions=['py3']),
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('decorator', '5.0.9', pyversions=['py3']),
Universal('docker', '2.7.0'),
Universal('docker', '5.0.0'),
Universal('docker-pycreds', '0.2.1'),
Universal('ecdsa', '0.17.0'),
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('flask', '2.0.2', pyversions=['py3']),
Universal('flatbuffers', '1.12'),
Universal('frozendict', '2.0.6', pyversions=['py3']),
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', '1.35.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-auth-oauthlib', '0.4.5', 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('idna', '3.2', pyversions=['py3']),
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', '2.6.0', pyversions=['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('mock', '4.0.3', pyversions=['py3']),
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('nose2', '0.10.0'),
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('oauthlib', '3.1.1'),
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('protobuf', '3.17.3'),
Universal('protobuf', '3.18.1'),
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', '2.26.0'),
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('ruamel.yaml', '0.17.16', 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('setuptools', '57.4.0', 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', '2.6.0', pyversions=['py3']),
Universal('tensorboard-data-server', '0.6.0', pyversions=['py3']),
Universal('tensorboard-data-server', '0.6.1', 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-estimator', '2.6.0'),
Universal('tensorflow-probability', '0.12.2'),
Universal('tensorflow-probability', '0.13.0'),
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('urllib3', '1.26.6'),
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('wheel', '0.37.0'),
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'],
),
)
})
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'
],
patch_version='chromium.1',
),
)
})
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'],
skip_auditwheel=True,
),
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'],
skip_auditwheel=True,
),
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: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'],
skip_auditwheel=True,
),
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',
],
),
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'],
skip_auditwheel=True,
),
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',
],
),
# 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=[],
patches=('setup',) if name == 'pyobjc-core' else ())
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])