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

Top 120 - 240

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

Top 240 - 360

paramiko ✗ google-cloud-aiplatform ✓ opentelemetry-exporter-otlp ✗ transformers ✓ httplib2 ✓ backoff ✗ pydantic-graph ✓ executing ✗ sympy ✗ h2 ✗ hyperframe ✗ hpack ✗ marshmallow ✓ fastjsonschema ✗ aiofiles ✗ google-cloud-secret-manager ✗ sqlparse ✗ matplotlib-inline ✗ asttokens ✗ setuptools-scm ✓ msal-extensions ✗ datasets ✓ mpmath ✗ durationpy ✓ gunicorn ✓ stack-data ✗ pure-eval ✗ babel ✗ grpc-google-iam-v1 ✗ azure-storage-blob ✗ cloudpickle ✗ authlib ✓ anthropic ✗ asgiref ✗ google-cloud-batch ✗ tornado ✗ sentry-sdk ✗ xmltodict ✗ webencodings ✓ weaviate-client ✓ ydb ✗ pytest-xdist ✗ nest-asyncio ✗ markdown ✓ dbt-core ✓ pytest-json-ctrf ✓ termcolor ✓ cython ✗ jsonpatch ✗ black ✓ execnet ✗ google-analytics-admin ✗ databricks-sdk ✓ librt ✗ langchain-core ✓ py4j ✗ vcs-versioning ✓ google-cloud-compute ✗ cachecontrol ✓ importlib-resources ✓ python-json-logger ✓ tree-sitter ✓ joserfc ✗ gcsfs ✓ google-cloud-kms ✗ watchdog ✗ debugpy ✗ pyzmq ✗ typing-inspect ✗ pymongo ✗ pandas-stubs ✓ llama-parse ✓ llama-cloud-services ✓ google-cloud-pubsub ✗ aioitertools ✓ mdit-py-plugins ✗ typedload ✓ google-cloud-dlp ✗ dbt-adapters ✓ google-cloud-speech ✗ pyperclip ✗ tinycss2 ✓ pyee ✗ slack-sdk ✗ lz4 ✗ jsonschema-path ✓ pycryptodome ✗ torch ✓ linkify-it-py ✓ pytest-mock ✗ isort ✓ flatbuffers ✓ dulwich ✓ pymysql ✓ uc-micro-py ✓ pkginfo ✗ dataclasses-json ✗ playwright ✗ ruamel-yaml-clib ✗ jupyter-core ✓ google-cloud-texttospeech ✗ xlsxwriter ✗ structlog ✗ msrest ✗ grpcio-health-checking ✗ dbt-common ✓ narwhals ✗ asyncpg ✗ langsmith ✓ cyclopts ✓ semver ✗ deepdiff ✓ rich-toolkit ✓ awswrangler ✓ pathable ✓ jupyter-client ✓ loguru ✗ rfc3339-validator ✓ pymupdf ✓ invoke ✗

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.