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

Top 120 - 240

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

Top 240 - 360

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

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.