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

Top 120 - 240

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

Top 240 - 360

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

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.