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

Top 120 - 240

isodate ✗ regex ✗ sortedcontainers ✓ pynacl ✗ psycopg2-binary ✗ opentelemetry-semantic-conventions ✗ scikit-learn ✓ opentelemetry-api ✗ cloudpickle ✗ werkzeug ✓ shellingham ✗ more-itertools ✗ networkx ✓ pexpect ✓ ptyprocess ✓ azure-core ✗ decorator ✗ hatchling ✓ azure-identity ✗ msgpack ✓ msal ✗ mypy-extensions ✗ snowflake-connector-python ✗ threadpoolctl ✗ joblib ✗ python-multipart ✓ websockets ✗ async-timeout ✓ asn1crypto ✗ bcrypt ✗ pyzmq ✗ coverage ✓ textual ✗ gitpython ✗ dnspython ✓ wcwidth ✗ openai ✗ google-cloud-core ✗ distro ✗ tabulate ✗ smmap ✗ annotated-doc ✗ gitdb ✗ redis ✓ ruamel-yaml ✗ paramiko ✗ matplotlib ✓ deprecated ✗ google-resumable-media ✗ langsmith ✓ google-cloud-bigquery ✗ google-crc32c ✓ google-api-python-client ✗ fonttools ✓ google-auth-oauthlib ✗ keyring ✓ itsdangerous ✓ chardet ✗ alembic ✓ poetry-core ✗ kubernetes ✗ tzlocal ✗ prompt-toolkit ✗ dill ✗ google-cloud-batch ✗ pydantic-settings ✓ jiter ✗ kiwisolver ✓ transformers ✗ aliyun-python-sdk-core ✗ google-auth-httplib2 ✗ backoff ✗ setuptools-scm ✗ blinker ✓ langchain ✓ typer ✗ google-cloud-secret-manager ✗ secretstorage ✓ msal-extensions ✗ uritemplate ✓ pyproject-hooks ✓ jaraco-classes ✓ google-analytics-admin ✗ httplib2 ✓ azure-storage-blob ✗ cycler ✗ pytest-asyncio ✓ py4j ✗ zstandard ✗ jeepney ✓ opentelemetry-exporter-prometheus ✗ grpcio-health-checking ✗ ruff ✗ fastjsonschema ✗ ruamel-yaml-clib ✗ sympy ✗ defusedxml ✗ orjson ✗ rapidfuzz ✓ opentelemetry-instrumentation ✗ marshmallow ✓ nodeenv ✗ prometheus-client ✗ contourpy ✓ build ✗ tokenizers ✗ jaraco-functools ✓ mpmath ✗ pytest-cov ✗ sqlparse ✗ cython ✗ importlib-resources ✓ docker ✗ xmltodict ✗ types-requests ✓ editables ✗ jaraco-context ✓ ipython ✓ pre-commit ✓ hf-xet ✗

Top 240 - 360

tornado ✗ mako ✗ uv ✗ cfgv ✓ identify ✓ awswrangler ✗ jsonpointer ✗ pandas-stubs ✓ aiofiles ✗ traitlets ✓ email-validator ✗ toml ✗ jedi ✗ babel ✗ parso ✗ typedload ✓ nest-asyncio ✗ matplotlib-inline ✗ pymupdf ✓ black ✓ executing ✗ grpc-google-iam-v1 ✗ durationpy ✓ asttokens ✗ ply ✓ dbt-core ✓ tiktoken ✓ sentry-sdk ✗ argcomplete ✗ langchain-core ✓ webencodings ✓ pymongo ✗ sphinx ✓ mypy ✗ litellm ✗ gym-notices ✓ dbt-common ✓ markdown ✓ termcolor ✓ snowflake-sqlalchemy ✗ stack-data ✗ pure-eval ✗ docstring-parser ✗ opentelemetry-util-http ✗ pymysql ✓ asgiref ✗ google-cloud-vision ✗ aioitertools ✓ watchfiles ✗ google-cloud-monitoring ✗ dbt-adapters ✓ google-cloud-dlp ✗ google-cloud-tasks ✗ google-cloud-speech ✗ torch ✓ python-json-logger ✗ msrest ✗ gunicorn ✗ databricks-sdk ✗ uvloop ✗ google-cloud-compute ✗ typing-inspect ✗ google-cloud-language ✗ google-cloud-workflows ✗ jsonpatch ✗ opentelemetry-instrumentation-requests ✗ shapely ✓ cachecontrol ✓ pytest-xdist ✗ google-cloud-dataform ✗ google-cloud-videointelligence ✗ pendulum ✗ jsonpath-ng ✗ mcp ✓ execnet ✗ azure-common ✗ google-cloud-os-login ✗ google-cloud-bigtable ✗ pkginfo ✗ pycryptodome ✗ debugpy ✗ google-cloud-redis ✗ watchdog ✗ datadog ✗ multiprocess ✗ isort ✓ httptools ✓ notebook ✗ scramp ✗ google-cloud-memcache ✗ future ✗ lz4 ✗ mccabe ✗ slack-sdk ✗ h2 ✗ hyperframe ✗ hpack ✗ requests-file ✓ jupyter-core ✓ wsproto ✓ pycodestyle ✓ ray ✗ cattrs ✗ google-cloud-logging ✗ httpx-sse ✗ google-cloud-kms ✗ dataclasses-json ✗ opensearch-py ✓ datasets ✗ smart-open ✗ google-cloud-aiplatform ✗ ipykernel ✓ jupyter-client ✓ tree-sitter ✓ pygithub ✗ pysocks ✓ tinycss2 ✓ deepdiff ✗ backports-tarfile ✓ selenium ✓

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.