Python 3.9 Readiness

Python 3.9 support graph for the 360 most popular Python packages!

What is this about?

Python 3.9 is a version of Python that is past its End Of Life. This site shows Python 3.9 support for the 360 most downloaded packages on PyPI:

  1. 244 green packages (67.8%) have dropped support for Python 3.9;
  2. 116 uncolored packages (32.2%) still support Python 3.9.

Package 'x' is uncolored. What can I do?

There can be many reasons a package is still supporting Python 3.9:

  • If you are package maintainer, it's time to start dropping support (if you haven't already). Here is an in-depth guide to Dropping support for older Python versions. If you are not able to give the time needed, please seek for help from the community.

  • If you are user of the package, send a friendly note to the package maintainer. Or fork it, and send a pull request to help move the project towards dropping Python 3.9 support.

How do you identify Python 3.9 support?

We look for the Programming Language :: Python :: 3.9 classifier on the latest release of the project, via PyPI's JSON API.

Top 120

boto3 ✓ packaging ✗ typing-extensions ✗ certifi ✗ idna ✗ urllib3 ✓ requests ✓ charset-normalizer ✗ cryptography ✗ pluggy ✓ cffi ✓ python-dateutil ✗ pycparser ✓ pyyaml ✗ botocore ✓ six ✓ setuptools ✓ pygments ✗ pydantic ✓ pydantic-core ✓ click ✓ numpy ✓ anyio ✓ annotated-types ✓ typing-inspection ✓ pytest ✓ h11 ✗ iniconfig ✓ attrs ✗ markupsafe ✓ httpx ✗ httpcore ✗ tzdata ✓ protobuf ✓ pyjwt ✗ s3transfer ✓ python-dotenv ✓ jinja2 ✓ pandas ✓ opentelemetry-api ✓ starlette ✓ pillow ✓ aiobotocore ✓ platformdirs ✓ uvicorn ✓ pathspec ✗ rpds-py ✓ jsonschema ✓ tomlkit ✗ jmespath ✗ referencing ✓ filelock ✓ jsonschema-specifications ✗ pip ✓ fsspec ✓ multidict ✓ markdown-it-py ✓ rich ✗ mdurl ✗ yarl ✓ aiohttp ✓ pytz ✗ annotated-doc ✗ propcache ✓ fastapi ✓ websockets ✓ googleapis-common-protos ✓ pyasn1 ✗ frozenlist ✗ aiosignal ✓ sniffio ✓ aiohappyeyeballs ✓ pydantic-settings ✓ tqdm ✗ python-multipart ✓ pyarrow ✓ wrapt ✗ lxml ✗ trove-classifiers ✓ google-auth ✓ truststore ✓ hatchling ✓ ruff ✗ jiter ✓ httpx2 ✓ httpcore2 ✓ tenacity ✓ pyasn1-modules ✗ sqlalchemy ✓ zipp ✓ greenlet ✓ importlib-metadata ✓ pyparsing ✗ psutil ✓ grpcio ✓ wheel ✗ openai ✓ regex ✓ grpcio-status ✓ watchfiles ✓ scipy ✓ google-api-core ✓ openpyxl ✗ et-xmlfile ✗ distro ✗ opentelemetry-semantic-conventions ✓ opentelemetry-sdk ✓ coverage ✓ sse-starlette ✓ soupsieve ✓ shellingham ✗ beautifulsoup4 ✓ mcp ✓ wcwidth ✗ typer ✓ werkzeug ✓ mypy-extensions ✗ proto-plus ✓ uvloop ✗ colorama ✗

Top 120 - 240

