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

Top 120 - 240

et-xmlfile ✗ opentelemetry-proto ✗ werkzeug ✓ mypy-extensions ✗ coverage ✓ distro ✗ langchain ✓ google-cloud-storage ✓ networkx ✓ watchfiles ✗ msgpack ✓ litellm ✗ pyopenssl ✗ jiter ✗ dnspython ✓ mcp ✓ google-genai ✓ huggingface-hub ✓ opentelemetry-exporter-otlp-proto-http ✗ sglang ✓ psycopg2-binary ✗ wcwidth ✗ smmap ✗ textual ✗ pynacl ✗ ptyprocess ✓ pexpect ✓ fonttools ✓ decorator ✗ gitpython ✗ redis ✓ tabulate ✓ sortedcontainers ✓ python-discovery ✗ flask ✓ sse-starlette ✓ matplotlib ✓ docker ✗ keyring ✓ isodate ✗ opentelemetry-exporter-otlp-proto-common ✗ scikit-learn ✓ ruff ✗ kiwisolver ✓ async-timeout ✓ google-cloud-core ✗ gitdb ✗ jaraco-classes ✓ joblib ✗ opentelemetry-exporter-otlp-proto-grpc ✗ azure-identity ✗ secretstorage ✓ jeepney ✓ opentelemetry-instrumentation ✗ bcrypt ✗ contourpy ✓ itsdangerous ✓ azure-core ✗ prompt-toolkit ✗ pytest-cov ✗ msal ✗ editables ✗ threadpoolctl ✗ jaraco-context ✓ types-requests ✓ google-resumable-media ✗ zstandard ✗ alembic ✓ snowflake-connector-python ✗ jaraco-functools ✓ google-crc32c ✓ ruamel-yaml ✗ defusedxml ✗ deprecated ✗ orjson ✓ docstring-parser ✗ blinker ✓ chardet ✓ kubernetes ✗ uvloop ✗ rapidfuzz ✓ cycler ✗ hf-xet ✗ dill ✗ multiprocess ✗ email-validator ✗ tzlocal ✗ pytest-asyncio ✓ poetry-core ✓ httpx-sse ✗ google-api-python-client ✗ uv ✗ google-cloud-aiplatform ✗ mako ✗ asn1crypto ✗ backoff ✗ pyproject-hooks ✓ sympy ✗ httptools ✓ prometheus-client ✗ google-auth-oauthlib ✗ mpmath ✗ google-cloud-bigquery ✗ tokenizers ✗ toml ✗ build ✗ ipython ✓ uritemplate ✓ google-auth-httplib2 ✗ paramiko ✗ nodeenv ✗ tiktoken ✓ setuptools-scm ✓ marshmallow ✓ mypy ✓ httplib2 ✓ fastjsonschema ✗ sqlparse ✗ opentelemetry-exporter-otlp ✗ cloudpickle ✗

Top 240 - 360

msal-extensions ✗ identify ✓ tree-sitter ✓ gunicorn ✓ jsonpointer ✓ opentelemetry-instrumentation-requests ✗ opentelemetry-util-http ✗ pre-commit ✓ pydantic-ai-slim ✓ transformers ✓ pytest-xdist ✗ cfgv ✓ grpc-google-iam-v1 ✗ traitlets ✓ babel ✗ parso ✗ aiofiles ✗ durationpy ✓ jedi ✗ execnet ✗ executing ✗ tornado ✗ google-cloud-secret-manager ✗ azure-storage-blob ✗ databricks-sdk ✗ xxhash ✗ asttokens ✗ cython ✗ xmltodict ✗ asgiref ✗ matplotlib-inline ✗ h2 ✗ black ✓ hyperframe ✗ hpack ✗ google-cloud-batch ✗ langchain-core ✓ importlib-resources ✓ pure-eval ✗ stack-data ✗ termcolor ✓ markdown ✓ vcs-versioning ✓ sentry-sdk ✗ py4j ✗ authlib ✗ webencodings ✓ cachecontrol ✓ google-analytics-admin ✗ python-json-logger ✓ nest-asyncio ✗ weaviate-client ✓ anthropic ✗ typing-inspect ✗ datasets ✓ jsonpatch ✗ dbt-core ✓ tree-sitter-languages ✓ watchdog ✗ dbt-adapters ✓ pymongo ✗ typedload ✓ grpcio-health-checking ✗ debugpy ✗ gcsfs ✓ aioitertools ✓ pytest-mock ✗ pandas-stubs ✓ dulwich ✓ pkginfo ✗ librt ✗ dataclasses-json ✗ pyzmq ✗ pymysql ✓ google-cloud-compute ✗ jsonschema-path ✓ slack-sdk ✗ databricks-sql-connector ✗ isort ✓ jsonpath-ng ✓ pycryptodome ✗ lz4 ✗ awswrangler ✓ google-cloud-kms ✗ msrest ✗ flatbuffers ✓ deepdiff ✓ narwhals ✗ langsmith ✓ dbt-common ✓ poetry ✓ mccabe ✗ tinycss2 ✓ pygithub ✗ pyee ✗ torch ✓ pyperclip ✗ pydantic-graph ✓ ruamel-yaml-clib ✗ pymupdf ✓ rfc3339-validator ✓ pathable ✓ argcomplete ✗ google-cloud-speech ✗ google-cloud-dlp ✗ invoke ✗ semver ✗ rich-toolkit ✓ notebook ✗ xlsxwriter ✗ loguru ✗ cleo ✗ google-cloud-monitoring ✗ crashtest ✗ sphinx ✓ text-unidecode ✓ pendulum ✗ installer ✓ structlog ✗ python-slugify ✗

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.