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

Top 120 - 240

cachetools ✓ tomlkit ✗ opentelemetry-exporter-otlp-proto-grpc ✓ opentelemetry-exporter-otlp-proto-common ✓ langchain ✓ oauthlib ✗ openpyxl ✗ editables ✗ et-xmlfile ✗ proto-plus ✓ pyopenssl ✗ python-discovery ✗ google-genai ✓ wcwidth ✗ dnspython ✓ requests-toolbelt ✗ pytest-json-ctrf ✓ coverage ✓ mcp ✓ grpcio-tools ✓ sse-starlette ✓ multiprocess ✗ rsa ✗ networkx ✓ msgpack ✓ gitpython ✗ ruff ✗ mypy-extensions ✗ smmap ✗ sortedcontainers ✓ psycopg2-binary ✗ docstring-parser ✗ werkzeug ✓ matplotlib ✓ decorator ✗ hf-xet ✗ fonttools ✓ keyring ✓ redis ✓ google-cloud-storage ✓ gitdb ✗ prompt-toolkit ✗ jaraco-classes ✓ jeepney ✓ secretstorage ✓ weaviate-client ✓ pynacl ✗ pytest-asyncio ✓ websocket-client ✗ azure-identity ✗ tiktoken ✓ tabulate ✓ email-validator ✗ docutils ✗ jaraco-functools ✓ kiwisolver ✓ azure-core ✓ jaraco-context ✓ isodate ✗ tokenizers ✓ ydb ✗ contourpy ✓ defusedxml ✗ httptools ✓ scikit-learn ✓ pytest-cov ✗ tzlocal ✓ itsdangerous ✓ uvloop ✗ ptyprocess ✓ dill ✗ joblib ✗ opentelemetry-instrumentation-requests ✓ pexpect ✓ httpx-sse ✗ google-cloud-core ✓ flask ✓ orjson ✓ bcrypt ✗ chardet ✓ alembic ✓ docker ✗ msal ✗ opentelemetry-exporter-otlp ✓ opentelemetry-util-http ✓ google-api-python-client ✗ ruamel-yaml ✗ cycler ✗ nodeenv ✗ ipython ✓ pydantic-ai-slim ✓ mako ✗ deprecated ✗ google-resumable-media ✓ threadpoolctl ✗ snowflake-connector-python ✓ browser-use ✓ rapidfuzz ✓ uritemplate ✓ google-crc32c ✓ blinker ✓ hpack ✓ xxhash ✗ toml ✗ async-timeout ✓ google-auth-httplib2 ✓ google-auth-oauthlib ✓ h2 ✗ identify ✓ langchain-core ✓ httplib2 ✓ pre-commit ✓ hyperframe ✗ google-cloud-batch ✓ google-cloud-bigquery ✓ google-cloud-secret-manager ✓ zstandard ✗ cfgv ✓ transformers ✓ traitlets ✓

Top 240 - 360

pyproject-hooks ✓ asn1crypto ✗ prometheus-client ✗ uv ✗ anthropic ✗ mypy ✓ poetry-core ✓ executing ✗ jsonpointer ✓ backoff ✗ google-analytics-admin ✓ jedi ✓ google-cloud-kms ✓ authlib ✓ aiofiles ✗ google-cloud-compute ✓ parso ✗ sympy ✗ fastjsonschema ✗ build ✓ gcsfs ✓ paramiko ✗ matplotlib-inline ✗ asttokens ✗ mpmath ✗ cloudpickle ✗ joserfc ✓ sentry-sdk ✗ google-cloud-aiplatform ✓ black ✓ stack-data ✗ sqlparse ✗ pure-eval ✗ asgiref ✗ msal-extensions ✗ databricks-sdk ✓ opentelemetry-instrumentation-threading ✓ webencodings ✓ datasets ✓ google-cloud-dlp ✓ babel ✗ lmnr ✓ pytest-xdist ✗ narwhals ✓ azure-storage-blob ✗ gunicorn ✓ google-cloud-texttospeech ✓ execnet ✗ google-cloud-speech ✓ grpc-google-iam-v1 ✗ termcolor ✓ tornado ✗ cachecontrol ✓ python-json-logger ✓ marshmallow ✓ pandas-stubs ✓ jsonpatch ✗ types-requests ✓ setuptools-scm ✗ xmltodict ✗ google-cloud-pubsub ✓ pydantic-graph ✓ cython ✗ pypdf ✗ databricks-sql-connector ✗ markdown ✓ kubernetes ✓ isort ✓ tree-sitter ✓ pymongo ✗ dbt-adapters ✓ librt ✗ python-docx ✗ jsonschema-path ✓ py4j ✗ tinycss2 ✓ pyperclip ✗ dbt-core ✓ aioitertools ✓ watchdog ✗ asyncpg ✗ snowflake-snowpark-python ✓ vcs-versioning ✗ debugpy ✗ pytest-mock ✗ fastuuid ✗ langsmith ✓ google-cloud-tasks ✓ dulwich ✓ xlsxwriter ✗ pathable ✓ griffelib ✓ cyclopts ✓ beartype ✓ pyzmq ✗ structlog ✓ importlib-resources ✓ jsonref ✓ google-cloud-logging ✓ pkginfo ✗ google-cloud-monitoring ✓ psycopg ✓ lz4 ✗ nest-asyncio ✗ pytokens ✗ typedload ✓ llama-parse ✓ opentelemetry-exporter-prometheus ✓ flatbuffers ✓ llama-cloud-services ✓ mdit-py-plugins ✗ rich-rst ✗ ghapi ✓ pymupdf ✓ slack-sdk ✗ py-key-value-aio ✓ google-cloud-vision ✓ google-cloud-bigtable ✓ pycryptodome ✗ pytest-timeout ✗

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.