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

Top 120 - 240

openpyxl ✗ openai ✗ redis ✓ et-xmlfile ✗ websocket-client ✗ sse-starlette ✓ editables ✗ werkzeug ✓ mypy-extensions ✗ distro ✗ jiter ✗ google-cloud-storage ✓ textual ✗ grpcio-tools ✓ networkx ✓ opentelemetry-exporter-otlp-proto-http ✗ langchain ✓ coverage ✓ wcwidth ✗ async-timeout ✓ huggingface-hub ✓ dnspython ✓ msgpack ✓ pyopenssl ✗ psycopg2-binary ✗ uvloop ✗ gitpython ✗ sglang ✓ ptyprocess ✓ decorator ✗ smmap ✗ pynacl ✗ google-genai ✓ pexpect ✓ python-discovery ✗ httpx-sse ✗ fonttools ✓ docker ✗ sortedcontainers ✓ opentelemetry-exporter-otlp-proto-common ✗ tabulate ✓ opentelemetry-exporter-otlp-proto-grpc ✗ httptools ✓ matplotlib ✓ flask ✓ scikit-learn ✓ keyring ✓ kiwisolver ✓ isodate ✗ google-cloud-core ✗ gitdb ✗ ruff ✗ prompt-toolkit ✗ docstring-parser ✗ jaraco-classes ✓ multiprocess ✗ opentelemetry-instrumentation ✗ joblib ✗ secretstorage ✓ contourpy ✓ jeepney ✓ itsdangerous ✓ bcrypt ✗ azure-identity ✗ alembic ✓ azure-core ✗ google-crc32c ✓ pytest-cov ✗ google-resumable-media ✗ threadpoolctl ✗ jaraco-context ✓ dill ✗ jaraco-functools ✓ msal ✗ chardet ✓ orjson ✓ deprecated ✗ blinker ✓ zstandard ✗ hf-xet ✗ cycler ✗ ruamel-yaml ✗ snowflake-connector-python ✗ defusedxml ✗ pytest-asyncio ✓ email-validator ✗ tzlocal ✗ kubernetes ✗ pydantic-ai-slim ✓ toml ✗ ipython ✓ mako ✗ uv ✗ nodeenv ✗ rapidfuzz ✓ sympy ✗ prometheus-client ✗ google-api-python-client ✗ opentelemetry-exporter-otlp ✗ tokenizers ✗ setuptools-scm ✓ poetry-core ✓ mpmath ✗ asn1crypto ✗ types-requests ✓ google-cloud-bigquery ✗ pyproject-hooks ✓ tree-sitter ✓ mypy ✓ paramiko ✗ tiktoken ✓ identify ✓ google-auth-oauthlib ✗ uritemplate ✓ build ✗ backoff ✗ traitlets ✓ google-auth-httplib2 ✗ pre-commit ✓ fastjsonschema ✗

Top 240 - 360

pytest-json-ctrf ✓ parso ✗ google-cloud-aiplatform ✗ pytest-xdist ✗ cfgv ✓ transformers ✓ jedi ✗ pyee ✗ executing ✗ marshmallow ✓ httplib2 ✓ sqlparse ✗ xxhash ✗ execnet ✗ opentelemetry-instrumentation-requests ✗ opentelemetry-util-http ✗ jsonpointer ✓ matplotlib-inline ✗ tornado ✗ asttokens ✗ grpc-google-iam-v1 ✗ h2 ✗ babel ✗ msal-extensions ✗ playwright ✗ hyperframe ✗ hpack ✗ cloudpickle ✗ google-cloud-secret-manager ✗ aiofiles ✗ gunicorn ✓ cython ✗ pure-eval ✗ stack-data ✗ azure-storage-blob ✗ durationpy ✓ authlib ✓ tree-sitter-languages ✓ asgiref ✗ weaviate-client ✓ xmltodict ✗ google-cloud-batch ✗ markdown ✓ vcs-versioning ✓ py4j ✗ webencodings ✓ sentry-sdk ✗ datasets ✓ black ✓ nest-asyncio ✗ ujson ✓ databricks-sdk ✓ termcolor ✓ importlib-resources ✓ google-analytics-admin ✗ langchain-core ✓ anthropic ✗ python-json-logger ✓ cachecontrol ✓ dbt-core ✓ debugpy ✗ gcsfs ✓ jsonpatch ✗ librt ✗ google-cloud-compute ✗ pymongo ✗ google-cloud-kms ✗ pyzmq ✗ typing-inspect ✗ joserfc ✗ ydb ✗ watchdog ✗ dacite ✗ dbt-adapters ✓ awswrangler ✓ aioitertools ✓ jsonschema-path ✓ iso8601 ✗ tinycss2 ✓ pytest-mock ✗ pandas-stubs ✓ google-cloud-dlp ✗ databricks-sql-connector ✗ lz4 ✗ pycryptodome ✗ dulwich ✓ pymysql ✓ isort ✓ grpcio-health-checking ✗ google-cloud-pubsub ✗ pkginfo ✗ google-cloud-speech ✗ flatbuffers ✓ slack-sdk ✗ jupyter-core ✓ torch ✓ narwhals ✗ deepdiff ✓ pathable ✓ pyhumps ✗ dataclasses-json ✗ mccabe ✗ msrest ✗ dbt-common ✓ ipykernel ✓ rfc3339-validator ✓ jupyter-client ✓ invoke ✗ loguru ✗ langsmith ✓ pyperclip ✗ google-cloud-monitoring ✗ poetry ✓ sphinx ✓ pygithub ✗ jsonpath-ng ✓ safetensors ✗ axiom-py ✗ smart-open ✓ rich-toolkit ✓

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.