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

Top 120 - 240

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

Top 240 - 360

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

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.