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. 249 green packages (69.2%) have dropped support for Python 3.9;
  2. 111 uncolored packages (30.8%) 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 ✓ typing-extensions ✗ packaging ✗ certifi ✗ idna ✗ urllib3 ✓ charset-normalizer ✗ requests ✓ cryptography ✗ cffi ✓ pluggy ✓ python-dateutil ✓ pycparser ✓ pyyaml ✗ pydantic ✓ pygments ✗ pydantic-core ✓ numpy ✓ click ✓ anyio ✓ botocore ✓ setuptools ✓ six ✓ annotated-types ✓ typing-inspection ✓ h11 ✗ pytest ✓ iniconfig ✓ attrs ✗ markupsafe ✓ httpx ✗ httpcore ✗ tzdata ✓ pyjwt ✗ protobuf ✓ pandas ✓ jinja2 ✓ python-dotenv ✓ pillow ✓ opentelemetry-api ✓ s3transfer ✓ starlette ✓ uvicorn ✓ aiobotocore ✓ rpds-py ✓ jsonschema ✓ platformdirs ✓ pathspec ✗ pip ✓ referencing ✓ jsonschema-specifications ✗ filelock ✓ tomlkit ✗ jmespath ✗ fsspec ✓ markdown-it-py ✓ multidict ✓ rich ✗ yarl ✓ aiohttp ✓ mdurl ✗ annotated-doc ✗ pytz ✗ propcache ✓ websockets ✓ fastapi ✓ python-multipart ✓ frozenlist ✗ sniffio ✓ googleapis-common-protos ✓ aiosignal ✓ aiohappyeyeballs ✓ pydantic-settings ✓ pyasn1 ✗ tqdm ✗ lxml ✗ pyarrow ✓ truststore ✓ httpx2 ✓ httpcore2 ✓ wrapt ✗ trove-classifiers ✓ jiter ✓ google-auth ✓ hatchling ✓ tenacity ✓ ruff ✗ sqlalchemy ✓ pyasn1-modules ✗ greenlet ✓ psutil ✓ openai ✓ scipy ✓ pyparsing ✗ grpcio-status ✓ zipp ✓ grpcio ✓ openpyxl ✗ watchfiles ✓ importlib-metadata ✓ regex ✓ et-xmlfile ✗ wheel ✗ opentelemetry-semantic-conventions ✓ sse-starlette ✓ google-api-core ✓ soupsieve ✓ opentelemetry-sdk ✓ distro ✗ mcp ✓ coverage ✓ beautifulsoup4 ✓ shellingham ✗ werkzeug ✓ mypy-extensions ✓ huggingface-hub ✓ typer ✓ editables ✗ uvloop ✗ docstring-parser ✗

Top 120 - 240

dnspython ✓ itsdangerous ✓ opentelemetry-proto ✓ proto-plus ✓ wcwidth ✗ pytest-asyncio ✓ httptools ✓ colorama ✗ defusedxml ✗ networkx ✓ oauthlib ✗ requests-oauthlib ✗ s3fs ✓ cachetools ✓ opentelemetry-exporter-otlp-proto-common ✓ tomli ✓ flask ✓ virtualenv ✗ sortedcontainers ✓ hf-xet ✗ fonttools ✓ blinker ✓ pytest-cov ✗ redis ✓ more-itertools ✓ psycopg2-binary ✓ xlsxwriter ✗ opentelemetry-exporter-otlp-proto-http ✓ msgpack ✓ distlib ✗ exceptiongroup ✓ mako ✓ alembic ✓ psycopg ✓ prompt-toolkit ✓ requests-toolbelt ✗ tiktoken ✓ psycopg-binary ✓ anthropic ✓ tokenizers ✓ scikit-learn ✓ orjson ✓ tabulate ✓ cloudpickle ✗ execnet ✗ pytest-xdist ✗ httpx-sse ✗ threadpoolctl ✓ mypy ✓ pypdf ✓ isodate ✗ hpack ✓ h2 ✓ email-validator ✗ python-discovery ✗ hyperframe ✗ uv ✗ nodeenv ✓ rsa ✗ python-pptx ✗ joblib ✓ tzlocal ✓ matplotlib ✓ zstandard ✗ azure-core ✓ websocket-client ✓ pyopenssl ✗ opentelemetry-instrumentation ✓ kiwisolver ✓ google-cloud-core ✓ ruamel-yaml ✗ pymupdf ✓ bcrypt ✗ msal ✗ pynacl ✗ grpcio-tools ✓ contourpy ✓ prometheus-client ✗ cycler ✗ google-cloud-bigquery ✓ librt ✗ sympy ✗ chardet ✓ google-cloud-storage ✓ google-genai ✓ mpmath ✗ google-crc32c ✓ jsonpointer ✓ langchain-core ✓ google-resumable-media ✓ dill ✗ langchain ✓ xxhash ✗ identify ✓ pre-commit ✓ sentry-sdk ✗ cfgv ✓ asgiref ✓ jaraco-functools ✓ keyring ✓ docker ✗ backoff ✗ uritemplate ✓ deprecated ✓ python-docx ✗ jaraco-classes ✓ flatbuffers ✓ decorator ✗ jeepney ✓ mcp-types ✓ narwhals ✓ toml ✗ onnxruntime ✓ gitpython ✗ secretstorage ✓ jaraco-context ✓ ptyprocess ✓ asyncpg ✗ webencodings ✓ azure-identity ✓

