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

Top 120 - 240

pydantic-settings ✓ proto-plus ✗ flask ✓ google-cloud-storage ✗ pyopenssl ✗ werkzeug ✓ msgpack ✓ opentelemetry-exporter-otlp-proto-grpc ✗ openai ✗ pynacl ✗ mypy-extensions ✗ opensearch-py ✓ coverage ✓ python-multipart ✓ dnspython ✓ psycopg2-binary ✗ opentelemetry-exporter-otlp-proto-http ✗ requests-aws4auth ✗ isodate ✗ distro ✗ yandexcloud ✗ opentelemetry-exporter-otlp-proto-common ✗ networkx ✓ wcwidth ✗ huggingface-hub ✗ sortedcontainers ✓ events ✓ decorator ✗ scikit-learn ✓ azure-core ✗ azure-identity ✗ pexpect ✓ ptyprocess ✓ keyring ✓ matplotlib ✓ bcrypt ✗ fonttools ✓ joblib ✗ redis ✓ textual ✗ poetry-core ✓ msal ✗ ruff ✗ editables ✗ gitpython ✗ jiter ✗ opensearch-protobufs ✓ snowflake-connector-python ✗ jaraco-classes ✓ secretstorage ✓ google-cloud-core ✗ jeepney ✓ ruamel-yaml ✗ kiwisolver ✓ zstandard ✗ google-cloud-aiplatform ✗ itsdangerous ✓ threadpoolctl ✗ alembic ✓ async-timeout ✓ watchfiles ✗ defusedxml ✗ google-cloud-bigquery ✗ jaraco-context ✓ tabulate ✓ types-requests ✓ prompt-toolkit ✗ jaraco-functools ✓ smmap ✗ python-discovery ✗ kubernetes ✗ gitdb ✗ contourpy ✓ deprecated ✗ docker ✗ orjson ✓ opentelemetry-instrumentation ✗ email-validator ✗ tzlocal ✗ google-crc32c ✓ pytest-cov ✗ google-resumable-media ✗ rapidfuzz ✓ asn1crypto ✗ opentelemetry-exporter-otlp ✗ paramiko ✗ blinker ✓ google-api-python-client ✗ pytest-asyncio ✓ setuptools-scm ✗ chardet ✓ google-auth-oauthlib ✗ backoff ✗ prometheus-client ✗ dill ✗ cycler ✗ pyproject-hooks ✓ docstring-parser ✗ mako ✗ build ✗ uritemplate ✓ marshmallow ✓ fastjsonschema ✗ uv ✗ google-auth-httplib2 ✗ sse-starlette ✓ msal-extensions ✗ hf-xet ✗ httplib2 ✓ transformers ✓ sympy ✗ azure-storage-blob ✗ tokenizers ✗ jsonpointer ✗ sqlparse ✗ google-cloud-secret-manager ✗ babel ✗ uvloop ✗ mpmath ✗ google-cloud-batch ✗

Top 240 - 360

mcp ✓ xmltodict ✗ aiofiles ✗ ipython ✓ nodeenv ✗ litellm ✗ mypy ✗ google-analytics-admin ✗ durationpy ✓ grpcio-health-checking ✗ httpx-sse ✗ tiktoken ✓ py4j ✗ parso ✗ tornado ✗ cloudpickle ✗ isort ✓ traitlets ✓ opentelemetry-util-http ✗ databricks-sdk ✗ toml ✗ opentelemetry-instrumentation-requests ✗ black ✓ importlib-resources ✓ httptools ✓ pre-commit ✓ jedi ✗ gunicorn ✓ executing ✗ gcsfs ✓ cython ✗ identify ✓ markdown ✓ asttokens ✗ langchain-core ✓ sentry-sdk ✗ asgiref ✗ matplotlib-inline ✗ cfgv ✓ grpc-google-iam-v1 ✗ dbt-core ✓ webencodings ✓ nest-asyncio ✗ python-json-logger ✗ authlib ✗ cachecontrol ✓ stack-data ✗ pure-eval ✗ pandas-stubs ✓ pytest-xdist ✗ cattrs ✓ xxhash ✗ jsonpatch ✗ execnet ✗ pymongo ✗ typing-inspect ✗ aioitertools ✓ awswrangler ✓ debugpy ✗ aliyun-python-sdk-core ✗ pymysql ✓ watchdog ✗ h2 ✗ hyperframe ✗ hpack ✗ termcolor ✓ typedload ✓ pkginfo ✗ dulwich ✓ tree-sitter ✓ dbt-adapters ✓ pyzmq ✗ jsonschema-path ✓ msrest ✗ pytest-mock ✗ dataclasses-json ✗ ruamel-yaml-clib ✗ lz4 ✗ pycryptodome ✗ deepdiff ✗ rich-toolkit ✓ invoke ✗ mccabe ✗ torch ✓ opentelemetry-exporter-prometheus ✗ poetry ✓ dbt-common ✓ langsmith ✓ slack-sdk ✗ rfc3339-validator ✓ google-cloud-monitoring ✗ multiprocess ✗ pygithub ✗ smart-open ✓ jsonpath-ng ✓ google-cloud-vision ✗ google-cloud-speech ✗ tinycss2 ✓ google-cloud-compute ✗ google-cloud-kms ✗ sphinx ✓ pendulum ✗ anthropic ✗ arrow ✗ notebook ✗ semver ✗ snowflake-sqlalchemy ✗ jupyter-core ✓ google-cloud-dlp ✗ google-cloud-tasks ✗ pycodestyle ✓ databricks-sql-connector ✗ requests-file ✓ future ✗ shapely ✓ google-cloud-videointelligence ✗ google-cloud-language ✗ pyperclip ✗ ipykernel ✓ installer ✓

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.