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

Top 120 - 240

more-itertools ✓ oauthlib ✗ opentelemetry-exporter-otlp-proto-common ✓ proto-plus ✓ langchain ✓ openpyxl ✗ opentelemetry-exporter-otlp-proto-grpc ✓ et-xmlfile ✗ wcwidth ✗ multiprocess ✗ editables ✗ awscli ✓ grpcio-tools ✓ requests-toolbelt ✗ python-discovery ✗ dnspython ✓ coverage ✓ rsa ✗ gitpython ✗ mypy-extensions ✗ networkx ✓ msgpack ✓ smmap ✗ google-genai ✓ sortedcontainers ✓ sse-starlette ✓ ruff ✗ mcp ✓ decorator ✗ hf-xet ✗ werkzeug ✓ pyopenssl ✗ redis ✓ psycopg2-binary ✗ gitdb ✗ google-cloud-storage ✓ fonttools ✓ matplotlib ✓ pytest-json-ctrf ✓ keyring ✓ docstring-parser ✗ pytest-asyncio ✓ prompt-toolkit ✗ jaraco-classes ✓ pynacl ✗ jeepney ✓ secretstorage ✓ websocket-client ✗ pydantic-ai-slim ✓ kiwisolver ✓ docutils ✗ azure-core ✓ tokenizers ✓ tiktoken ✓ scikit-learn ✓ isodate ✗ contourpy ✓ jaraco-functools ✓ tabulate ✓ joblib ✗ azure-identity ✗ jaraco-context ✓ httptools ✓ dill ✗ pytest-cov ✗ docker ✗ uvloop ✗ defusedxml ✗ itsdangerous ✓ email-validator ✗ orjson ✓ ptyprocess ✓ google-cloud-core ✓ flask ✓ pexpect ✓ chardet ✓ cycler ✗ bcrypt ✗ opentelemetry-instrumentation-requests ✓ nodeenv ✗ msal ✗ alembic ✓ async-timeout ✓ ruamel-yaml ✗ httpx-sse ✗ opentelemetry-util-http ✓ deprecated ✗ toml ✗ google-resumable-media ✓ threadpoolctl ✗ xxhash ✗ tzlocal ✗ mako ✗ google-api-python-client ✗ ipython ✓ google-crc32c ✓ identify ✓ pre-commit ✓ blinker ✓ cfgv ✓ snowflake-connector-python ✓ weaviate-client ✓ rapidfuzz ✓ uritemplate ✓ opentelemetry-exporter-otlp ✓ prometheus-client ✗ uv ✗ pyproject-hooks ✓ google-auth-httplib2 ✓ mypy ✓ h2 ✗ hyperframe ✗ hpack ✗ transformers ✓ ydb ✗ zstandard ✗ asn1crypto ✗ httplib2 ✓ langchain-core ✓ poetry-core ✓

Top 240 - 360

traitlets ✓ google-auth-oauthlib ✓ google-cloud-bigquery ✗ anthropic ✗ build ✓ browser-use ✓ jsonpointer ✓ sympy ✗ fastjsonschema ✗ executing ✗ jedi ✓ google-cloud-secret-manager ✓ parso ✗ black ✓ aiofiles ✗ mpmath ✗ sentry-sdk ✗ paramiko ✗ matplotlib-inline ✗ backoff ✗ msal-extensions ✗ asttokens ✗ sqlparse ✗ google-cloud-batch ✓ pydantic-graph ✓ google-cloud-aiplatform ✓ azure-storage-blob ✗ authlib ✓ cloudpickle ✗ asgiref ✗ stack-data ✗ pure-eval ✗ grpc-google-iam-v1 ✗ pytest-xdist ✗ joserfc ✓ narwhals ✓ types-requests ✓ webencodings ✓ gunicorn ✓ babel ✗ google-cloud-kms ✗ kubernetes ✓ google-cloud-compute ✓ termcolor ✓ marshmallow ✓ execnet ✗ datasets ✓ cachecontrol ✓ python-json-logger ✓ gcsfs ✓ google-analytics-admin ✓ opentelemetry-instrumentation-threading ✓ jsonpatch ✗ databricks-sdk ✓ cython ✗ xmltodict ✗ tornado ✗ tree-sitter ✓ librt ✗ setuptools-scm ✓ watchdog ✗ markdown ✓ google-cloud-dlp ✓ pymongo ✗ aioitertools ✓ mdit-py-plugins ✗ asyncpg ✗ isort ✓ pandas-stubs ✓ dbt-adapters ✓ google-cloud-pubsub ✓ google-cloud-speech ✓ google-cloud-texttospeech ✗ dulwich ✓ pytest-mock ✗ importlib-resources ✓ tinycss2 ✓ py4j ✗ databricks-sql-connector ✗ structlog ✓ linkify-it-py ✓ nest-asyncio ✗ pkginfo ✗ debugpy ✗ dbt-core ✓ uc-micro-py ✓ pypdf ✗ pyperclip ✗ xlsxwriter ✗ lz4 ✗ typedload ✓ pyzmq ✗ vcs-versioning ✓ jsonschema-path ✓ fastuuid ✗ langsmith ✓ cyclopts ✓ llama-parse ✓ llama-cloud-services ✓ flatbuffers ✓ pytokens ✗ python-docx ✗ poetry ✓ typing-inspect ✗ ruamel-yaml-clib ✗ psycopg ✓ rich-toolkit ✓ cbor2 ✓ slack-sdk ✗ safetensors ✓ types-toml ✓ beartype ✓ pymupdf ✓ pathable ✓ installer ✓ cleo ✗ crashtest ✗ pycryptodome ✗ torch ✓ jsonref ✓

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.