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

Top 120 - 240

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

Top 240 - 360

ipython ✓ asn1crypto ✗ mpmath ✗ opentelemetry-instrumentation-threading ✓ sentry-sdk ✗ google-cloud-batch ✓ pytest-xdist ✗ jsonpointer ✓ backoff ✗ aiofiles ✗ async-timeout ✓ pyproject-hooks ✓ black ✓ msal-extensions ✗ execnet ✗ paramiko ✗ authlib ✓ fastjsonschema ✓ narwhals ✓ joserfc ✓ poetry-core ✓ google-cloud-kms ✓ asgiref ✓ gcsfs ✓ google-analytics-admin ✓ traitlets ✓ pydantic-ai-slim ✓ google-cloud-compute ✓ build ✓ sqlparse ✗ datasets ✓ cloudpickle ✗ webencodings ✓ executing ✗ sglang ✓ azure-storage-blob ✗ setuptools-scm ✗ gunicorn ✓ databricks-sdk ✓ babel ✗ google-cloud-dlp ✓ asttokens ✗ grpc-google-iam-v1 ✗ jsonpatch ✗ jedi ✓ parso ✗ librt ✗ google-cloud-texttospeech ✓ cachecontrol ✓ matplotlib-inline ✗ pypdf ✗ vcs-versioning ✗ google-cloud-speech ✓ tornado ✗ cython ✗ types-requests ✓ xmltodict ✗ marshmallow ✓ dbt-adapters ✓ stack-data ✗ pure-eval ✗ markdown ✓ langsmith ✓ python-docx ✗ google-cloud-pubsub ✓ pymongo ✗ psycopg ✓ isort ✓ kubernetes ✓ databricks-sql-connector ✓ python-json-logger ✓ asyncpg ✗ xlsxwriter ✗ pydantic-graph ✓ tinycss2 ✓ py4j ✗ structlog ✓ watchdog ✗ psycopg-binary ✓ pyperclip ✗ termcolor ✓ aioitertools ✓ opentelemetry-exporter-prometheus ✓ pymupdf ✓ google-cloud-logging ✓ pytest-mock ✗ google-cloud-tasks ✓ pyzmq ✗ lz4 ✗ slack-sdk ✗ tomli-w ✓ dbt-core ✓ flatbuffers ✓ snowflake-snowpark-python ✓ debugpy ✗ jsonschema-path ✓ dulwich ✓ importlib-resources ✓ nest-asyncio ✗ pycryptodome ✗ google-cloud-monitoring ✓ deprecation ✓ llama-parse ✓ llama-cloud-services ✓ beartype ✓ safetensors ✓ torch ✓ pytokens ✗ pymysql ✓ griffelib ✓ cyclopts ✓ opentelemetry-instrumentation-fastapi ✓ croniter ✗ mdit-py-plugins ✗ fastuuid ✗ pkginfo ✗ opentelemetry-instrumentation-asgi ✓ pathable ✓ playwright ✓ pytest-timeout ✗

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.