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

Top 120 - 240

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

Top 240 - 360

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

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.