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

Top 120 - 240

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

Top 240 - 360

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

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.