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

Top 120 - 240

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

Top 240 - 360

httplib2 ✓ zstandard ✗ poetry-core ✓ authlib ✓ identify ✓ pre-commit ✓ google-analytics-admin ✗ transformers ✓ aiofiles ✗ jedi ✓ sympy ✗ executing ✗ parso ✗ build ✓ h2 ✗ cfgv ✓ hyperframe ✗ hpack ✗ google-cloud-kms ✗ google-cloud-compute ✗ types-requests ✓ jsonpointer ✓ fastjsonschema ✗ matplotlib-inline ✗ backoff ✗ gcsfs ✓ sqlparse ✗ marshmallow ✓ msal-extensions ✗ mpmath ✗ asttokens ✗ azure-storage-blob ✗ durationpy ✓ anthropic ✗ cloudpickle ✗ pure-eval ✗ stack-data ✗ setuptools-scm ✓ gunicorn ✓ babel ✗ black ✓ sentry-sdk ✗ datasets ✓ python-json-logger ✓ google-cloud-dlp ✗ pandas-stubs ✓ databricks-sdk ✓ pytest-xdist ✗ asgiref ✗ webencodings ✓ grpc-google-iam-v1 ✗ tornado ✗ joserfc ✗ xmltodict ✗ cython ✗ google-cloud-speech ✗ execnet ✗ termcolor ✓ google-cloud-texttospeech ✗ nest-asyncio ✗ rich-toolkit ✓ tree-sitter ✓ dbt-adapters ✓ py4j ✗ google-cloud-pubsub ✗ cachecontrol ✓ jsonpatch ✗ watchdog ✗ pymongo ✗ cyclopts ✓ dbt-core ✓ markdown ✓ importlib-resources ✓ pyzmq ✗ librt ✗ vcs-versioning ✓ typing-inspect ✗ llama-parse ✓ debugpy ✗ aioitertools ✓ jsonschema-path ✓ llama-cloud-services ✓ rich-rst ✗ google-cloud-tasks ✗ google-cloud-monitoring ✗ structlog ✗ asyncpg ✗ isort ✓ tinycss2 ✓ google-cloud-bigtable ✗ mdit-py-plugins ✗ opentelemetry-instrumentation-threading ✓ pathable ✓ pytest-mock ✗ flatbuffers ✓ dulwich ✓ sphinx ✓ slack-sdk ✗ google-cloud-logging ✗ snowflake-snowpark-python ✗ pymysql ✓ msrest ✗ torch ✓ google-cloud-vision ✗ pycryptodome ✗ pyperclip ✗ narwhals ✗ jupyter-core ✓ pkginfo ✗ pymupdf ✓ grpcio-health-checking ✗ lz4 ✗ jsonref ✓ linkify-it-py ✓ beartype ✓ fastmcp ✓ langsmith ✓ awswrangler ✓ ruamel-yaml-clib ✗ sqlalchemy-bigquery ✓

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.