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

Top 120 - 240

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

Top 240 - 360

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

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.