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

Top 120 - 240

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

Top 240 - 360

zstandard ✗ prometheus-client ✗ pyproject-hooks ✓ uv ✗ anthropic ✗ google-analytics-admin ✓ mypy ✓ google-cloud-kms ✓ google-cloud-compute ✓ executing ✗ jedi ✓ jsonpointer ✓ parso ✗ poetry-core ✓ sympy ✗ gcsfs ✓ authlib ✓ backoff ✗ aiofiles ✗ matplotlib-inline ✗ asttokens ✗ fastjsonschema ✗ paramiko ✗ mpmath ✗ build ✓ cloudpickle ✗ joserfc ✓ google-cloud-aiplatform ✓ sentry-sdk ✗ stack-data ✗ pure-eval ✗ black ✓ google-cloud-dlp ✓ databricks-sdk ✓ msal-extensions ✗ sqlparse ✗ opentelemetry-instrumentation-threading ✓ webencodings ✓ asgiref ✗ datasets ✓ google-cloud-texttospeech ✓ babel ✗ narwhals ✓ azure-storage-blob ✗ google-cloud-speech ✓ pytest-xdist ✗ gunicorn ✓ termcolor ✓ pandas-stubs ✓ tornado ✗ grpc-google-iam-v1 ✗ execnet ✗ pydantic-graph ✓ google-cloud-pubsub ✓ marshmallow ✓ cachecontrol ✓ python-json-logger ✓ jsonpatch ✗ tree-sitter ✓ types-requests ✓ cython ✗ setuptools-scm ✗ databricks-sql-connector ✗ xmltodict ✗ kubernetes ✓ lmnr ✓ pypdf ✗ pymongo ✗ markdown ✓ isort ✓ dbt-adapters ✓ py4j ✗ librt ✗ tinycss2 ✓ python-docx ✗ snowflake-snowpark-python ✓ dbt-core ✓ jsonschema-path ✓ aioitertools ✓ pyperclip ✗ google-cloud-tasks ✓ asyncpg ✗ fastuuid ✗ debugpy ✗ watchdog ✗ pyzmq ✗ langsmith ✓ google-cloud-monitoring ✓ xlsxwriter ✗ google-cloud-logging ✓ cyclopts ✓ llama-cloud-services ✓ llama-parse ✓ vcs-versioning ✗ pathable ✓ importlib-resources ✓ dulwich ✓ griffelib ✓ beartype ✓ pytest-mock ✗ flatbuffers ✓ structlog ✓ nest-asyncio ✗ opentelemetry-exporter-prometheus ✓ jsonref ✓ pytest-timeout ✗ pytokens ✗ ghapi ✓ lz4 ✗ mdit-py-plugins ✗ psycopg ✓ pkginfo ✗ google-cloud-vision ✓ google-cloud-bigtable ✓ pymupdf ✓ torch ✓ sphinx ✓ cfn-lint ✓ pymysql ✓ pycryptodome ✗

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.