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

Top 120 - 240

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

Top 240 - 360

google-analytics-admin ✗ authlib ✓ identify ✓ pre-commit ✓ pyproject-hooks ✓ traitlets ✓ zstandard ✗ h2 ✗ google-cloud-kms ✗ hyperframe ✗ cfgv ✓ google-cloud-compute ✗ sympy ✗ hpack ✗ aiofiles ✗ poetry-core ✓ gcsfs ✓ backoff ✗ jsonpointer ✓ executing ✗ jedi ✓ msal-extensions ✗ build ✓ parso ✗ azure-storage-blob ✗ fastjsonschema ✗ sqlparse ✗ mpmath ✗ anthropic ✗ marshmallow ✓ rich-toolkit ✓ cloudpickle ✗ matplotlib-inline ✗ types-requests ✓ datasets ✓ joserfc ✗ black ✓ asttokens ✗ google-cloud-dlp ✗ sentry-sdk ✗ gunicorn ✓ babel ✗ durationpy ✓ pandas-stubs ✓ databricks-sdk ✓ pure-eval ✗ stack-data ✗ grpc-google-iam-v1 ✗ setuptools-scm ✓ google-cloud-speech ✗ cython ✗ pytest-xdist ✗ webencodings ✓ asgiref ✗ google-cloud-texttospeech ✗ python-json-logger ✓ xmltodict ✗ cyclopts ✓ dbt-adapters ✓ termcolor ✓ py4j ✗ execnet ✗ google-cloud-pubsub ✗ tree-sitter ✓ pymongo ✗ tornado ✗ jsonpatch ✗ dbt-core ✓ nest-asyncio ✗ llama-parse ✓ cachecontrol ✓ importlib-resources ✓ llama-cloud-services ✓ watchdog ✗ librt ✗ markdown ✓ jsonschema-path ✓ vcs-versioning ✓ google-cloud-tasks ✗ rich-rst ✗ aioitertools ✓ google-cloud-monitoring ✗ opentelemetry-instrumentation-threading ✓ structlog ✗ pyzmq ✗ flatbuffers ✓ asyncpg ✗ google-cloud-bigtable ✗ isort ✓ typing-inspect ✗ pathable ✓ pyperclip ✗ snowflake-snowpark-python ✗ jsonref ✓ pymysql ✓ torch ✓ tinycss2 ✓ awswrangler ✓ beartype ✓ google-cloud-vision ✗ sphinx ✓ pycryptodome ✗ msrest ✗ google-cloud-logging ✗ debugpy ✗ pymupdf ✓ mdit-py-plugins ✗ pytest-mock ✗ slack-sdk ✗ sqlalchemy-bigquery ✓ fastmcp ✓ lz4 ✗ google-cloud-language ✗ grpcio-health-checking ✗ google-cloud-videointelligence ✗ langsmith ✓ typedload ✓ narwhals ✗ google-cloud-workflows ✗ pytokens ✗

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.