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

Top 120 - 240

more-itertools ✓ proto-plus ✓ distro ✗ websocket-client ✗ jiter ✗ openpyxl ✗ pydantic-ai-slim ✓ et-xmlfile ✗ distlib ✗ opentelemetry-exporter-otlp-proto-http ✓ uvloop ✗ google-genai ✓ httptools ✓ editables ✗ docutils ✗ langchain ✓ grpcio-tools ✓ coverage ✓ mypy-extensions ✗ httpx-sse ✗ wcwidth ✗ networkx ✓ dnspython ✓ werkzeug ✓ huggingface-hub ✓ psycopg2-binary ✗ pyopenssl ✗ msgpack ✓ ptyprocess ✓ google-cloud-storage ✓ pexpect ✓ async-timeout ✓ python-discovery ✗ opentelemetry-exporter-otlp-proto-grpc ✓ gitpython ✗ pynacl ✗ opentelemetry-exporter-otlp-proto-common ✓ ruff ✗ docker ✗ sortedcontainers ✓ opentelemetry-instrumentation ✓ decorator ✗ smmap ✗ docstring-parser ✗ azure-identity ✗ isodate ✗ pytest-json-ctrf ✓ azure-core ✓ keyring ✓ fonttools ✓ tabulate ✓ scikit-learn ✓ gitdb ✗ jaraco-classes ✓ bcrypt ✗ flask ✓ itsdangerous ✓ prompt-toolkit ✗ secretstorage ✓ jeepney ✓ matplotlib ✓ joblib ✗ hf-xet ✗ jaraco-functools ✓ google-cloud-core ✓ pytest-asyncio ✓ msal ✗ pytest-cov ✗ alembic ✓ jaraco-context ✓ ruamel-yaml ✗ kubernetes ✗ dill ✗ deprecated ✗ threadpoolctl ✗ orjson ✓ email-validator ✗ kiwisolver ✓ snowflake-connector-python ✗ defusedxml ✗ pydantic-graph ✓ blinker ✓ multiprocess ✗ mako ✗ tiktoken ✓ databricks-sql-connector ✗ google-resumable-media ✓ google-crc32c ✓ ydb ✗ tzlocal ✗ contourpy ✓ google-api-python-client ✗ tokenizers ✓ chardet ✓ uv ✗ opentelemetry-exporter-otlp ✓ pyee ✗ google-cloud-batch ✗ types-requests ✓ google-cloud-aiplatform ✓ google-auth-oauthlib ✓ google-cloud-secret-manager ✗ sglang ✓ google-auth-httplib2 ✓ weaviate-client ✓ rapidfuzz ✓ cycler ✗ uritemplate ✓ pyproject-hooks ✓ asn1crypto ✗ playwright ✗ prometheus-client ✗ zstandard ✗ paramiko ✗ mypy ✓ xxhash ✗ opentelemetry-instrumentation-requests ✓ toml ✗ poetry-core ✓ httplib2 ✓

Top 240 - 360

opentelemetry-util-http ✓ nodeenv ✗ build ✓ aiofiles ✗ google-analytics-admin ✗ sympy ✗ ipython ✓ durationpy ✓ jsonpointer ✓ traitlets ✓ backoff ✗ marshmallow ✓ transformers ✓ google-cloud-kms ✗ google-cloud-compute ✗ fastjsonschema ✗ msal-extensions ✗ mpmath ✗ sqlparse ✗ azure-storage-blob ✗ google-cloud-bigquery ✗ jedi ✓ gcsfs ✓ identify ✓ pre-commit ✓ parso ✗ anthropic ✗ h2 ✗ gunicorn ✓ hyperframe ✗ hpack ✗ babel ✗ cfgv ✓ executing ✗ matplotlib-inline ✗ dbt-core ✓ cloudpickle ✗ setuptools-scm ✓ sentry-sdk ✗ databricks-sdk ✓ pytest-xdist ✗ asttokens ✗ authlib ✓ google-cloud-dlp ✗ asgiref ✗ xmltodict ✗ ujson ✓ cython ✗ webencodings ✓ pandas-stubs ✓ black ✓ execnet ✗ datasets ✓ nest-asyncio ✗ tornado ✗ google-cloud-speech ✗ grpc-google-iam-v1 ✗ pure-eval ✗ stack-data ✗ llama-parse ✓ google-cloud-texttospeech ✗ llama-cloud-services ✓ google-cloud-pubsub ✗ jsonpatch ✗ py4j ✗ langchain-core ✓ python-json-logger ✓ dacite ✗ cachecontrol ✓ pyzmq ✗ importlib-resources ✓ joserfc ✗ librt ✗ markdown ✓ termcolor ✓ watchdog ✗ pymongo ✗ rich-toolkit ✓ vcs-versioning ✓ typing-inspect ✗ debugpy ✗ dbt-adapters ✓ aioitertools ✓ iso8601 ✗ google-cloud-tasks ✗ pyhumps ✗ google-cloud-bigtable ✗ structlog ✗ google-cloud-monitoring ✗ asyncpg ✗ langsmith ✓ tinycss2 ✓ msrest ✗ narwhals ✗ isort ✓ google-cloud-logging ✗ pytest-mock ✗ google-cloud-vision ✗ pycryptodome ✗ dulwich ✓ slack-sdk ✗ grpcio-health-checking ✗ pymysql ✓ axiom-py ✗ torch ✓ dbt-common ✓ pkginfo ✗ lz4 ✗ jupyter-core ✓ ruamel-yaml-clib ✗ snowflake-snowpark-python ✗ sphinx ✓ google-cloud-language ✗ google-cloud-videointelligence ✗ tree-sitter ✓ sqlalchemy-bigquery ✓ google-cloud-workflows ✗ dataclasses-json ✗ google-cloud-redis ✗ awswrangler ✓

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.