Top 240 - 360

traitlets ✓ aiofiles ✗ opentelemetry-util-http ✓ authlib ✓ httplib2 ✓ asn1crypto ✗ google-api-python-client ✓ smmap ✗ docutils ✗ gitdb ✗ google-auth-httplib2 ✓ rapidfuzz ✓ pexpect ✓ msal-extensions ✗ playwright ✓ transformers ✓ jsonpatch ✓ executing ✗ pyee ✓ joserfc ✓ sqlparse ✓ fastjsonschema ✓ opentelemetry-exporter-otlp-proto-grpc ✓ babel ✗ gunicorn ✓ google-auth-oauthlib ✓ markdown ✓ pytest-json-ctrf ✓ pytest-timeout ✗ structlog ✓ brotli ✓ async-timeout ✓ tornado ✓ ipython ✓ pypdfium2 ✓ pyzmq ✓ grpc-google-iam-v1 ✓ jedi ✓ tinycss2 ✓ parso ✗ asttokens ✗ xmltodict ✗ opentelemetry-exporter-otlp-common ✓ paramiko ✗ matplotlib-inline ✗ watchdog ✓ ast-serialize ✗ snowflake-connector-python ✓ azure-storage-blob ✓ pure-eval ✗ black ✓ stack-data ✗ cachecontrol ✓ python-json-logger ✓ griffelib ✓ cedarpy ✓ aioitertools ✓ jupyter-core ✓ croniter ✗ opentelemetry-exporter-http-transport ✓ pyproject-hooks ✓ safetensors ✓ debugpy ✓ cython ✗ types-pyyaml ✓ litellm ✓ build ✓ isort ✓ sqlglot ✓ nbformat ✓ lark ✓ langsmith ✓ reportlab ✓ jupyter-client ✓ awscli ✓ google-cloud-aiplatform ✓ tomli-w ✓ slack-sdk ✗ marshmallow ✓ nest-asyncio ✗ opentelemetry-instrumentation-asgi ✓ multiprocess ✗ pytest-mock ✓ pdfminer-six ✓ databricks-sdk ✓ uuid-utils ✓ kubernetes ✓ opentelemetry-instrumentation-fastapi ✓ xlrd ✗ awswrangler ✓ lz4 ✗ pymysql ✓ beartype ✓ argon2-cffi-bindings ✓ loguru ✗ argon2-cffi ✗ cbor2 ✓ fastuuid ✗ pycryptodome ✗ pytokens ✗ termcolor ✓ rfc3339-validator ✓ types-requests ✓ ipython-pygments-lexers ✓ text-unidecode ✓ shapely ✓ cyclopts ✓ pathable ✓ jsonschema-path ✓ duckdb ✓ typedload ✓ graphql-core ✓ deprecation ✓ jsonref ✓ poetry-core ✓ pdfplumber ✓ python-slugify ✓ pyperclip ✗ setuptools-scm ✗ opentelemetry-instrumentation-requests ✓

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.