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

Top 120 - 240

proto-plus ✗ exceptiongroup ✓ more-itertools ✗ isodate ✗ pynacl ✗ decorator ✗ networkx ✓ msgpack ✓ wcwidth ✗ coverage ✓ huggingface-hub ✗ flask ✓ azure-core ✗ cloudpickle ✗ hatchling ✓ scikit-learn ✓ msal ✗ distro ✗ openai ✗ joblib ✗ python-multipart ✓ bcrypt ✗ ruamel-yaml ✗ pexpect ✓ ptyprocess ✓ async-timeout ✓ asn1crypto ✗ google-cloud-core ✗ tabulate ✗ poetry-core ✓ gitpython ✗ dnspython ✓ threadpoolctl ✗ snowflake-connector-python ✗ pydantic-settings ✓ opentelemetry-instrumentation ✗ opentelemetry-exporter-otlp-proto-http ✗ redis ✓ opentelemetry-exporter-otlp-proto-common ✗ itsdangerous ✓ matplotlib ✓ prompt-toolkit ✗ fonttools ✓ typer ✗ deprecated ✗ keyring ✓ paramiko ✗ opentelemetry-exporter-otlp-proto-grpc ✗ alembic ✓ azure-identity ✗ ruff ✗ smmap ✗ tzlocal ✗ gitdb ✗ google-resumable-media ✗ blinker ✓ google-crc32c ✓ jiter ✗ zstandard ✗ google-genai ✓ chardet ✗ annotated-doc ✗ google-cloud-bigquery ✗ kiwisolver ✓ jaraco-classes ✓ secretstorage ✓ backoff ✗ rapidfuzz ✓ pytest-asyncio ✓ dill ✗ jeepney ✓ build ✗ kubernetes ✗ google-api-python-client ✗ msal-extensions ✗ langsmith ✓ types-requests ✓ orjson ✓ pyproject-hooks ✓ prometheus-client ✗ fastjsonschema ✗ docker ✗ pytest-cov ✗ cycler ✗ defusedxml ✗ yandexcloud ✗ azure-storage-blob ✗ nodeenv ✗ google-auth-oauthlib ✗ setuptools-scm ✗ contourpy ✓ opentelemetry-instrumentation-requests ✗ httplib2 ✓ transformers ✓ jaraco-context ✓ jaraco-functools ✓ uritemplate ✓ editables ✗ google-auth-httplib2 ✗ marshmallow ✓ sqlparse ✗ mako ✗ tokenizers ✗ sympy ✗ ipython ✓ tornado ✗ pre-commit ✓ py4j ✗ identify ✓ opentelemetry-util-http ✗ xmltodict ✗ babel ✗ cfgv ✓ traitlets ✓ jsonpointer ✗ importlib-resources ✓ jedi ✗ parso ✗ mpmath ✗ aiofiles ✗

Top 240 - 360

hf-xet ✗ uv ✗ nest-asyncio ✗ cython ✗ matplotlib-inline ✗ executing ✗ mypy ✗ watchfiles ✗ toml ✗ ply ✓ langchain-core ✓ opentelemetry-exporter-otlp ✗ asttokens ✗ gunicorn ✓ mcp ✓ uvloop ✗ docstring-parser ✗ typedload ✓ dbt-core ✓ python-json-logger ✗ black ✓ stack-data ✗ pure-eval ✗ sentry-sdk ✗ cachecontrol ✓ tiktoken ✓ grpc-google-iam-v1 ✗ webencodings ✓ markdown ✓ awswrangler ✓ botocore-stubs ✗ asgiref ✗ types-awscrt ✗ watchdog ✗ boto3-stubs ✗ types-s3transfer ✗ email-validator ✗ aioitertools ✓ dbt-adapters ✓ pkginfo ✗ pymysql ✓ ruamel-yaml-clib ✗ sse-starlette ✗ httpx-sse ✗ httptools ✓ typing-inspect ✗ google-cloud-aiplatform ✗ pyzmq ✗ debugpy ✗ dulwich ✓ durationpy ✓ termcolor ✓ databricks-sdk ✗ datasets ✗ jsonpath-ng ✗ msrest ✗ jsonpatch ✗ dbt-common ✓ multiprocess ✗ pycryptodome ✗ torch ✓ gcsfs ✓ pymongo ✗ isort ✓ poetry ✓ notebook ✗ execnet ✗ h2 ✗ hyperframe ✗ hpack ✗ pytest-xdist ✗ google-cloud-secret-manager ✗ mypy-boto3-s3 ✗ lz4 ✗ poetry-plugin-export ✓ requests-file ✓ mccabe ✗ jupyter-core ✓ cleo ✗ pysocks ✓ arrow ✗ datadog ✗ azure-common ✗ installer ✓ crashtest ✗ slack-sdk ✗ deepdiff ✗ pendulum ✗ pytest-mock ✗ xxhash ✗ invoke ✗ rfc3339-validator ✓ smart-open ✗ ipykernel ✓ jupyter-client ✓ scramp ✓ dataclasses-json ✗ future ✗ comm ✓ shapely ✓ simplejson ✗ wsproto ✓ tree-sitter ✓ tinycss2 ✓ narwhals ✗ py ✗ mistune ✗ loguru ✗ argcomplete ✗ pycodestyle ✓ litellm ✗ pygithub ✗ humanfriendly ✗ xlsxwriter ✗ safetensors ✗ snowflake-sqlalchemy ✗ typer-slim ✗ lark ✓ typeguard ✗ semver ✗

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.