Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save tecmaverick/15d867e3ba0ab77ae180d4b1ffc045c2 to your computer and use it in GitHub Desktop.

Select an option

Save tecmaverick/15d867e3ba0ab77ae180d4b1ffc045c2 to your computer and use it in GitHub Desktop.
AWS Lambda - Python Wheel compatibility tags
# List all wheel compatibility tags in AWS Lambda Python 3.14
# Tag format - python_tag-abi_tag-platform_tag
# python_tag = interpreter/language version
# abi_tag = ABI (Application Binary Interface)
# platform_tag = platform compatibility markers
# Example: py32-none-manylinux_2_34_x86_64
# py32 - Python language compatibility meaning Python 3.2 (If its Py it means any Python 3 [CPython or PyPy] implementation, if its cp3xx means CPython 3.xx specifically)
# none - no special Python ABI required
# manylinux_2_34_x86_64 - Linux x86_64 wheel compatible with glibc/manylinux 2.34 for both x86 and x64 platforms
# Amazon Linux 2023 (AL2023) - Based on Fedora, uses dnf as the package manager (replacing yum)- based runtimes ship with glibc 2.34. This includes newer Lambda runtimes like Python 3.12+, Node.js 20+, Java 21, .NET 8, Ruby 3.3, and the provided.al2023 custom runtime. AWS
# Amazon Linux 2022 (AL2022) — released as a preview in November 2021 but never reached general availability. Later renamed to AL2023.
# Amazon Linux 2 (AL2) - Based on a mix of RHEL 7 and Fedora (yum) - based runtimes ship with glibc 2.26. This covers older runtimes like Python 3.8–3.11, Node.js 16/18, Java 11/17, and provided.al2. AWS. introduced systemd as the init system
# Amazon Linux 1 (AL1) - RHEL/CentOS 6 (Yum) - based runtimes had glibc 2.17, but these are deprecated.
# Note that current AL2023 systems may actually be running a patched version like glibc-2.34-231.amzn2023.0.3, which backports transparent huge pages support from glibc 2.35, but the base version is still 2.34
import os
import json
import subprocess
def lambda_handler(event, context):
result = subprocess.run(["pip", "debug","--verbose"], capture_output=True, text=True)
print(result.stdout)
result = subprocess.run(["ldd", "--version"], capture_output=True, text=True)
print(result.stdout)
print(f"python_version: {sys.version}")
print(f"python_short: cp{sys.version_info.major}{sys.version_info.minor}")
print(f"architecture: {platform.machine()} # x86_64 or aarch64")
print(f"glibc: {os.popen('ldd --version | head -1').read().strip()}")
print("platform_tag:" + os.popen("python3 -c 'import sysconfig; print(sysconfig.get_platform())'").read().strip())
================================================================================================================
Runtime, Python tag, glibc, manylinux tag accepted
Python 3.9 (AL2), cp39, 2.26, manylinux_2_17, manylinux2014
Python 3.10 (AL2), cp310, 2.26, manylinux_2_17, manylinux2014
Python 3.11 (AL2), cp311, 2.26, manylinux_2_17, manylinux2014
Python 3.12 (AL2023), cp312, 2.34, manylinux_2_28, manylinux_2_17
Python 3.13 (AL2023), cp313, 2.34, manylinux_2_28, manylinux_2_17
#Python 3.14 (128 MB)
33-none-manylinux_2_15_x86_64
py33-none-manylinux_2_14_x86_64
py33-none-manylinux_2_13_x86_64
py33-none-manylinux_2_12_x86_64
py33-none-manylinux2010_x86_64
py33-none-manylinux_2_11_x86_64
py33-none-manylinux_2_10_x86_64
py33-none-manylinux_2_9_x86_64
py33-none-manylinux_2_8_x86_64
py33-none-manylinux_2_7_x86_64
py33-none-manylinux_2_6_x86_64
py33-none-manylinux_2_5_x86_64
py33-none-manylinux1_x86_64
py33-none-linux_x86_64
py32-none-manylinux_2_34_x86_64
py32-none-manylinux_2_33_x86_64
py32-none-manylinux_2_32_x86_64
py32-none-manylinux_2_31_x86_64
py32-none-manylinux_2_30_x86_64
py32-none-manylinux_2_29_x86_64
py32-none-manylinux_2_28_x86_64
py32-none-manylinux_2_27_x86_64
py32-none-manylinux_2_26_x86_64
py32-none-manylinux_2_25_x86_64
py32-none-manylinux_2_24_x86_64
py32-none-manylinux_2_23_x86_64
py32-none-manylinux_2_22_x86_64
py32-none-manylinux_2_21_x86_64
py32-none-manylinux_2_20_x86_64
py32-none-manylinux_2_19_x86_64
py32-none-manylinux_2_18_x86_64
py32-none-manylinux_2_17_x86_64
py32-none-manylinux2014_x86_64
py32-none-manylinux_2_16_x86_64
py32-none-manylinux_2_15_x86_64
py32-none-manylinux_2_14_x86_64
py32-none-manylinux_2_13_x86_64
py32-none-manylinux_2_12_x86_64
py32-none-manylinux2010_x86_64
py32-none-manylinux_2_11_x86_64
py32-none-manylinux_2_10_x86_64
py32-none-manylinux_2_9_x86_64
py32-none-manylinux_2_8_x86_64
py32-none-manylinux_2_7_x86_64
py32-none-manylinux_2_6_x86_64
py32-none-manylinux_2_5_x86_64
py32-none-manylinux1_x86_64
py32-none-linux_x86_64
py31-none-manylinux_2_34_x86_64
py31-none-manylinux_2_33_x86_64
py31-none-manylinux_2_32_x86_64
py31-none-manylinux_2_31_x86_64
py31-none-manylinux_2_30_x86_64
py31-none-manylinux_2_29_x86_64
py31-none-manylinux_2_28_x86_64
py31-none-manylinux_2_27_x86_64
py31-none-manylinux_2_26_x86_64
py31-none-manylinux_2_25_x86_64
py31-none-manylinux_2_24_x86_64
py31-none-manylinux_2_23_x86_64
py31-none-manylinux_2_22_x86_64
py31-none-manylinux_2_21_x86_64
py31-none-manylinux_2_20_x86_64
py31-none-manylinux_2_19_x86_64
py31-none-manylinux_2_18_x86_64
py31-none-manylinux_2_17_x86_64
py31-none-manylinux2014_x86_64
py31-none-manylinux_2_16_x86_64
py31-none-manylinux_2_15_x86_64
py31-none-manylinux_2_14_x86_64
py31-none-manylinux_2_13_x86_64
py31-none-manylinux_2_12_x86_64
py31-none-manylinux2010_x86_64
py31-none-manylinux_2_11_x86_64
py31-none-manylinux_2_10_x86_64
py31-none-manylinux_2_9_x86_64
py31-none-manylinux_2_8_x86_64
py31-none-manylinux_2_7_x86_64
py31-none-manylinux_2_6_x86_64
py31-none-manylinux_2_5_x86_64
py31-none-manylinux1_x86_64
py31-none-linux_x86_64
py30-none-manylinux_2_34_x86_64
py30-none-manylinux_2_33_x86_64
py30-none-manylinux_2_32_x86_64
py30-none-manylinux_2_31_x86_64
py30-none-manylinux_2_30_x86_64
py30-none-manylinux_2_29_x86_64
py30-none-manylinux_2_28_x86_64
py30-none-manylinux_2_27_x86_64
py30-none-manylinux_2_26_x86_64
py30-none-manylinux_2_25_x86_64
py30-none-manylinux_2_24_x86_64
py30-none-manylinux_2_23_x86_64
py30-none-manylinux_2_22_x86_64
py30-none-manylinux_2_21_x86_64
py30-none-manylinux_2_20_x86_64
py30-none-manylinux_2_19_x86_64
py30-none-manylinux_2_18_x86_64
py30-none-manylinux_2_17_x86_64
py30-none-manylinux2014_x86_64
py30-none-manylinux_2_16_x86_64
py30-none-manylinux_2_15_x86_64
py30-none-manylinux_2_14_x86_64
py30-none-manylinux_2_13_x86_64
py30-none-manylinux_2_12_x86_64
py30-none-manylinux2010_x86_64
py30-none-manylinux_2_11_x86_64
py30-none-manylinux_2_10_x86_64
py30-none-manylinux_2_9_x86_64
py30-none-manylinux_2_8_x86_64
py30-none-manylinux_2_7_x86_64
py30-none-manylinux_2_6_x86_64
py30-none-manylinux_2_5_x86_64
py30-none-manylinux1_x86_64
py30-none-linux_x86_64
cp314-none-any
py314-none-any
py3-none-any
py313-none-any
py312-none-any
py311-none-any
py310-none-any
py39-none-any
py38-none-any
py37-none-any
py36-none-any
py35-none-any
py34-none-any
py33-none-any
py32-none-any
py31-none-any
py30-none-any
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment