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

Top 120 - 240

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

Top 240 - 360

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

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.