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

Top 120 - 240

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

Top 240 - 360

databricks-sql-connector ✗ xxhash ✗ google-cloud-kms ✗ identify ✓ pre-commit ✓ poetry-core ✓ h2 ✗ traitlets ✓ google-cloud-compute ✓ paramiko ✗ google-analytics-admin ✓ hyperframe ✗ hpack ✗ cfgv ✓ sympy ✗ rich-toolkit ✓ gcsfs ✓ aiofiles ✗ jedi ✓ build ✓ backoff ✗ executing ✗ msal-extensions ✗ fastjsonschema ✗ tree-sitter ✓ types-requests ✓ parso ✗ anthropic ✗ azure-storage-blob ✗ sqlparse ✗ mpmath ✗ sentry-sdk ✗ cloudpickle ✗ marshmallow ✓ joserfc ✓ black ✓ authlib ✓ matplotlib-inline ✗ jsonpatch ✗ babel ✗ asttokens ✗ google-cloud-dlp ✓ gunicorn ✓ durationpy ✓ pandas-stubs ✓ asgiref ✗ databricks-sdk ✓ pytest-xdist ✗ cython ✗ webencodings ✓ google-cloud-texttospeech ✗ stack-data ✗ pure-eval ✗ grpc-google-iam-v1 ✗ datasets ✓ google-cloud-speech ✓ tornado ✗ setuptools-scm ✓ xmltodict ✗ execnet ✗ google-cloud-pubsub ✓ opentelemetry-instrumentation-threading ✓ python-json-logger ✓ dbt-adapters ✓ termcolor ✓ nest-asyncio ✗ py4j ✗ pymongo ✗ cachecontrol ✓ librt ✗ watchdog ✗ dbt-core ✓ importlib-resources ✓ markdown ✓ pyperclip ✗ mdit-py-plugins ✗ google-cloud-tasks ✗ aioitertools ✓ debugpy ✗ structlog ✗ isort ✓ pyzmq ✗ llama-parse ✓ snowflake-snowpark-python ✗ google-cloud-monitoring ✓ llama-cloud-services ✓ asyncpg ✗ typedload ✓ vcs-versioning ✓ slack-sdk ✗ grpcio-health-checking ✓ tinycss2 ✓ linkify-it-py ✓ cyclopts ✓ typing-inspect ✗ google-cloud-bigtable ✗ pytest-mock ✗ sphinx ✓ google-cloud-logging ✓ langsmith ✓ uc-micro-py ✓ pycryptodome ✗ tomli-w ✓ dulwich ✓ narwhals ✓ msrest ✗ pymysql ✓ lz4 ✗ jsonschema-path ✓ google-cloud-vision ✗ flatbuffers ✓ pytokens ✗ cfn-lint ✓ xlsxwriter ✗ awswrangler ✓ pypdf ✗ torch ✓ sqlalchemy-bigquery ✓ psycopg ✓ google-cloud-language ✗

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.