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. 238 green packages (66.1%) have dropped support for Python 3.9;
  2. 122 uncolored packages (33.9%) 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 ✗ idna ✗ certifi ✗ urllib3 ✓ requests ✓ charset-normalizer ✗ cryptography ✗ cffi ✓ pygments ✗ pluggy ✓ pyyaml ✗ pycparser ✓ pydantic ✓ python-dateutil ✗ six ✓ pydantic-core ✓ setuptools ✓ numpy ✓ click ✓ anyio ✓ iniconfig ✓ pytest ✓ annotated-types ✓ botocore ✓ typing-inspection ✓ h11 ✗ attrs ✗ markupsafe ✓ httpx ✗ httpcore ✗ s3transfer ✓ python-dotenv ✓ pyjwt ✗ protobuf ✓ aiobotocore ✓ starlette ✓ jinja2 ✓ platformdirs ✓ pandas ✓ opentelemetry-api ✓ fsspec ✓ pillow ✓ uvicorn ✓ pathspec ✗ rpds-py ✓ filelock ✓ jsonschema ✓ jmespath ✗ referencing ✓ jsonschema-specifications ✗ multidict ✓ tomlkit ✗ markdown-it-py ✓ rich ✗ aiohttp ✓ yarl ✓ mdurl ✗ annotated-doc ✗ propcache ✓ fastapi ✓ websockets ✓ tqdm ✗ frozenlist ✗ tzdata ✓ googleapis-common-protos ✓ aiosignal ✓ sniffio ✓ aiohappyeyeballs ✓ pytz ✗ pydantic-settings ✓ pyasn1 ✗ pip ✓ wrapt ✗ python-multipart ✓ google-auth ✓ trove-classifiers ✓ pyarrow ✓ tenacity ✓ zipp ✓ ruff ✗ jiter ✓ lxml ✗ pyasn1-modules ✗ importlib-metadata ✓ sqlalchemy ✓ greenlet ✓ hatchling ✓ truststore ✓ pyparsing ✗ wheel ✗ openai ✓ regex ✓ scipy ✓ grpcio-status ✓ grpcio ✓ watchfiles ✓ google-api-core ✓ soupsieve ✓ httpx2 ✓ httpcore2 ✓ openpyxl ✗ et-xmlfile ✗ psutil ✓ distro ✗ opentelemetry-semantic-conventions ✓ opentelemetry-sdk ✓ s3fs ✓ coverage ✓ beautifulsoup4 ✓ shellingham ✗ sse-starlette ✓ typer ✓ mcp ✓ mypy-extensions ✗ httptools ✓ colorama ✗ huggingface-hub ✓ proto-plus ✓

Top 120 - 240

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

Top 240 - 360

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

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.