blob: c4dc848239c7373769a3e33831f1bd6fd3ab5bca [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.
"""
# Dockerbuild is only run under python3, but this is needed to keep
# pylint 1.5 happy.
from __future__ import print_function
import difflib
import re
import sys
import packaging.version
from . import build_platform
from .builder import BuildDependencies, TppLib, TppTool
# 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',
]
# Override build dependencies for old versions of numpy because old setuptools
# not working properly on newer version of Mac (crbug/1368909).
# These dependencies are from numpy v1.23.3.
_NUMPY_BUILD_DEPS = BuildDependencies(
remote=[
'setuptools==59.2.0',
'wheel==0.37.0',
'Cython>=0.29.30,<3.0',
],
local=[],
)
# 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, packaging.version.parse(builder.spec.version or
'1')))
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-py3.8'],
arch_map={
'mac-x64-py3.8': _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',
build_deps=_NUMPY_BUILD_DEPS,
packaged=[
'mac-arm64-py3.8',
],
arch_map={
'mac-arm64-py3.8': _NUMPY_MAC_ARM,
},
skip_plat=[
'mac-x64-py3.8',
] + build_platform.ALL_PY311,
patch_version='chromium.1',
pyversions=['py3'],
)
SPECS.update({
s.spec.tag: s for s in assert_sorted(
'ConditionalWheel',
ConditionalWheel(
'numpy',
'1.20',
select_numpy,
skip_plat=build_platform.ALL_PY311,
patch_version='supported.2',
),
)
})
# 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
_CFFI_DEPENDENCY = SourceOrPrebuilt(
'cffi',
'1.14.5',
patch_version='chromium.7',
packaged=(),
)
_NUMPY_DEPENDENCY = SPECS['numpy-1.20.supported.2']
def _NumPyTppLibs(w):
# Bring in openblas only on mac.
if w.plat.name.startswith('mac'):
def _NumPySetup(pkg_dir, extra_env):
extra_env['OPENBLAS'] = pkg_dir
return [
TppLib(
'infra/3pp/static_libs/openblas',
'version:2@0.3.26.chromium.2',
setup_cb=_NumPySetup)
]
return []
def _NumPyEnv(w):
env = {}
if w.plat.name.startswith('linux-arm'):
# This library is x86-64 only, and the cross-compile detection in
# the build system does not work correctly for us.
env['NPY_DISABLE_SVML'] = '1'
if w.plat.name.startswith('windows-x86'):
# Disable trying to build 64-bit code.
env['NUMPY_CPU_DISPATCH'] = 'none'
return env
_LATEST_NUMPY = SourceOrPrebuilt(
'numpy',
'1.23.5',
packaged=(),
tpp_libs_cb=_NumPyTppLibs,
env_cb=_NumPyEnv,
patches=('cpu-dispatch',),
patch_version='chromium.4',
pyversions=['py3'],
)
# 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(w):
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 w.plat.name.startswith('mac-'):
env['LDFLAGS'] = ''
return env
def _GrpcEnv(w):
env = {}
override_plat = None
if w.plat.name.startswith('linux-arm64'):
override_plat = 'linux-aarch64'
elif w.plat.name.startswith('linux-armv6'):
override_plat = 'linux-armv6l'
if override_plat:
env['GRPC_BUILD_OVERRIDE_BORING_SSL_ASM_PLATFORM'] = override_plat
return env
def _CffiTppLibs(w):
if w.plat.name.startswith('linux-arm'):
return [
TppLib('infra/3pp/static_libs/libffi', 'version:2@3.2.1.chromium.4'),
]
return []
SPECS.update({
s.spec.tag: s for s in assert_sorted(
'SourceOrPrebuilt',
SourceOrPrebuilt(
'Brotli',
'1.0.9',
packaged=(),
),
SourceOrPrebuilt(
'MarkupSafe',
'1.1.1',
packaged=(),
pyversions=['py2', 'py3'],
),
SourceOrPrebuilt(
'MarkupSafe',
'2.0.1',
packaged=(),
pyversions=['py3'],
),
SourceOrPrebuilt(
'PyYAML',
'5.4.1',
patch_version='chromium.2',
skip_auditwheel=True,
packaged=(),
# Pin build dependencies, newer cython has broken this build.
build_deps=BuildDependencies(
remote=[
'setuptools',
'wheel',
'Cython<3.0.0a10',
],
local=[],
),
),
SourceOrPrebuilt(
'SQLAlchemy',
'2.0.4',
packaged=(),
pyversions=['py3'],
),
SourceOrPrebuilt(
'aioquic',
'0.9.15',
packaged=(),
pyversions=['py3'],
patch_version='chromium.1',
tpp_libs_cb=lambda w: [
TppLib('infra/3pp/static_libs/openssl',
'version:2@1.1.1t.chromium.2')
],
),
SourceOrPrebuilt(
'aioquic',
'0.9.20',
packaged=(),
pyversions=['py3'],
patch_version='chromium.1',
tpp_libs_cb=lambda w: [
TppLib('infra/3pp/static_libs/openssl',
'version:2@1.1.1t.chromium.2')
],
),
SourceOrPrebuilt(
'bcrypt',
'3.1.4',
packaged=(),
pyversions=['py3'],
# To build this on mac-arm64, we would need to supply the
# arm64 cffi wheel.
skip_plat=build_platform.ALL_MAC_ARM64,
),
SourceOrPrebuilt(
'cbor2',
'5.4.3',
packaged=(),
pyversions=['py3'],
),
# cffi versions before 1.15.1 don't support python 3.11.
SourceOrPrebuilt(
'cffi',
'1.14.3',
pyversions=['py3'],
skip_plat=list(
sorted(
set(build_platform.ALL_MAC)
| set(build_platform.ALL_PY311)))),
SourceOrPrebuilt(
'cffi',
'1.14.5',
packaged=(),
pyversions=['py2', 'py3'],
skip_plat=build_platform.ALL_PY311,
# patch_version is incremented to force a rebuild when fixes are
# made to the build environment.
patch_version='chromium.7',
),
SourceOrPrebuilt(
'cffi',
'1.15.0',
packaged=(),
pyversions=['py2', 'py3'],
skip_plat=build_platform.ALL_PY311,
),
SourceOrPrebuilt(
'cffi',
'1.15.1',
packaged=(),
pyversions=['py2', 'py3'],
tpp_libs_cb=_CffiTppLibs,
patch_version='chromium.2',
),
SourceOrPrebuilt(
'coverage',
'5.5',
packaged=(),
pyversions=['py2', 'py3'],
patch_version='chromium.3', # Rebuild for crbug/1233745
skip_plat=build_platform.ALL_PY311 # doesn't build
),
SourceOrPrebuilt(
'coverage',
'7.3.1',
packaged=(),
pyversions=['py3'],
),
SourceOrPrebuilt(
'crcmod',
'1.7',
pyversions=['py2', 'py3'],
patch_version='chromium.4', # Rebuild for https://crbug.com/1233745
packaged=(),
),
# Old cryptography versions are not guaranteed to build, and are left
# here to keep these wheels in the markdown.
SourceOrPrebuilt(
'cryptography',
'2.6.1',
pyversions=['py2', 'py3'],
packaged=(),
default=False,
only_plat=['manylinux-x64-py3.8'],
),
SourceOrPrebuilt(
'cryptography',
'2.9.2',
pyversions=['py2', 'py3'],
packaged=['windows-x86-py3.8', 'windows-x64-py3.8'],
patch_version='chromium.1',
default=False,
skip_plat=build_platform.ALL_PY311,
),
SourceOrPrebuilt(
'cryptography',
'3.3.1',
pyversions=['py2', 'py3'],
packaged=['windows-x86-py3.8', 'windows-x64-py3.8'],
patch_version='chromium.1',
default=False,
skip_plat=build_platform.ALL_PY311,
),
SourceOrPrebuilt(
'cryptography',
'3.3.2',
pyversions=['py2', 'py3'],
patch_version='chromium.1',
packaged=(),
build_deps=BuildDependencies(
remote=[
'setuptools >= 40.6.0',
'wheel',
],
local=[
SourceOrPrebuilt(
'cffi',
'1.15.1',
packaged=(),
pyversions=['py2', 'py3'],
tpp_libs_cb=_CffiTppLibs,
patch_version='chromium.2',
)
],
),
tpp_libs_cb=lambda w: [
TppLib('infra/3pp/static_libs/openssl',
'version:2@1.1.1t.chromium.2')
],
),
SourceOrPrebuilt(
'debugpy',
'1.5.1',
only_plat=[
'mac-x64-py3.8',
'mac-arm64-py3.8',
'manylinux-x64-py3.8',
'linux-arm64-py3.8',
'linux-armv6-py3.8',
'windows-x86-py3.8',
'windows-x64-py3.8',
],
pyversions=['py3'],
),
SourceOrPrebuilt(
'debugpy',
'1.6.7',
only_plat=[
'mac-x64-py3.8',
'mac-arm64-py3.8',
'manylinux-x64-py3.8',
'linux-arm64-py3.8',
'linux-armv6-py3.8',
'windows-x86-py3.8',
'windows-x64-py3.8',
],
pyversions=['py3'],
),
SourceOrPrebuilt(
'debugpy',
'1.8.0',
only_plat=[
'mac-x64-py3.11',
'mac-arm64-py3.11',
'manylinux-x64-py3.11',
'linux-arm64-py3.11',
'linux-armv6-py3.11',
'windows-x64-py3.11',
],
packaged=[],
pyversions=['py3'],
),
SourceOrPrebuilt(
'freetype-py',
'2.2.0',
# The bundled freetype build script seems to not work for building
# a 64-bit Windows library, so use prebuilt for now.
packaged=['windows-x64-py3.8', 'windows-x64-py3.11'],
pyversions=['py3'],
patches=('mac-arm64', 'mirror'),
patch_version='chromium.6',
env_cb=lambda w: {
'CMAKE_BUILD_TYPE': 'Release',
'FREETYPEPY_BUNDLE_FT': '1',
'PYTHON_ARCH': '64',
},
# The freetype build script does not correctly support
# cross-compiling, and there is also no 32-bit Windows wheel.
skip_plat=[
'linux-armv6-py3.8',
'linux-armv6-py3.11',
'linux-arm64-py3.8',
'linux-arm64-py3.11',
'windows-x86-py3.8',
'windows-x86-py3.11',
],
build_deps=BuildDependencies(
remote=[
'setuptools>=42',
'wheel',
'setuptools_scm[toml]>=3.4',
'certifi',
'cmake<3.28.0', # newer cmake doesn't work
],
local=[],
),
),
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-py3.8',
'windows-x64-py3.8',
],
),
],
),
packaged=[],
skip_plat=build_platform.ALL_PY311,
pyversions=['py3'],
patch_version='chromium.1',
),
SourceOrPrebuilt(
'gevent',
'23.7.0',
build_deps=BuildDependencies(
remote=[
'setuptools >= 40.8.0',
'wheel',
# cython: https://github.com/gevent/gevent/issues/1801
'Cython >= 3.0a9',
],
local=[
_CFFI_DEPENDENCY,
SourceOrPrebuilt(
'greenlet',
'2.0.2',
packaged=[
'windows-x64-py3.11',
],
),
],
),
packaged=[],
pyversions=['py3'],
),
SourceOrPrebuilt(
'gevent',
'23.9.0.post1',
build_deps=BuildDependencies(
remote=[
'setuptools',
'wheel',
'Cython',
],
local=[
_CFFI_DEPENDENCY,
SourceOrPrebuilt(
'greenlet',
'2.0.2',
packaged=[
'windows-x64-py3.11',
],
),
],
),
packaged=[],
pyversions=['py3'],
),
SourceOrPrebuilt(
'gevent',
'23.9.1',
build_deps=BuildDependencies(
remote=[
'setuptools',
'wheel',
'Cython',
],
local=[
_CFFI_DEPENDENCY,
SourceOrPrebuilt(
'greenlet',
'3.0.1',
packaged=[
# NOTE: This version of greenlet is statically
# linked against the MSVC runtime in order to avoid
# runtime DLL import issues.
#
# Per https://github.com/python-greenlet/greenlet/issues/346
# this could make the situation better or worse
# (presumably this could land us in trouble if we
# have a mismatched MSVC runtime in the interpreter
# itself.)
'windows-x64-py3.11',
],
),
],
),
packaged=[],
pyversions=['py3'],
),
SourceOrPrebuilt(
'google-crc32c',
'1.1.2',
packaged=[],
# Other platforms not yet tested.
only_plat=['manylinux-x64-py3.8', 'manylinux-x64-py3.11'],
pyversions=['py3'],
skip_auditwheel=True,
),
SourceOrPrebuilt(
'google-crc32c',
'1.3.0',
packaged=[
'windows-x86-py3.8',
'windows-x64-py3.8',
],
skip_plat=[
'linux-arm64-py3.11',
'linux-arm64-py3.8',
'linux-armv6-py3.11',
'linux-armv6-py3.8',
'windows-x86-py3.11',
'windows-x64-py3.11',
],
pyversions=['py3'],
patch_version='chromium.1',
skip_auditwheel=True,
),
SourceOrPrebuilt(
'google-crc32c',
'1.5.0',
packaged=[
'linux-arm64-py3.11',
'linux-arm64-py3.8',
'windows-x86-py3.8',
'windows-x64-py3.8',
'windows-x86-py3.11',
'windows-x64-py3.11',
],
skip_plat=[
'linux-armv6-py3.11',
'linux-armv6-py3.8',
],
arch_map={
'linux-arm64-py3.11': ['manylinux2014_aarch64'],
'linux-arm64-py3.8': ['manylinux2014_aarch64'],
},
pyversions=['py3'],
patch_version='chromium.1',
skip_auditwheel=True,
),
SourceOrPrebuilt(
'greenlet',
'0.4.15',
packaged=(),
skip_plat=build_platform.ALL_PY311,
pyversions=['py2', 'py3'],
patch_version='chromium.1',
),
SourceOrPrebuilt(
'greenlet',
'0.4.16',
packaged=(),
skip_plat=build_platform.ALL_PY311,
pyversions=['py2', 'py3'],
),
SourceOrPrebuilt(
'greenlet',
'1.0.0',
packaged=[
'windows-x86-py3.8',
'windows-x64-py3.8',
],
skip_plat=build_platform.ALL_PY311,
patch_version='chromium.1',
),
SourceOrPrebuilt(
'greenlet',
'2.0.2',
packaged=[
'windows-x64-py3.11',
],
pyversions=['py3'],
),
SourceOrPrebuilt(
'greenlet',
'3.0.1',
packaged=[
# NOTE: This version of greenlet is statically linked against
# the MSVC runtime in order to avoid runtime DLL import issues.
#
# Per https://github.com/python-greenlet/greenlet/issues/346
# this could make the situation better or worse (presumably this
# could land us in trouble if we have a mismatched MSVC runtime
# in the interpreter itself.)
'windows-x64-py3.11',
],
pyversions=['py3'],
),
SourceOrPrebuilt(
'grpcio',
'1.32.0',
skip_plat=[
'linux-armv6-py3.8',
'linux-arm64-py3.8',
# grpcio does not yet support Mac ARM64, but work is underway.
# See https://github.com/grpc/grpc/issues/24002
'mac-arm64-py3.8',
] + build_platform.ALL_PY311,
pyversions=['py3']),
SourceOrPrebuilt(
'grpcio',
'1.34.1',
skip_plat=[
'linux-armv6-py3.8',
'linux-arm64-py3.8',
# grpcio does not yet support Mac ARM64, but work is underway.
# See https://github.com/grpc/grpc/issues/24002
'mac-arm64-py3.8',
] + build_platform.ALL_PY311,
pyversions=['py3']),
SourceOrPrebuilt(
'grpcio',
'1.39.0',
skip_plat=[
'linux-armv6-py3.8',
'linux-arm64-py3.8',
] + build_platform.ALL_PY311,
pyversions=['py3']),
SourceOrPrebuilt(
'grpcio',
'1.44.0',
pyversions=['py3'],
env_cb=_GrpcEnv,
skip_plat=build_platform.ALL_PY311),
SourceOrPrebuilt(
'grpcio', '1.54.2', pyversions=['py3'], env_cb=_GrpcEnv),
SourceOrPrebuilt(
'grpcio', '1.57.0', pyversions=['py3'], env_cb=_GrpcEnv),
SourceOrPrebuilt(
'grpcio-tools',
'1.32.0',
skip_plat=[
'linux-armv6-py3.8',
'linux-arm64-py3.8',
'mac-arm64-py3.8',
] + build_platform.ALL_PY311,
pyversions=['py3']),
SourceOrPrebuilt(
'grpcio-tools',
'1.39.0',
skip_plat=[
'linux-armv6-py3.8',
'linux-arm64-py3.8',
] + build_platform.ALL_PY311,
pyversions=['py3'],
default=False),
SourceOrPrebuilt(
'grpcio-tools',
'1.59.3',
skip_plat=[
'linux-armv6-py3.8',
'linux-arm64-py3.8',
],
pyversions=['py3']),
SourceOrPrebuilt(
'ijson',
'3.1.4',
packaged=(),
only_plat=[
'manylinux-x64-py3.8',
'manylinux-x64-py3.11',
],
tpp_libs_cb=lambda w:
[TppLib('infra/3pp/static_libs/yajl', 'version:2@2.1.0')],
),
SourceOrPrebuilt(
'ijson',
'3.2.3',
pyversions=['py3'],
tpp_libs_cb=lambda w:
[TppLib('infra/3pp/static_libs/yajl', 'version:2@2.1.0')],
),
SourceOrPrebuilt(
'lazy-object-proxy',
'1.3.1',
packaged=(),
skip_plat=[
'linux-arm64-py3.8',
'mac-x64-py3.8',
],
pyversions=['py2', 'py3'],
),
SourceOrPrebuilt(
'lazy-object-proxy',
'1.4.3',
packaged=(),
skip_plat=[
'linux-arm64-py3.8',
],
pyversions=['py3'],
),
SourceOrPrebuilt(
'lxml',
'4.6.3',
env_cb=_LxmlEnv,
packaged=[
'windows-x86-py3.8',
'windows-x64-py3.8',
],
skip_plat=build_platform.ALL_PY311,
pyversions=['py3'],
),
SourceOrPrebuilt(
'lxml',
'4.9.3',
env_cb=_LxmlEnv,
packaged=[
'windows-x86-py3.8',
'windows-x86-py3.11',
'windows-x64-py3.8',
'windows-x64-py3.11',
],
pyversions=['py3'],
),
SourceOrPrebuilt(
'multidict',
'6.0.2',
packaged=(),
),
SourceOrPrebuilt(
'mysqlclient',
'2.1.1',
packaged=(),
patches=('static',),
only_plat=[
'manylinux-x64-py3.8',
'manylinux-x64-py3.11',
'mac-x64-py3.8',
'mac-x64-py3.11',
'mac-arm64-py3.8',
'mac-arm64-py3.11',
],
tpp_libs_cb=lambda w: [
TppLib('infra/3pp/static_libs/mysqlclient', 'version:2@8.0.26'),
TppLib('infra/3pp/static_libs/openssl',
'version:2@1.1.1j.chromium.2')
],
),
SourceOrPrebuilt(
'ninja',
'1.10.0.post2',
packaged=(),
only_plat=['manylinux-x64-py3.8'],
pyversions=['py3'],
),
SourceOrPrebuilt(
'ninja',
'1.10.2.4',
packaged=(
'mac-x64-py3.8',
'mac-arm64-py3.8',
'windows-x86-py3.8',
'windows-x86-py3.11',
'windows-x64-py3.8',
'windows-x64-py3.11',
'linux-arm64-py3.8',
'linux-arm64-py3.11',
),
arch_map={
'mac-x64-py3.8': ['macosx_10_9_x86_64'],
'mac-arm64-py3.8': ['macosx_11_0_arm64'],
'linux-arm64-py3.8': ['manylinux2014_aarch64'],
'linux-arm64-py3.11': ['manylinux2014_aarch64'],
},
skip_plat=[
'linux-armv6-py3.8',
'linux-armv6-py3.11',
],
patch_version='chromium.1',
pyversions=['py3'],
# Installing cmake through setup.py is both unreliable and
# non-hermetic, so supply it from the 3pp package.
tpp_tools=[
TppTool('infra/3pp/tools/cmake', 'version:2@3.26.0.chromium.7'),
],
),
SourceOrPrebuilt(
'numpy',
'1.20.3',
build_deps=_NUMPY_BUILD_DEPS,
packaged=[
'mac-x64-py3.8',
],
arch_map={'mac-x64-py3.8': _NUMPY_MAC_x64},
skip_plat=[
'mac-arm64-py3.8',
] + build_platform.ALL_PY311,
patch_version='chromium.1',
pyversions=['py3'],
),
SourceOrPrebuilt(
'numpy',
'1.21.1',
build_deps=_NUMPY_BUILD_DEPS,
packaged=[
'mac-arm64-py3.8',
],
arch_map={
'mac-arm64-py3.8': _NUMPY_MAC_ARM,
},
skip_plat=build_platform.ALL_PY311,
patch_version='chromium.1',
pyversions=['py3'],
),
SourceOrPrebuilt(
'numpy',
'1.22.1',
build_deps=_NUMPY_BUILD_DEPS,
packaged=[
'mac-arm64-py3.8',
],
arch_map={
'mac-arm64-py3.8': _NUMPY_MAC_ARM,
},
skip_plat=[
'linux-armv6-py3.8',
'linux-arm64-py3.8',
] + build_platform.ALL_PY311,
patch_version='chromium.1',
pyversions=['py3'],
),
_LATEST_NUMPY,
SourceOrPrebuilt(
'opencv_python',
'4.5.3.56',
build_deps=BuildDependencies(
remote=[
'setuptools==44.1.1',
'wheel==0.37.1',
'scikit-build==0.13.1',
'cmake==3.22.4',
],
local=[
_NUMPY_DEPENDENCY,
]),
packaged=[
'linux-arm64-py3.8',
],
skip_plat=[
'linux-armv6-py3.8',
] + build_platform.ALL_PY311, # requires a newer numpy
patch_version='chromium.4',
pyversions=['py3'],
src_filter=lambda path: not _OPENCV_SRC_RE.match(path),
arch_map={'linux-arm64-py3.8': ['manylinux2014_aarch64']},
),
SourceOrPrebuilt(
'opencv_python',
'4.8.1.78',
build_deps=BuildDependencies(
remote=[
'setuptools==59.2.0',
'wheel==0.37.1',
'scikit-build==0.14.0',
'cmake==3.22.4',
],
local=[_LATEST_NUMPY],
),
packaged=[
'linux-arm64-py3.8',
'linux-arm64-py3.11',
# TODO(https://crbug.com/1502028): Build with VS2022.
'windows-x64-py3.8',
'windows-x64-py3.11',
'windows-x86-py3.8',
'windows-x86-py3.11',
],
skip_plat=[
'linux-armv6-py3.8',
'linux-armv6-py3.11',
],
pyversions=['py3'],
src_filter=lambda path: not _OPENCV_SRC_RE.match(path),
arch_map={
'linux-arm64-py3.8': ['manylinux2014_aarch64'],
'linux-arm64-py3.11': ['manylinux2014_aarch64']
},
patch_version='chromium.1',
),
SourceOrPrebuilt(
'pandas',
'1.1.3',
packaged=[],
skip_plat=[
'mac-x64-py3.8',
'mac-arm64-py3.8',
'windows-x86-py3.8',
'windows-x64-py3.8',
] + build_platform.ALL_PY311,
pyversions=['py3'],
),
SourceOrPrebuilt(
'pandas',
'1.3.2',
build_deps=BuildDependencies(
remote=[
'setuptools>=51.0.0',
'wheel',
'Cython>=0.29.21,<3',
],
local=[
_NUMPY_DEPENDENCY,
],
),
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.8',
'windows-x64-py3.8',
],
skip_plat=[
'linux-armv6-py3.8',
] + build_platform.ALL_PY311, # Requires a newer numpy
patch_version='chromium.1',
pyversions=['py3'],
),
SourceOrPrebuilt(
'pandas',
'1.5.3',
build_deps=BuildDependencies(
remote=[
'setuptools>=51.0.0',
'wheel',
'Cython>=0.29.32,<3',
],
local=[_LATEST_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.8',
'windows-x64-py3.8',
],
skip_plat=[
'linux-armv6-py3.8',
],
pyversions=['py3'],
patch_version='chromium.1',
),
SourceOrPrebuilt(
'psutil',
'5.6.2',
packaged=(),
skip_plat=[
'linux-arm64-py3.8',
'manylinux-x64-py3.8',
] + build_platform.ALL_PY311,
pyversions=['py2', 'py3'],
),
SourceOrPrebuilt(
'psutil',
'5.7.2',
packaged=[],
pyversions=['py3'],
),
SourceOrPrebuilt(
'psutil',
'5.8.0',
packaged=(),
patches=('cpu-affinity',),
patch_version='chromium.3', # Rebuild for crbug/1233745
pyversions=['py2', 'py3'],
),
SourceOrPrebuilt(
'psutil',
'5.9.8',
packaged=(),
pyversions=['py2', 'py3'],
),
SourceOrPrebuilt(
'pyahocorasick',
'1.4.1',
packaged=(),
# Windows requires a newer version to build with 3.11.
skip_plat=['windows-x64-py3.11', 'windows-x86-py3.11'],
pyversions=['py3'],
patch_version='chromium.2', # Rebuild for crbug/1233745
),
SourceOrPrebuilt(
'pyahocorasick',
'1.4.4',
packaged=(),
pyversions=['py3'],
),
SourceOrPrebuilt(
'pyarrow',
'16.1.0',
# Attempts to build from source complain about being unable to find
# CMake configuration files for Arrow, so use packaged versions for
# now.
packaged=[
'linux-arm64-py3.8',
'linux-arm64-py3.11',
'manylinux-x64-py3.8',
'manylinux-x64-py3.11',
'mac-x64-py3.8',
'mac-x64-py3.11',
'mac-arm64-py3.8',
'mac-arm64-py3.11',
'windows-x64-py3.8',
'windows-x64-py3.11',
],
skip_plat=[
'linux-armv6-py3.11',
'linux-armv6-py3.8',
'windows-x86-py3.8',
'windows-x86-py3.11',
],
arch_map={
'linux-arm64-py3.8': ['manylinux2014_aarch64'],
'linux-arm64-py3.11': ['manylinux2014_aarch64'],
'mac-x64-py3.8': ['macosx_10_15_x86_64'],
'mac-x64-py3.11': ['macosx_10_15_x86_64'],
},
pyversions=['py3'],
),
# 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-py3.8',
'manylinux-x64-py3.11',
],
pyversions=['py2', 'py3'],
),
SourceOrPrebuilt(
'pycryptodome',
'3.10.1',
packaged=(),
only_plat=['manylinux-x64-py3.8', 'manylinux-x64-py3.11'],
pyversions=['py3'],
),
SourceOrPrebuilt(
'pydevd-pycharm',
'232.6734.4',
packaged=(),
skip_auditwheel=True,
pyversions=['py3'],
),
SourceOrPrebuilt(
'pylsqpack',
'0.3.12',
packaged=(),
pyversions=['py3'],
),
SourceOrPrebuilt(
'pynacl',
'1.2.1',
packaged=(),
only_plat=[
'manylinux-x64-py3.8',
'manylinux-x64-py3.11',
],
pyversions=['py3'],
),
SourceOrPrebuilt(
'pynacl',
'1.4.0',
build_deps=BuildDependencies(
remote=[
'setuptools >= 40.8.0',
'wheel',
],
local=[
_CFFI_DEPENDENCY,
],
),
packaged=(
'windows-x86-py3.8',
'windows-x86-py3.11',
'windows-x64-py3.8',
'windows-x64-py3.11',
),
skip_plat=[
'linux-armv6-py3.8',
'linux-armv6-py3.11',
'linux-arm64-py3.8',
'linux-arm64-py3.11',
],
pyversions=['py3'],
),
SourceOrPrebuilt(
'pyre2',
'0.3.6',
packaged=(),
only_plat=['manylinux-x64-py3.8'],
pyversions=['py3'],
tpp_libs_cb=lambda w: [
TppLib('infra/3pp/static_libs/re2',
'version:2@2022-12-01.chromium.1')
],
),
SourceOrPrebuilt(
'pytype',
'2021.2.9',
packaged=(),
only_plat=['manylinux-x64-py3.8'],
pyversions=['py3'],
),
SourceOrPrebuilt(
'pytype',
'2021.11.2',
packaged=(),
only_plat=['manylinux-x64-py3.8'],
pyversions=['py3'],
),
SourceOrPrebuilt(
'pytype',
'2022.5.5',
packaged=(),
only_plat=[
'manylinux-x64-py3.8',
'mac-x64-py3.8',
'mac-arm64-py3.8',
],
pyversions=['py3'],
),
SourceOrPrebuilt(
'pytype',
'2022.12.15',
packaged=(),
only_plat=[
'manylinux-x64-py3.8',
'mac-x64-py3.8',
'mac-arm64-py3.8',
],
pyversions=['py3'],
),
SourceOrPrebuilt(
'pytype',
'2023.6.2',
packaged=(),
only_plat=[
'manylinux-x64-py3.8',
'mac-x64-py3.8',
'mac-arm64-py3.8',
],
pyversions=['py3'],
),
SourceOrPrebuilt(
'pytype',
'2023.10.17',
packaged=(),
only_plat=[
'manylinux-x64-py3.8',
'manylinux-x64-py3.11',
'mac-x64-py3.8',
'mac-x64-py3.11',
'mac-arm64-py3.8',
'mac-arm64-py3.11',
],
pyversions=['py3'],
),
SourceOrPrebuilt(
'pytype',
'2024.1.24',
packaged=(),
only_plat=[
'manylinux-x64-py3.8',
'manylinux-x64-py3.11',
'mac-x64-py3.8',
'mac-x64-py3.11',
'mac-arm64-py3.8',
'mac-arm64-py3.11',
],
pyversions=['py3'],
),
SourceOrPrebuilt(
'ruamel.yaml.clib',
'0.2.6',
packaged=(),
skip_plat=build_platform.ALL_PY311,
pyversions=['py3'],
),
SourceOrPrebuilt(
'ruamel.yaml.clib',
'0.2.8',
packaged=(),
pyversions=['py3'],
),
# typed-ast will not be available for python 3.11.
# Users should switch the native ast module instead.
SourceOrPrebuilt(
'typed-ast',
'1.4.2',
packaged=(),
only_plat=['manylinux-x64-py3.8'],
pyversions=['py3'],
),
SourceOrPrebuilt(
'typed-ast',
'1.5.3',
packaged=(),
skip_plat=build_platform.ALL_PY311,
pyversions=['py3'],
),
SourceOrPrebuilt(
'wrapt',
'1.10.11',
packaged=(),
only_plat=[
'manylinux-x64-py3.8',
'mac-x64-py3.8',
'windows-x64-py3.8',
],
pyversions=['py2', 'py3']),
SourceOrPrebuilt(
'wrapt',
'1.12.1',
packaged=(),
only_plat=[
'manylinux-x64-py3.8',
'mac-x64-py3.8',
'mac-arm64-py3.8',
'windows-x64-py3.8',
],
pyversions=['py3']),
SourceOrPrebuilt(
'wrapt',
'1.13.3',
packaged=(),
only_plat=[
'manylinux-x64-py3.8',
'mac-x64-py3.8',
'mac-arm64-py3.8',
'windows-x64-py3.8',
],
pyversions=['py3']),
SourceOrPrebuilt(
'yarl',
'1.8.1',
packaged=(),
),
SourceOrPrebuilt(
'zope.interface', '6.0', packaged=(), pyversions=['py3']),
SourceOrPrebuilt(
'zstandard', '0.16.0', packaged=(), 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',
# We can't build this ourselves as the build depends on Bazel.
# dm-tree 0.1.8 needed for python 3.11.
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.8', 'windows-x64-py3.8'],
),
Prebuilt(
'dm-tree',
'0.1.8',
[
'mac-x64-py3.8',
'manylinux-x64-py3.8',
'manylinux-x64-py3.11',
'windows-x64-py3.8',
],
),
Prebuilt(
'freetype-py',
'2.1.0.post1',
[
'mac-x64-py3.8',
'manylinux-x64-py3.8',
'manylinux-x64-py3.11',
'windows-x86-py3.8',
'windows-x64-py3.8',
],
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.8', 'windows-x64-py3.8', 'mac-x64-py3.8'],
),
Prebuilt(
'h5py',
'3.1.0',
['manylinux-x64-py3.8', 'windows-x64-py3.8', 'mac-x64-py3.8'],
),
Prebuilt(
'h5py',
'3.6.0',
['manylinux-x64-py3.8', 'windows-x64-py3.8', 'mac-x64-py3.8'],
),
Prebuilt(
'libclang',
'11.1.0',
['manylinux-x64-py3.8', 'windows-x64-py3.8', 'mac-x64-py3.8'],
),
Prebuilt(
'libclang',
'12.0.0',
['manylinux-x64-py3.8', 'windows-x64-py3.8', 'mac-x64-py3.8'],
),
Prebuilt(
'libcst',
'0.4.9',
[
'manylinux-x64-py3.8',
'manylinux-x64-py3.11',
'linux-arm64-py3.8',
'linux-arm64-py3.11',
'mac-x64-py3.8',
'mac-arm64-py3.8',
'windows-x64-py3.8',
'windows-x64-py3.11',
],
arch_map={
'linux-arm64-py3.8': ['manylinux2014_aarch64'],
'linux-arm64-py3.11': ['manylinux2014_aarch64'],
},
pyversions=['py3'],
),
Prebuilt(
'libcst',
'1.1.0',
[
'manylinux-x64-py3.8',
'manylinux-x64-py3.11',
'linux-arm64-py3.8',
'linux-arm64-py3.11',
'mac-x64-py3.8',
'mac-arm64-py3.8',
'windows-x64-py3.8',
'windows-x64-py3.11',
],
arch_map={
'linux-arm64-py3.8': ['manylinux2014_aarch64'],
'linux-arm64-py3.11': ['manylinux2014_aarch64'],
},
pyversions=['py3'],
),
Prebuilt(
'lxml',
'4.6.2',
['manylinux-x64-py3.8'],
),
Prebuilt(
'pillow',
'8.1.2',
['manylinux-x64-py3.8', 'windows-x64-py3.8'],
),
Prebuilt(
'pillow',
'8.2.0',
['manylinux-x64-py3.8', 'mac-x64-py3.8', 'windows-x64-py3.8'],
),
Prebuilt(
'pillow',
'8.3.1',
[
'manylinux-x64-py3.8',
'linux-arm64-py3.8',
'mac-x64-py3.8',
'mac-arm64-py3.8',
'windows-x64-py3.8',
'windows-x86-py3.8',
],
arch_map={'linux-arm64-py3.8': ['manylinux2014_aarch64']},
),
Prebuilt(
'pillow',
'9.5.0',
[
'manylinux-x64-py3.8',
'manylinux-x64-py3.11',
'linux-arm64-py3.8',
'linux-arm64-py3.11',
'mac-x64-py3.8',
'mac-x64-py3.11',
'mac-arm64-py3.8',
'mac-arm64-py3.11',
'windows-x64-py3.8',
'windows-x64-py3.11',
'windows-x86-py3.8',
'windows-x86-py3.11',
],
arch_map={
'linux-arm64-py3.8': ['manylinux_2_17_aarch64'],
'linux-arm64-py3.11': ['manylinux_2_17_aarch64']
},
),
Prebuilt(
'pywin32',
'300',
['windows-x86-py3.8', 'windows-x64-py3.8'],
pyversions=['py3'],
),
Prebuilt(
'pywin32',
'306',
[
'windows-x86-py3.8', 'windows-x86-py3.11', 'windows-x64-py3.8',
'windows-x64-py3.11'
],
pyversions=['py3'],
),
Prebuilt(
'scipy',
'1.6.0',
['manylinux-x64-py3.8'],
pyversions=['py3'],
),
Prebuilt(
'scipy',
'1.6.2',
['manylinux-x64-py3.8', 'mac-x64-py3.8', 'windows-x64-py3.8'],
pyversions=['py3'],
),
Prebuilt(
'scipy',
'1.7.1',
['manylinux-x64-py3.8', 'mac-x64-py3.8', 'windows-x64-py3.8'],
pyversions=['py3'],
),
Prebuilt(
'scipy',
'1.7.3',
[
'manylinux-x64-py3.8', 'mac-x64-py3.8', 'mac-arm64-py3.8',
'windows-x64-py3.8'
],
pyversions=['py3'],
arch_map={'mac-arm64-py3.8': ['macosx_12_0_arm64']},
),
Prebuilt(
'scipy',
'1.10.1', [
'manylinux-x64-py3.8',
'manylinux-x64-py3.11',
'mac-x64-py3.8',
'mac-x64-py3.11',
'mac-arm64-py3.8',
'mac-arm64-py3.11',
'windows-x64-py3.8',
'windows-x64-py3.11',
],
pyversions=['py3'],
arch_map={
'mac-arm64-py3.8': ['macosx_12_0_arm64'],
'mac-arm64-py3.11': ['macosx_12_0_arm64'],
}),
Prebuilt(
'tensorflow',
'2.4.1',
['manylinux-x64-py3.8', 'mac-x64-py3.8', 'windows-x64-py3.8'],
pyversions=['py3'],
),
Prebuilt(
'tensorflow',
'2.5.0',
['manylinux-x64-py3.8', 'mac-x64-py3.8', 'windows-x64-py3.8'],
pyversions=['py3'],
),
Prebuilt(
'tensorflow',
'2.6.0',
['manylinux-x64-py3.8', 'mac-x64-py3.8', 'windows-x64-py3.8'],
pyversions=['py3'],
),
Prebuilt(
'tensorflow',
'2.7.0',
['manylinux-x64-py3.8', 'mac-x64-py3.8', 'windows-x64-py3.8'],
pyversions=['py3'],
),
Prebuilt(
'tensorflow-decision-forests',
'0.2.4',
['manylinux-x64-py3.8'],
pyversions=['py3'],
),
Prebuilt(
'tensorflow-io-gcs-filesystem',
'0.23.1',
['manylinux-x64-py3.8', 'mac-x64-py3.8', 'windows-x64-py3.8'],
pyversions=['py3'],
arch_map={'mac-x64-py3.8': ['macosx_10_14_x86_64']},
),
)
})
# 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('Mako', '1.2.3', pyversions=['py3']),
UniversalSource('PeakUtils', '1.0.3'),
UniversalSource('Phidgets', '2.1.8'),
UniversalSource('PyYAML', '5.3.1', pyversions=['py3']),
UniversalSource('PyYAML', '6.0.1', pyversions=['py3']),
UniversalSource('Pympler', '0.8'),
UniversalSource('absl-py', '0.7.1'),
UniversalSource('apache-beam', '2.0.0'),
UniversalSource('backports.ssl_match_hostname', '3.5.0.1'),
UniversalSource('beartype', '0.15.0', pyversions=['py3']),
UniversalSource('black', '19.10b0', pyversions=['py3']),
UniversalSource('boolean.py', '4.0', pyversions=['py3']),
UniversalSource('clang', '5.0'),
UniversalSource(
'clusterfuzz',
'2.5.6',
patches=('no-deps-install',),
),
UniversalSource('configparser', '3.5.0'),
UniversalSource('crontab', '0.22.0'),
UniversalSource('distlib', '0.3.0', pyversions=['py3']),
UniversalSource('distlib', '0.3.7', pyversions=['py3']),
UniversalSource('docopt', '0.6.2'),
UniversalSource('ezt', '1.1'),
UniversalSource('fixtures', '4.0.1'),
UniversalSource('flake8', '6.0.0'),
UniversalSource('flask-talisman', '0.7.0'),
UniversalSource('future', '0.16.0'),
UniversalSource('future', '0.18.2'),
UniversalSource('gin', '0.1.006', pyversions=['py3']),
UniversalSource('glob2', '0.7'),
UniversalSource('google-cloud-monitoring', '2.9.1'),
UniversalSource('google-cloud-trace', '0.16.0'),
UniversalSource('google-cloud-trace', '0.24.2', pyversions=['py3']),
UniversalSource('google-cloud-trace', '1.11.2', pyversions=['py3']),
UniversalSource(
'google_compute_engine', '2.6.2',
pypi_name='google-compute-engine'),
UniversalSource('googleapis-common-protos', '1.5.3'),
UniversalSource('googleapis-common-protos', '1.59.0'),
UniversalSource('grpc-google-iam-admin-v1', '0.10.0'),
UniversalSource('grpc-google-iam-v1', '0.11.4'),
UniversalSource('grpc-google-iam-v1', '0.12.3', pyversions=['py3']),
UniversalSource('grpc-google-iam-v1', '0.12.6', pyversions=['py3']),
UniversalSource('grpc-google-iam-v1', '0.12.7'),
UniversalSource('gym', '0.18.0', pyversions=['py3']),
UniversalSource('gym', '0.19.0', pyversions=['py3']),
UniversalSource('hjson', '3.1.0'),
UniversalSource('httpagentparser', '1.9.3'),
UniversalSource('httplib2', '0.10.3'),
UniversalSource('httplib2', '0.12.1'),
UniversalSource('httplib2', '0.13.1'),
UniversalSource('importlab', '0.6.1', pyversions=['py3']),
UniversalSource('importlab', '0.7', pyversions=['py3']),
UniversalSource('importlab', '0.8', 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('license-expression', '30.1.1', pyversions=['py3']),
UniversalSource('lit', '13.0.0', pyversions=['py3']),
UniversalSource('mox', '0.5.3'),
UniversalSource('mozinfo', '0.10'),
UniversalSource('mozinfo', '1.1.0'),
UniversalSource('mozinfo', '1.2.2'),
UniversalSource('mozlog', '8.0.0'),
UniversalSource('oauth2client', '1.5.2'),
UniversalSource('oauth2client', '3.0.0'),
UniversalSource('odictliteral', '1.0.0'),
UniversalSource('pefile', '2018.8.8'),
UniversalSource('perfect-hash', '0.2.1'),
UniversalSource('pg8000', '1.29.4', pyversions=['py3']),
UniversalSource('portpicker', '1.3.0'),
UniversalSource('portpicker', '1.3.1'),
UniversalSource('pproxy', '2.7.8', pyversions=['py3']),
UniversalSource('proto-plus', '1.13.0', pyversions=['py3']),
UniversalSource('protobuf-to-dict', '0.1.0'),
UniversalSource('protorpc', '0.12.0'),
UniversalSource('ptyprocess', '0.7.0'),
UniversalSource('pybind11', '2.10.3'),
UniversalSource('pybrctl', '0.1.3'),
UniversalSource('pycparser', '2.17'),
UniversalSource('pycparser', '2.19'),
UniversalSource('pydot', '1.4.2'),
UniversalSource('pyftpdlib', '0.7.0'),
UniversalSource('pyftpdlib', '1.0.0'),
UniversalSource('pyftpdlib', '1.5.3'),
UniversalSource('pylint-quotes', '0.1.8'),
UniversalSource('pyperclip', '1.8.0'),
UniversalSource('pyrsistent', '0.16.0', pyversions=['py3']),
UniversalSource('pytest-mock', '3.10.0', pyversions=['py3']),
UniversalSource('pytrie', '0.4.0', pyversions=['py3']),
UniversalSource('requests-mock', '1.10.0', pyversions=['py3']),
UniversalSource('requests-unixsocket', '0.1.5'),
UniversalSource('retrying', '1.3.3'),
UniversalSource('selenium', '2.29.0'),
UniversalSource('spdx-tools', '0.7.1'),
UniversalSource('spdx-tools', '0.8.0', pyversions=['py3']),
UniversalSource('termcolor', '1.1.0'),
UniversalSource('tlslite', '0.4.9'),
UniversalSource('tlslite-ng', '0.7.6'),
UniversalSource('tox', '4.4.4'),
UniversalSource('unittest-xml-reporting', '3.1.0'),
UniversalSource('vcrpy', '4.2.1'),
UniversalSource('websocket_client', '0.40.0'),
UniversalSource('websockets', '10.1', pyversions=['py3']),
UniversalSource('websockets', '10.3', pyversions=['py3']),
UniversalSource('websockets', '11.0.3', pyversions=['py3']),
UniversalSource('yamllint', '1.29.0', pyversions=['py3']),
)
})
# 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('Jinja2', '3.1.2', pyversions=['py3']),
Universal('Keras-Preprocessing', '1.1.2'),
Universal('Markdown', '3.0.1'),
Universal('Markdown', '3.3.4', pyversions=['py3']),
Universal('Markdown', '3.4.1', pyversions=['py3']),
Universal('Paste', '2.0.2', pyversions=['py3']),
Universal('Paste', '3.7.1', pyversions=['py3']),
Universal('PySocks', '1.7.1', pyversions=['py3']),
Universal('SecretStorage', '3.1.2', pyversions=['py3']),
Universal('WebOb', '1.5.0'),
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=['py3']),
Universal('altgraph', '0.16.1'),
Universal('ansicon', '1.89.0'),
Universal('anytree', '2.8.0'),
Universal('apipkg', '1.5'),
Universal('appdirs', '1.4.3'),
Universal('appengine-python-standard', '0.2.2', pyversions=['py3']),
Universal('appengine-python-standard', '0.3.1', pyversions=['py3']),
Universal('appengine-python-standard', '1.1.1', pyversions=['py3']),
Universal('appengine-python-standard', '1.1.5', pyversions=['py3']),
Universal('argcomplete', '1.12.2'),
Universal('argh', '0.26.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('astroid', '2.5.6', pyversions=['py3']),
Universal('astroid', '2.6.6', pyversions=['py3']),
Universal('astroid', '2.7.3', pyversions=['py3']),
Universal('astroid', '2.8.6', pyversions=['py3']),
Universal('astroid', '2.9.3', pyversions=['py3']),
Universal('astroid', '2.11.3', pyversions=['py3']),
Universal('astroid', '2.15.8', pyversions=['py3']),
Universal('astunparse', '1.5.0'),
Universal('astunparse', '1.6.3'),
Universal('async-generator', '1.10', pyversions=['py3']),
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('attrs', '21.4.0'),
Universal('attrs', '23.1.0', pyversions=['py3']),
Universal('backoff', '2.2.1', pyversions=['py3']),
Universal('backports.functools_lru_cache', '1.5'),
Universal('backports.shutil_get_terminal_size', '1.0.0'),
Universal('beautifulsoup4', '4.9.0', pyversions=['py3']),
Universal('black', '22.3.0', pyversions=['py3']),
Universal('black', '23.1.0', pyversions=['py3']),
Universal('blessed', '1.20.0'),
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('cachetools', '5.3.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('certifi', '2023.5.7', pyversions=['py3']),
Universal('certifi', '2023.7.22', pyversions=['py3']),
Universal('certifi', '2023.11.17', pyversions=['py3']),
Universal('chardet', '3.0.4'),
Universal('chardet', '4.0.0'),
Universal('chardet', '5.2.0', pyversions=['py3']),
Universal('charset_normalizer', '2.0.4', pyversions=['py3']),
Universal('charset_normalizer', '2.0.12', pyversions=['py3']),
Universal('charset_normalizer', '3.1.0', pyversions=['py3']),
Universal('charset_normalizer', '3.3.2', pyversions=['py3']),
Universal('cheroot', '6.2.4'),
Universal('cloudevents', '1.9.0', pyversions=['py3']),
Universal('cloudpickle', '1.6.0', pyversions=['py3']),
Universal('colorama', '0.4.1'),
Universal('colorama', '0.4.6'),
Universal('contextlib2', '0.5.5'),
Universal('db-dtypes', '1.2.0'),
Universal('decorator', '4.4.2', pyversions=['py3']),
Universal('decorator', '5.0.7', pyversions=['py3']),
Universal('decorator', '5.0.9', pyversions=['py3']),
Universal('deprecated', '1.2.13', pyversions=['py3']),
Universal('deprecation', '2.1.0'),
Universal('dill', '0.3.4', pyversions=['py3']),
Universal('dill', '0.3.7', pyversions=['py3']),
Universal('docker', '2.7.0'),
Universal('docker', '5.0.0'),
Universal('docker', '6.1.3', pyversions=['py3']),
Universal('docker-pycreds', '0.2.1'),
Universal('ecdsa', '0.17.0'),
Universal('enum34', '1.1.6', pyversions=['py3']),
Universal('exceptiongroup', '1.1.2', pyversions=['py3']),
Universal('execnet', '1.8.0'),
Universal('execnet', '2.0.2', pyversions=['py3']),
Universal('fasteners', '0.14.1'),
Universal('filelock', '3.0.12', pyversions=['py3']),
Universal('filelock', '3.12.2', pyversions=['py3']),
Universal('flask', '1.0.2'),
Universal('flask', '2.0.2', pyversions=['py3']),
Universal('flatbuffers', '1.12'),
Universal('flatbuffers', '2.0', pyversions=['py3']),
Universal('frozendict', '2.0.6', pyversions=['py3']),
Universal('funcsigs', '1.0.2'),
Universal('functions-framework', '3.4.0', pyversions=['py3']),
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-core', '1.31.5', pyversions=['py3']),
Universal('google-api-core', '2.5.0', pyversions=['py3']),
Universal('google-api-core', '2.11.0', pyversions=['py3']),
Universal('google-api-core', '2.14.0', pyversions=['py3']),
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-api-python-client', '2.111.0', pyversions=['py3']),
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', '2.6.0', pyversions=['py3']),
Universal('google-auth', '2.16.2', pyversions=['py3']),
Universal('google-auth', '2.23.4'),
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-appengine-logging', '1.1.1'),
Universal('google-cloud-audit-log', '0.2.0'),
Universal('google-cloud-bigquery', '0.28.0'),
Universal('google-cloud-bigquery', '2.7.0', pyversions=['py3']),
Universal('google-cloud-bigquery', '3.23.1', pyversions=['py3']),
Universal('google-cloud-bigquery-storage', '2.16.2',
pyversions=['py3']),
Universal('google-cloud-bigquery-storage', '2.25.0',
pyversions=['py3']),
Universal('google-cloud-bigtable', '0.28.1'),
Universal('google-cloud-build', '3.8.3', pyversions=['py3']),
Universal('google-cloud-build', '3.13.0', pyversions=['py3']),
Universal('google-cloud-core', '0.28.0'),
Universal('google-cloud-core', '1.5.0'),
Universal('google-cloud-core', '2.2.2', pyversions=['py3']),
Universal('google-cloud-core', '2.3.3', pyversions=['py3']),
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-kms', '2.11.1', pyversions=['py3']),
Universal('google-cloud-language', '1.0.0'),
Universal('google-cloud-logging', '1.4.0'),
Universal('google-cloud-logging', '3.0.0', pyversions=['py3']),
Universal('google-cloud-monitoring', '0.28.0'),
Universal('google-cloud-monitoring', '1.1.2', pyversions=['py3']),
Universal('google-cloud-ndb', '2.1.1', pyversions=['py3']),
Universal('google-cloud-pubsub', '0.29.0'),
Universal('google-cloud-pubsub', '2.9.0', pyversions=['py3']),
Universal('google-cloud-resource-manager', '0.28.0'),
Universal('google-cloud-runtimeconfig', '0.28.0'),
Universal('google-cloud-secret-manager', '2.10.0'),
Universal('google-cloud-spanner', '0.29.0'),
Universal('google-cloud-spanner', '3.40.1'),
Universal('google-cloud-speech', '0.30.0'),
Universal('google-cloud-storage', '1.6.0'),
Universal('google-cloud-storage', '1.41.1'),
Universal('google-cloud-storage', '2.1.0', pyversions=['py3']),
Universal('google-cloud-tasks', '2.8.1'),
Universal('google-cloud-tasks', '2.9.1'),
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('google-resumable-media', '2.2.1', pyversions=['py3']),
Universal('google-resumable-media', '2.3.0', pyversions=['py3']),
Universal('googleapis-common-protos', '1.52.0'),
Universal('googleapis-common-protos', '1.61.0'),
Universal('grpcio-status', '1.44.0', pyversions=['py3']),
Universal('grpcio-status', '1.57.0', pyversions=['py3']),
Universal('grpcio-status', '1.59.3', pyversions=['py3']),
Universal('gunicorn', '20.1.0', pyversions=['py3']),
Universal('h11', '0.13.0', pyversions=['py3']),
Universal('h11', '0.14.0', pyversions=['py3']),
Universal('html5lib', '1.0.1'),
Universal('httplib2', '0.19.1', pyversions=['py3']),
Universal('httplib2', '0.22.0', pyversions=['py3']),
Universal('humiolib', '0.2.4'),
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('idna', '3.4', pyversions=['py3']),
Universal('immutabledict', '4.1.0', pyversions=['py3']),
Universal('importlib-metadata', '1.6.0'),
Universal('importlib-metadata', '6.0.0', pyversions=['py3']),
Universal('importlib-metadata', '7.0.0', pyversions=['py3']),
Universal('iniconfig', '1.1.1', pyversions=['py3']),
Universal('iso8601', '0.1.12', pyversions=['py3']),
Universal('isodate', '0.6.1'),
Universal('isort', '4.3.4', pyversions=['py3']),
Universal('isort', '5.8.0', pyversions=['py3']),
Universal('isort', '5.10.1', pyversions=['py3']),
Universal('jinxed', '1.2.0'),
Universal('json5', '0.6.0'),
Universal('jsonlines', '1.2.0'),
Universal('jsonschema', '3.2.0'), # py2 + py3
Universal('junitparser', '2.8.0'),
Universal('keras', '2.6.0', pyversions=['py3']),
Universal('keras', '2.7.0', pyversions=['py3']),
Universal('keras-nightly', '2.5.0.dev2021032900', pyversions=['py3']),
Universal('keyring', '18.0.1'),
Universal('macholib', '1.11'),
Universal('markdown-it-py', '2.1.0', pyversions=['py3']),
Universal('mccabe', '0.6.1'),
Universal('mccabe', '0.7.0'),
Universal('mdurl', '0.1.2', pyversions=['py3']),
Universal('mock', '2.0.0'),
Universal('mock', '4.0.3', pyversions=['py3']),
Universal('mock', '5.1.0', pyversions=['py3']),
Universal('monotonic', '1.5'),
Universal('more-itertools', '4.1.0', pyversions=['py3']),
Universal('mox3', '1.1.0'),
Universal('mozdebug', '0.1.1'),
Universal('mozdebug', '0.2'),
Universal('mozdebug', '0.3.0', pyversions=['py3']),
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', '1.2.1'),
Universal('mozprocess', '1.3.0', pyversions=['py3']),
Universal('mozterm', '1.0.0'),
Universal('multiprocessing-logging', '0.3.1'),
Universal('mypy', '1.2.0', pyversions=['py3']),
Universal('mypy-extensions', '0.4.3', pyversions=['py3']),
Universal('mypy-extensions', '1.0.0', pyversions=['py3']),
Universal('natsort', '8.3.1', pyversions=['py3']),
Universal('networkx', '2.5', pyversions=['py3']),
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('opentelemetry-api', '1.12.0', pyversions=['py3']),
Universal('opentelemetry-api', '1.18.0', pyversions=['py3']),
Universal('opentelemetry-exporter-gcp-monitoring', '1.5.0a0',
pyversions=['py3']),
Universal('opentelemetry-exporter-otlp-proto-common', '1.18.0',
pyversions=['py3']),
Universal('opentelemetry-exporter-otlp-proto-grpc', '1.18.0',
pyversions=['py3']),
Universal('opentelemetry-proto', '1.18.0', pyversions=['py3']),
Universal('opentelemetry-resourcedetector-gcp', '1.5.0a0',
pyversions=['py3']),
Universal('opentelemetry-sdk', '1.12.0', pyversions=['py3']),
Universal('opentelemetry-sdk', '1.18.0', pyversions=['py3']),
Universal('opentelemetry-semantic-conventions', '0.33b0',
pyversions=['py3']),
Universal('opentelemetry-semantic-conventions', '0.39b0',
pyversions=['py3']),
Universal('opt-einsum', '3.3.0', pyversions=['py3']),
Universal('ordered-set', '4.1.0', pyversions=['py3']),
Universal('outcome', '1.1.0', pyversions=['py3']),
Universal('outcome', '1.2.0', pyversions=['py3']),
Universal('packaging', '16.8'),
Universal('packaging', '20.9', pyversions=['py3']),
Universal('packaging', '21.3', pyversions=['py3']),
Universal('packaging', '22.0', pyversions=['py3']),
Universal('packaging', '23.0', pyversions=['py3']),
Universal('packaging-legacy', '23.0', pyversions=['py3']),
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('pathspec', '0.9.0', pyversions=['py3']),
Universal('pbr', '3.0.0'),
Universal('pbr', '5.9.0'),
Universal('pg8000', '1.29.4', pyversions=['py3']),
Universal('pipenv', '2018.11.26', pyversions=['py3']),
Universal('pipenv', '2023.7.23', pyversions=['py3']),
Universal('platformdirs', '2.5.2', pyversions=['py3']),
Universal('platformdirs', '3.10.0', pyversions=['py3']),
Universal('platformdirs', '4.1.0', pyversions=['py3']),
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('proto-plus', '1.20.3', pyversions=['py3']),
Universal('proto-plus', '1.22.2', pyversions=['py3']),
Universal('proto-plus', '1.22.3', pyversions=['py3']),
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('protobuf', '3.19.3', pyversions=['py3']),
Universal('protobuf', '3.19.4', pyversions=['py3']),
Universal('protobuf', '3.20.0', pyversions=['py3']),
Universal('protobuf', '3.20.1', pyversions=['py3']),
Universal('protobuf', '4.21.1', pyversions=['py3']),
Universal('protobuf', '4.21.9', pyversions=['py3']),
Universal('protobuf', '4.24.2', pyversions=['py3']),
Universal('protobuf', '4.25.1', pyversions=['py3']),
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', '0.5.1'),
Universal('pyasn1_modules', '0.0.8'),
Universal('pyasn1_modules', '0.2.4'),
Universal('pyasn1_modules', '0.2.8'),
Universal('pyasn1_modules', '0.3.0'),
Universal('pycnite', '2023.10.11', pyversions=['py3']),
Universal('pycodestyle', '2.10.0'),
Universal('pycparser', '2.21'),
Universal('pyelftools', '0.29'),
Universal('pyfakefs', '3.7.2'),
Universal('pyfakefs', '5.5.0', pyversions=['py3']),
Universal('pyflakes', '3.0.1'),
Universal('pyglet', '1.5.0'),
Universal('pygments', '2.14.0', pyversions=['py3']),
Universal('pykwalify', '1.8.0'),
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', '2.8.3', pyversions=['py3']),
Universal('pylint', '2.9.6', pyversions=['py3']),
Universal('pylint', '2.10.2', pyversions=['py3']),
Universal('pylint', '2.11.1', pyversions=['py3']),
Universal('pylint', '2.12.2', pyversions=['py3']),
Universal('pylint', '2.13.8', pyversions=['py3']),
Universal('pylint', '2.14.4', pyversions=['py3']),
Universal('pylint', '2.17.7', pyversions=['py3']),
Universal('pylint', '3.0.3', pyversions=['py3']),
Universal('pylint-quotes', '0.2.1', pyversions=['py3']),
Universal('pylint-quotes', '0.2.3', pyversions=['py3']),
Universal('pyocd', '0.33.1', pyversions=['py3']),
Universal('pyopenssl', '17.2.0'),
Universal('pyopenssl', '19.0.0'),
Universal('pyopenssl', '20.0.0'),
Universal('pyparsing', '2.2.0'),
Universal('pyparsing', '2.4.7'),
Universal('pyparsing', '3.0.7', pyversions=['py3']),
Universal('pyparsing', '3.1.1', pyversions=['py3']),
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', '7.3.1', pyversions=['py3']),
Universal('pytest-asyncio', '0.14.0', pyversions=['py3']),
Universal('pytest-asyncio', '0.19.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-home', '0.5.0', pyversions=['py3']),
Universal('pytest-reportlog', '0.1.2', pyversions=['py3']),
Universal('pytest-rerunfailures', '11.1.2', pyversions=['py3']),
Universal('pytest-timeout', '2.1.0', pyversions=['py3']),
Universal('pytest-xdist', '1.31.0'),
Universal('pytest-xdist', '3.3.1', pyversions=['py3']),
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('pytz', '2024.1'),
Universal('pyusb', '1.2.1', pyversions=['py3']),
Universal('pywinauto', '0.6.8'),
Universal('rdflib', '6.3.2', pyversions=['py3']),
Universal('requests', '2.13.0'),
Universal('requests', '2.21.0'),
Universal('requests', '2.25.1'),
Universal('requests', '2.26.0'),
Universal('requests', '2.31.0', pyversions=['py3']),
Universal('requests-oauthlib', '1.2.0'),
Universal('requests-oauthlib', '1.3.0'),
Universal('rich', '13.2.0', pyversions=['py3']),
Universal('rsa', '3.4.2'),
Universal('rsa', '4.0'),
Universal('rsa', '4.7.2', pyversions=['py3']),
Universal('rsa', '4.9.0', pyversions=['py3']),
Universal('ruamel.yaml', '0.17.16', pyversions=['py3']),
Universal('selenium', '3.4.1'),
Universal('selenium', '3.14.0'),
Universal('selenium', '4.1.0', pyversions=['py3']),
Universal('selenium', '4.10.0', pyversions=['py3']),
Universal('semantic-version', '2.10.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('setuptools', '68.0.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('six', '1.16.0'),
Universal('smmap2', '2.0.3'),
Universal('sniffio', '1.2.0', pyversions=['py3']),
Universal('sniffio', '1.3.0', pyversions=['py3']),
Universal('sortedcontainers', '2.4.0', pyversions=['py3']),
Universal('soupsieve', '1.9.5'),
Universal('sqlparse', '0.4.4', pyversions=['py3']),
Universal('tabulate', '0.8.9', pyversions=['py3']),
Universal('tabulate', '0.8.10', pyversions=['py3']),
Universal('tempora', '1.11'),
Universal('tenacity', '8.2.3', pyversions=['py3']),
Universal('tensorboard', '2.5.0', pyversions=['py3']),
Universal('tensorboard', '2.6.0', pyversions=['py3']),
Universal('tensorboard', '2.7.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-estimator', '2.7.0', pyversions=['py3']),
Universal('tensorflow-probability', '0.12.2'),
Universal('tensorflow-probability', '0.13.0'),
Universal('tensorflow-probability', '0.15.0'),
Universal('testfixtures', '7.0.0', pyversions=['py3']),
Universal('tf-agents', '0.7.1', pyversions=['py3']),
Universal('tf-agents', '0.11.0', pyversions=['py3']),
Universal('toml', '0.10.1', pyversions=['py3']),
Universal('toml', '0.10.2', pyversions=['py3']),
Universal('tomli', '1.1.0', pyversions=['py3']),
Universal('tomli', '2.0.1', pyversions=['py3']),
Universal('tomlkit', '0.12.3', pyversions=['py3']),
Universal('trio', '0.20.0', pyversions=['py3']),
Universal('trio', '0.22.1', pyversions=['py3']),
Universal('trio-websocket', '0.9.2', pyversions=['py3']),
Universal('trio-websocket', '0.10.3', pyversions=['py3']),
Universal('types-PyYAML', '6.0.12.12', pyversions=['py3']),
Universal(
'types-backports.ssl-match-hostname', '3.7.4.4', pyversions=['py3']
),
Universal('types-cryptography', '3.3.23.2', pyversions=['py3']),
Universal('types-protobuf', '4.21.0.7', pyversions=['py3']),
Universal('types-psutil', '5.8.23', pyversions=['py3']),
Universal('types-pyOpenSSL', '23.0.0.0', pyversions=['py3']),
Universal('types-pyOpenSSL', '23.3.0.0', pyversions=['py3']),
Universal('types-pywin32', '306.0.0.6', pyversions=['py3']),
Universal('types-simplejson', '3.19.0.2', pyversions=['py3']),
Universal('types-urllib3', '1.26.25.14', pyversions=['py3']),
Universal('typing-extensions', '3.7.4.3', pyversions=['py3']),
Universal('typing-extensions', '3.10.0.2', pyversions=['py3']),
Universal('typing-extensions', '4.0.1', pyversions=['py3']),
Universal('typing-extensions', '4.3.0', pyversions=['py3']),
Universal('typing-inspect', '0.7.1', pyversions=['py3']),
Universal('tzdata', '2023.4'),
Universal('uritemplate', '3.0.0'),
Universal('uritemplate', '3.0.1'),
Universal('uritemplate', '4.1.1', pyversions=['py3']),
Universal('uritools', '4.0.1', pyversions=['py3']),
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('urllib3', '1.26.16'),
Universal('urllib3', '2.0.3', pyversions=['py3']),
Universal('urllib3', '2.0.7', pyversions=['py3']),
Universal('urllib3', '2.1.0', pyversions=['py3']),
Universal('virt-firmware', '23.5', pyversions=['py3']),
Universal('virtualenv', '20.0.20'),
Universal('virtualenv', '20.24.2', pyversions=['py3']),
Universal('virtualenv-clone', '0.5.4'),
Universal('virtualenv-clone', '0.5.7', pyversions=['py3']),
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('west', '0.14.0', pyversions=['py3']),
Universal('west', '1.1.0', pyversions=['py3']),
Universal('wheel', '0.33.1'),
Universal('wheel', '0.36.2'),
Universal('wheel', '0.37.0'),
Universal('wrapt', '1.15.0', pyversions=['py3']),
Universal('wsproto', '1.1.0', pyversions=['py3']),
Universal('wsproto', '1.2.0', pyversions=['py3']),
Universal('xmltodict', '0.13.0'),
Universal('yapf', '0.22.0'),
Universal('yapf', '0.24.0'),
Universal('yapf', '0.27.0'),
Universal('yapf', '0.29.1'),
Universal('yapf', '0.30.0'),
Universal('yapf', '0.31.0'),
Universal('yapf', '0.32.0', pyversions=['py3']),
Universal('yapf', '0.40.2', pyversions=['py3']),
Universal('zipp', '1.2.0'),
Universal('zipp', '3.1.0', pyversions=['py3']),
Universal('zipp', '3.7.0', pyversions=['py3']),
Universal('zipp', '3.17.0', pyversions=['py3']),
Universal('zope.event', '5.0', pyversions=['py3']),
])
})
# yapf: enable
# Special packages.
#
# The following packages all require specialized compilation, and so have their
# own custom builder types.
from .wheel_wheel import MultiWheel
SPECS.update({
s.spec.tag: s for s in assert_sorted(
'MultiWheel',
MultiWheel(
'pathos',
'0.2.7',
([
Universal('dill', '0.3.3'),
Universal('klepto', '0.2.0', default=False),
SourceOrPrebuilt(
'mpi4py',
'3.0.3',
packaged=[
'windows-x86-py3.8',
'windows-x64-py3.8',
],
tpp_libs_cb=lambda w: [
TppLib('infra/3pp/static_libs/mpich',
'version:2@3.4.1.chromium.6')
],
env_cb=lambda w: {
'MPICC': 'mpicc', # provided by mpich package
},
),
SourceOrPrebuilt(
'multiprocess',
'0.70.11.1',
pyversions=['py2', 'py3'],
patch_version='chromium.1',
skip_auditwheel=True,
packaged=(),
),
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'],
skip_plat=build_platform.ALL_PY311,
patch_version='chromium.6',
),
MultiWheel(
'pathos',
'0.3.0',
([
Universal('dill', '0.3.6'),
SourceOrPrebuilt(
'multiprocess',
'0.70.14',
pyversions=['py3'],
skip_auditwheel=True,
packaged=(),
),
Universal('pathos', '0.3.0'),
Universal('pox', '0.3.2'),
Universal('ppft', '1.7.6.6', pyversions=['py3']),
]),
pyversions=['py3'],
patch_version='chromium.2',
),
MultiWheel(
'pexpect',
'4.8.0',
([
Universal('pexpect', '4.8.0'),
Universal('ptyprocess', '0.7.0'),
]),
patch_version='chromium.1',
),
# 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',
([
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-py3.8', 'mac-arm64-py3.8'],
pyversions=['py3'],
patch_version='chromium.1', # Rebuild for crbug/1233745
),
# List cultivated from "pyobjc-10.0"'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',
'10.0',
([
SourceOrPrebuilt(
name,
'10.0',
pyversions=['py3'],
packaged=[],
patches=('avfoundation',) if name in
['pyobjc-framework-AVFoundation'] else (),
) for name in ['pyobjc-core'] + [
'pyobjc-framework-%s' % (v,) for v in [
'libdispatch',
'libxpc',
'AdSupport',
'AudioVideoBridging',
'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',
'CoreMIDI',
'CoreML',
'CoreMotion',
'CoreServices',
'CoreSpotlight',
'CoreText',
'CoreWLAN',
'CryptoTokenKit',
'DeviceCheck',
'DictionaryServices',
'DiscRecording',
'DiscRecordingUI',
'DiskArbitration',
'DVDPlayback',
'EventKit',
'ExceptionHandling',
'ExecutionPolicy',
'ExternalAccessory',
'FileProvider',
'FileProviderUI',
'FSEvents',
'FinderSync',
'GameCenter',
'GameController',
'InputMethodKit',
'ImageCaptureCore',
'Intents',
'InstallerPlugins',
'InstantMessage',
'IOBluetooth',
'IOBluetoothUI',
'IOSurface',
'LatentSemanticMapping',
'LaunchServices',
'LinkPresentation',
'LocalAuthentication',
'MapKit',
'MediaAccessibility',
'MediaLibrary',
'MediaPlayer',
'MediaToolbox',
'Metal',
'MetalKit',
'MetalPerformanceShaders',
'ModelIO',
'MultipeerConnectivity',
'NaturalLanguage',
'NetFS',
'Network',
'NetworkExtension',
'NotificationCenter',
'OpenDirectory',
'OSAKit',
'OSLog',
'PencilKit',
'Photos',
'PhotosUI',
'PreferencePanes',
'PubSub',
'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=build_platform.ALL_MAC,
pyversions=['py3'],
),
)
})
from .wheel_infra import InfraPackage
SPECS.update({
s.spec.tag: s for s in assert_sorted(
'InfraPackage',
InfraPackage('infra_libs'),
)
})
# GitUniversalSource. These are packages which produce universal (pure-python)
# wheels, but are only available from a git repository.
from .wheel_wheel import GitUniversalSource
SPECS.update({
s.spec.tag: s for s in assert_sorted(
'GitUniversalSource',
GitUniversalSource(
'expect_tests', '0.4.2',
'https://chromium.googlesource.com/infra/testing/expect_tests',
'3d14313e7eeb56b9f058984b6b8d4c27c99dd89d'),
)
})
SPEC_NAMES = sorted(SPECS.keys())
DEFAULT_SPEC_NAMES = sorted(
[s.spec.tag for s in SPECS.values() if s.spec.default])