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

Top 120 - 240

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

Top 240 - 360

jaraco-context ✓ pytest-cov ✗ mako ✗ docker ✗ aiofiles ✗ pre-commit ✓ editables ✗ traitlets ✓ cfgv ✓ identify ✓ nest-asyncio ✗ jsonpointer ✗ dbt-core ✓ email-validator ✗ google-cloud-vision ✗ jedi ✗ parso ✗ durationpy ✓ google-cloud-tasks ✗ google-cloud-dlp ✗ toml ✗ google-cloud-speech ✗ google-cloud-monitoring ✗ snowflake-sqlalchemy ✗ sphinx ✓ google-cloud-workflows ✗ matplotlib-inline ✗ babel ✗ google-cloud-compute ✗ google-cloud-language ✗ grpc-google-iam-v1 ✗ ply ✓ executing ✗ google-cloud-dataform ✗ pymongo ✗ argcomplete ✗ types-requests ✓ pymysql ✓ asttokens ✗ google-cloud-videointelligence ✗ langchain-core ✓ black ✓ tiktoken ✓ google-cloud-os-login ✗ dbt-common ✓ sentry-sdk ✗ google-cloud-bigtable ✗ webencodings ✓ google-cloud-redis ✗ dbt-adapters ✓ docstring-parser ✗ stack-data ✗ pure-eval ✗ termcolor ✓ databricks-sdk ✗ google-cloud-memcache ✗ msrest ✗ litellm ✗ markdown ✓ torch ✓ azure-common ✗ pendulum ✗ asgiref ✗ watchfiles ✗ shapely ✓ pycryptodome ✗ jsonpatch ✗ jsonpath-ng ✗ google-cloud-kms ✗ aioitertools ✓ gunicorn ✗ gym ✗ python-json-logger ✗ scramp ✗ ray ✗ opentelemetry-util-http ✗ pytest-xdist ✗ uvloop ✗ mypy ✗ typing-inspect ✗ notebook ✗ datadog ✗ tree-sitter ✓ python-telegram-bot ✗ google-cloud-logging ✗ execnet ✗ opentelemetry-instrumentation-requests ✗ apache-beam ✓ mcp ✓ debugpy ✗ multiprocess ✗ lz4 ✗ opensearch-py ✓ mccabe ✗ cachecontrol ✓ future ✗ cattrs ✗ h2 ✗ hyperframe ✗ pkginfo ✗ hpack ✗ pycodestyle ✓ httptools ✓ jupyter-core ✓ wsproto ✓ requests-file ✓ slack-sdk ✗ watchdog ✗ ipykernel ✓ isort ✓ invoke ✗ google-cloud-aiplatform ✗ pyspark ✓ jupyter-client ✓ redshift-connector ✗ pysocks ✓ httpx-sse ✗ dataclasses-json ✗ comm ✓ google-ads ✗

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.