editables ✗ huggingface-hub ✓ opentelemetry-proto ✓ docstring-parser ✗ dnspython ✓ requests-oauthlib ✗ httptools ✓ pytest-asyncio ✓ cachetools ✓ oauthlib ✗ s3fs ✓ defusedxml ✗ itsdangerous ✓ tomli ✓ opentelemetry-exporter-otlp-proto-common ✓ networkx ✓ virtualenv ✗ sortedcontainers ✓ more-itertools ✓ pytest-cov ✗ fonttools ✓ redis ✓ psycopg2-binary ✓ msgpack ✓ distlib ✗ hf-xet ✗ prompt-toolkit ✓ opentelemetry-exporter-otlp-proto-http ✓ flask ✓ alembic ✓ exceptiongroup ✓ mako ✓ requests-toolbelt ✗ blinker ✓ orjson ✓ tiktoken ✓ tokenizers ✓ psycopg ✓ xlsxwriter ✗ isodate ✗ anthropic ✓ tabulate ✓ execnet ✗ scikit-learn ✓ pytest-xdist ✗ psycopg-binary ✓ httpx-sse ✗ mypy ✓ cloudpickle ✗ rsa ✗ pypdf ✗ python-discovery ✗ email-validator ✗ tzlocal ✓ threadpoolctl ✗ nodeenv ✓ matplotlib ✓ ruamel-yaml ✗ websocket-client ✓ h2 ✓ hpack ✓ hyperframe ✗ azure-core ✓ pyopenssl ✗ zstandard ✗ google-cloud-core ✓ pynacl ✗ joblib ✓ kiwisolver ✓ opentelemetry-instrumentation ✓ bcrypt ✗ msal ✗ google-cloud-storage ✓ google-crc32c ✓ cycler ✗ contourpy ✓ google-cloud-bigquery ✓ prometheus-client ✗ google-genai ✓ google-resumable-media ✓ jsonpointer ✓ chardet ✓ dill ✗ librt ✗ grpcio-tools ✓ xxhash ✗ uv ✗ langchain-core ✓ asgiref ✓ keyring ✓ decorator ✗ sentry-sdk ✗ jaraco-functools ✓ langchain ✓ identify ✓ jaraco-classes ✓ backoff ✗ pre-commit ✓ python-pptx ✗ ptyprocess ✓ cfgv ✓ uritemplate ✓ jeepney ✓ docker ✗ mpmath ✗ sympy ✗ secretstorage ✓ deprecated ✓ jaraco-context ✓ gitpython ✗ narwhals ✓ pymupdf ✓ traitlets ✓ webencodings ✓ docutils ✗ azure-identity ✓ asyncpg ✗ toml ✗ httplib2 ✓ google-api-python-client ✓

Top 240 - 360

pexpect ✓ smmap ✗ opentelemetry-util-http ✓ asn1crypto ✗ rapidfuzz ✓ gitdb ✗ google-auth-httplib2 ✓ aiofiles ✗ msal-extensions ✗ executing ✗ jsonpatch ✓ flatbuffers ✓ python-docx ✗ playwright ✓ onnxruntime ✓ google-auth-oauthlib ✓ babel ✗ fastjsonschema ✓ markdown ✓ sqlparse ✓ authlib ✓ opentelemetry-exporter-otlp-proto-grpc ✓ gunicorn ✓ tornado ✓ pyee ✓ jedi ✓ mcp-types ✓ brotli ✓ pytest-timeout ✗ parso ✗ asttokens ✗ ipython ✓ grpc-google-iam-v1 ✓ structlog ✓ tinycss2 ✓ joserfc ✓ async-timeout ✓ paramiko ✗ transformers ✓ matplotlib-inline ✗ pure-eval ✗ pyzmq ✓ black ✓ xmltodict ✗ stack-data ✗ azure-storage-blob ✓ watchdog ✓ snowflake-connector-python ✓ pytest-json-ctrf ✓ ast-serialize ✗ python-json-logger ✓ croniter ✗ cachecontrol ✓ aioitertools ✓ typedload ✓ pyproject-hooks ✓ pypdfium2 ✓ griffelib ✓ jupyter-core ✓ litellm ✓ build ✓ debugpy ✓ opentelemetry-exporter-otlp-common ✓ isort ✓ nest-asyncio ✗ langsmith ✓ types-pyyaml ✓ pytest-mock ✓ lark ✓ nbformat ✓ cython ✗ sqlglot ✓ jupyter-client ✓ slack-sdk ✗ tomli-w ✓ google-cloud-aiplatform ✓ uuid-utils ✓ marshmallow ✓ awscli ✓ safetensors ✓ opentelemetry-instrumentation-asgi ✓ kubernetes ✓ reportlab ✓ termcolor ✓ lz4 ✗ multiprocess ✗ databricks-sdk ✓ opentelemetry-exporter-http-transport ✓ xlrd ✗ opentelemetry-instrumentation-fastapi ✓ beartype ✓ awswrangler ✓ pymysql ✓ loguru ✗ setuptools-scm ✗ fastuuid ✗ types-requests ✓ argon2-cffi-bindings ✓ pycryptodome ✗ text-unidecode ✓ cedarpy ✓ poetry-core ✓ argon2-cffi ✗ pytokens ✗ rfc3339-validator ✓ ipython-pygments-lexers ✓ python-slugify ✓ cyclopts ✓ graphql-core ✓ duckdb ✓ semver ✓ shapely ✓ jsonref ✓ faker ✓ invoke ✗ types-protobuf ✓ cbor2 ✓ comm ✓ pyperclip ✗ opentelemetry-instrumentation-requests ✓

Thanks

This is derivative work from py3readiness.org, a site that previously tracked general compatibility with Python 3, which in turn was a derivative of pythonwheels.com, a site that tracks which Python distributions ship the wheel distribution.