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

Top 120 - 240

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

Top 240 - 360

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

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.