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

Top 120 - 240

annotated-doc ✗ google-cloud-storage ✗ hatchling ✓ pyopenssl ✗ proto-plus ✗ werkzeug ✓ websockets ✓ mypy-extensions ✗ psycopg2-binary ✗ pynacl ✗ coverage ✓ networkx ✓ isodate ✗ opentelemetry-exporter-otlp-proto-common ✗ flask ✓ python-multipart ✓ huggingface-hub ✗ openai ✗ wcwidth ✗ decorator ✗ msgpack ✓ opentelemetry-exporter-otlp ✗ pexpect ✓ ptyprocess ✓ azure-core ✗ dnspython ✓ distro ✗ scikit-learn ✓ redis ✓ kubernetes ✗ msal ✗ matplotlib ✓ joblib ✗ snowflake-connector-python ✗ fonttools ✓ azure-identity ✗ bcrypt ✗ typer ✗ keyring ✓ jiter ✗ pydantic-settings ✓ gitpython ✗ ruamel-yaml ✗ poetry-core ✓ google-cloud-core ✗ kiwisolver ✓ threadpoolctl ✗ async-timeout ✓ tabulate ✗ jaraco-classes ✓ itsdangerous ✓ secretstorage ✓ asn1crypto ✗ ruff ✗ jeepney ✓ alembic ✓ types-requests ✓ prompt-toolkit ✗ prometheus-client ✗ textual ✗ deprecated ✗ opentelemetry-instrumentation ✗ rapidfuzz ✓ chardet ✗ google-crc32c ✓ google-resumable-media ✗ smmap ✗ blinker ✓ defusedxml ✗ gitdb ✗ paramiko ✗ docker ✗ zstandard ✗ contourpy ✓ tzlocal ✗ editables ✗ jaraco-functools ✓ jaraco-context ✓ google-api-python-client ✗ pytest-cov ✗ orjson ✓ cloudpickle ✗ pyproject-hooks ✓ backoff ✗ cycler ✗ durationpy ✓ pytest-asyncio ✓ build ✗ dill ✗ fastjsonschema ✗ msal-extensions ✗ google-auth-oauthlib ✗ azure-storage-blob ✗ transformers ✓ google-cloud-bigquery ✗ gcsfs ✓ marshmallow ✓ sympy ✗ uritemplate ✓ setuptools-scm ✗ google-auth-httplib2 ✗ mako ✗ httplib2 ✓ tokenizers ✗ email-validator ✗ babel ✗ nodeenv ✗ sqlparse ✗ mpmath ✗ hf-xet ✗ python-json-logger ✗ uv ✗ ipython ✓ google-cloud-aiplatform ✗ pre-commit ✓ aiofiles ✗ watchfiles ✗ toml ✗ identify ✓ opentelemetry-instrumentation-requests ✗

Top 240 - 360

jsonpointer ✗ docstring-parser ✗ xmltodict ✗ parso ✗ opensearch-py ✓ opentelemetry-util-http ✗ tornado ✗ traitlets ✓ cfgv ✓ uvloop ✗ mypy ✗ py4j ✗ jedi ✗ cython ✗ importlib-resources ✓ gunicorn ✓ black ✓ google-cloud-secret-manager ✗ requests-aws4auth ✗ executing ✗ matplotlib-inline ✗ nest-asyncio ✗ asttokens ✗ asgiref ✗ tiktoken ✓ markdown ✓ langchain-core ✓ ply ✓ mcp ✓ httptools ✓ cachecontrol ✓ dbt-core ✓ sentry-sdk ✗ grpc-google-iam-v1 ✗ awswrangler ✓ webencodings ✓ stack-data ✗ pure-eval ✗ httpx-sse ✗ aliyun-python-sdk-core ✗ opentelemetry-exporter-prometheus ✗ pymongo ✗ sse-starlette ✗ pymysql ✓ pkginfo ✗ pytest-xdist ✗ execnet ✗ dbt-adapters ✓ grpcio-health-checking ✗ databricks-sdk ✗ jsonpatch ✗ authlib ✗ dulwich ✓ watchdog ✗ isort ✓ aioitertools ✓ google-cloud-batch ✗ termcolor ✓ typer-slim ✗ events ✓ debugpy ✗ pycryptodome ✗ torch ✓ msrest ✗ typing-inspect ✗ croniter ✗ pyzmq ✗ google-analytics-admin ✗ ruamel-yaml-clib ✗ jsonpath-ng ✗ h2 ✗ dbt-common ✓ poetry ✓ hyperframe ✗ hpack ✗ litellm ✗ wsproto ✓ xxhash ✗ pytest-mock ✗ mccabe ✗ lz4 ✗ poetry-plugin-export ✓ notebook ✗ crashtest ✗ cleo ✗ installer ✓ slack-sdk ✗ pysocks ✓ multiprocess ✗ azure-common ✗ datasets ✗ pendulum ✗ ipykernel ✓ snowflake-sqlalchemy ✗ dataclasses-json ✗ pandas-stubs ✓ jupyter-core ✓ nvidia-nccl-cu12 ✗ argcomplete ✗ langsmith ✓ arrow ✗ invoke ✗ deepdiff ✗ datadog ✗ safetensors ✗ botocore-stubs ✗ numba ✓ types-awscrt ✗ pycodestyle ✓ rfc3339-validator ✓ pygithub ✗ shapely ✓ jupyter-client ✓ requests-file ✓ smart-open ✗ boto3-stubs ✗ tinycss2 ✓ tree-sitter ✓ types-s3transfer ✗ loguru ✗

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.