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

Top 120 - 240

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

Top 240 - 360

narwhals ✓ psycopg ✓ msal-extensions ✗ sqlparse ✓ black ✓ webencodings ✓ asgiref ✓ librt ✗ cloudpickle ✗ traitlets ✓ pypdf ✗ jsonpatch ✗ psycopg-binary ✓ fastjsonschema ✓ paramiko ✗ typedload ✓ snowflake-connector-python ✓ babel ✗ opentelemetry-exporter-otlp-proto-grpc ✓ gunicorn ✓ opentelemetry-instrumentation-requests ✓ authlib ✓ azure-storage-blob ✗ transformers ✓ asyncpg ✗ awscli ✓ executing ✗ grpc-google-iam-v1 ✓ markdown ✓ xmltodict ✗ structlog ✓ databricks-sdk ✓ ipython ✓ awswrangler ✓ tornado ✗ marshmallow ✓ jedi ✓ parso ✗ litellm ✓ aioitertools ✓ asttokens ✗ joserfc ✓ python-json-logger ✓ pyproject-hooks ✓ setuptools-scm ✗ matplotlib-inline ✗ tinycss2 ✓ build ✓ isort ✓ python-docx ✗ poetry-core ✓ datasets ✓ playwright ✓ pyzmq ✓ stack-data ✗ pure-eval ✗ xlsxwriter ✗ langsmith ✓ vcs-versioning ✗ cachecontrol ✓ cython ✗ watchdog ✗ pytest-timeout ✗ cbor2 ✓ pytest-mock ✗ pymysql ✓ pyee ✓ nest-asyncio ✗ pymupdf ✓ lz4 ✗ kubernetes ✓ types-requests ✓ fastuuid ✗ debugpy ✗ brotli ✓ nbformat ✓ reportlab ✓ safetensors ✓ sqlglot ✓ py4j ✗ uuid-utils ✓ croniter ✗ types-toml ✓ jupyter-core ✓ slack-sdk ✗ google-cloud-aiplatform ✓ termcolor ✓ importlib-resources ✓ flatbuffers ✓ grpclib ✓ typing-inspect ✗ loguru ✗ pytokens ✗ pycryptodome ✗ types-pyyaml ✓ xlrd ✗ jupyter-client ✓ graphql-core ✗ types-certifi ✓ torch ✓ ast-serialize ✗ scramp ✓ wsproto ✓ opentelemetry-instrumentation-fastapi ✓ psycopg2 ✗ griffelib ✓ text-unidecode ✓ deprecation ✓ pymongo ✗ requests-file ✓ modal ✓ semver ✗ mccabe ✗ synchronicity ✓ tomli-w ✓ faker ✓ pyperclip ✗ mdit-py-plugins ✗ linkify-it-py ✓ opentelemetry-instrumentation-asgi ✓

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.