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

Top 120 - 240

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

Top 240 - 360

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

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.