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 ✗ markupsafe ✓ iniconfig ✓ platformdirs ✓ httpcore ✗ typing-inspection ✗ s3fs ✓ jmespath ✗ jinja2 ✓ pyjwt ✗ pip ✗ importlib-metadata ✓ python-dotenv ✓ filelock ✓ zipp ✓ aiohttp ✗ rich ✗ pytz ✗ wheel ✗ pathspec ✗ googleapis-common-protos ✗ jsonschema ✓ pyasn1 ✗ markdown-it-py ✓ yarl ✓ uvicorn ✓ multidict ✗ tzdata ✓ google-auth ✗ mdurl ✗ starlette ✓ virtualenv ✗ google-api-core ✗ tqdm ✗ pillow ✓ rpds-py ✓ referencing ✓ frozenlist ✗ propcache ✗ fastapi ✓ jsonschema-specifications ✗ grpcio ✗ aiosignal ✓ colorama ✗ pyasn1-modules ✗ awscli ✗ greenlet ✓ requests-oauthlib ✗ annotated-doc ✗ aiohappyeyeballs ✗ opentelemetry-api ✗ wrapt ✗ scipy ✓ sqlalchemy ✗ pyarrow ✓ tomli ✓ tenacity ✓ opentelemetry-semantic-conventions ✗ pyparsing ✗ trove-classifiers ✓ opentelemetry-sdk ✗ oauthlib ✗ beautifulsoup4 ✓ psutil ✓ sniffio ✓ shellingham ✗ python-multipart ✓ rsa ✗ soupsieve ✗ regex ✓ websockets ✓ cachetools ✓ lxml ✗ exceptiongroup ✓ grpcio-tools ✓ more-itertools ✓ requests-toolbelt ✗ distlib ✗ typer ✓ tomlkit ✗ proto-plus ✗ hatchling ✓ pydantic-settings ✓ websocket-client ✗ docutils ✗ openai ✗ openpyxl ✗

Top 120 - 240

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

Top 240 - 360

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

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.