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

Top 120 - 240

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

Top 240 - 360

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

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.