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

Top 120 - 240

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

Top 240 - 360

mpmath ✗ black ✓ deprecated ✗ httplib2 ✓ sentry-sdk ✗ asn1crypto ✗ rapidfuzz ✓ datasets ✓ async-timeout ✓ google-cloud-secret-manager ✓ jsonpointer ✓ msal-extensions ✗ narwhals ✓ aiofiles ✗ pypdf ✗ databricks-sdk ✓ ipython ✓ pytest-xdist ✗ cloudpickle ✗ execnet ✗ sqlparse ✓ pydantic-ai-slim ✓ paramiko ✗ awscli ✓ fastjsonschema ✓ librt ✗ webencodings ✓ traitlets ✓ asgiref ✓ grpc-google-iam-v1 ✓ psycopg ✓ google-cloud-batch ✓ gcsfs ✓ authlib ✓ pyproject-hooks ✓ gunicorn ✓ poetry-core ✓ joserfc ✓ azure-storage-blob ✗ isort ✓ setuptools-scm ✗ psycopg-binary ✓ jsonpatch ✗ executing ✗ babel ✗ build ✓ vcs-versioning ✗ google-cloud-kms ✓ asttokens ✗ google-cloud-aiplatform ✓ jedi ✓ parso ✗ google-analytics-admin ✓ markdown ✓ pydantic-graph ✓ langsmith ✓ google-cloud-compute ✓ cachecontrol ✓ cython ✗ asyncpg ✗ marshmallow ✓ matplotlib-inline ✗ xmltodict ✗ tornado ✗ python-json-logger ✓ stack-data ✗ pure-eval ✗ python-docx ✗ watchdog ✗ safetensors ✓ structlog ✓ google-cloud-dlp ✓ google-cloud-speech ✓ tinycss2 ✓ playwright ✓ google-cloud-texttospeech ✓ google-cloud-pubsub ✓ fastuuid ✗ lz4 ✗ kubernetes ✓ pymupdf ✓ termcolor ✓ pytokens ✗ dbt-adapters ✓ google-cloud-logging ✓ pyee ✓ xlsxwriter ✗ aioitertools ✓ py4j ✗ pymysql ✓ pyzmq ✓ pymongo ✗ nest-asyncio ✗ flatbuffers ✓ pytest-timeout ✗ pytest-mock ✗ brotli ✓ wsproto ✓ debugpy ✗ croniter ✗ reportlab ✓ slack-sdk ✗ loguru ✗ opentelemetry-instrumentation-fastapi ✓ deprecation ✓ tomli-w ✓ google-cloud-tasks ✓ weaviate-client ✓ pycryptodome ✗ opentelemetry-exporter-prometheus ✓ torch ✓ google-cloud-monitoring ✓ cbor2 ✓ sqlglot ✓ mdit-py-plugins ✗ dbt-core ✓ jupyter-core ✓ llama-cloud-services ✓ llama-parse ✓ importlib-resources ✓

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.