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

Top 120 - 240

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

Top 240 - 360

cfgv ✓ sympy ✗ msal-extensions ✗ google-cloud-kms ✓ h2 ✗ pyproject-hooks ✓ google-analytics-admin ✓ toml ✗ hyperframe ✗ joserfc ✓ gcsfs ✓ mpmath ✗ paramiko ✗ jsonpointer ✓ async-timeout ✓ google-cloud-compute ✓ aiofiles ✗ backoff ✗ narwhals ✓ authlib ✓ build ✓ sentry-sdk ✗ pytest-xdist ✗ fastjsonschema ✗ poetry-core ✓ traitlets ✓ cloudpickle ✗ execnet ✗ sqlparse ✗ google-cloud-dlp ✓ asgiref ✗ webencodings ✓ databricks-sdk ✓ azure-storage-blob ✗ google-cloud-texttospeech ✓ babel ✗ jedi ✓ executing ✗ datasets ✓ librt ✗ dbt-core ✓ google-cloud-speech ✓ parso ✗ cython ✗ jsonpatch ✗ ghapi ✓ grpc-google-iam-v1 ✗ python-json-logger ✓ gunicorn ✓ types-requests ✓ setuptools-scm ✗ tornado ✗ databricks-sql-connector ✗ dbt-adapters ✓ asttokens ✗ cachecontrol ✓ marshmallow ✓ matplotlib-inline ✗ google-cloud-pubsub ✓ xmltodict ✗ pandas-stubs ✓ stack-data ✗ markdown ✓ pure-eval ✗ vcs-versioning ✗ isort ✓ pymongo ✗ pypdf ✗ py4j ✗ psycopg ✓ kubernetes ✓ tinycss2 ✓ pymupdf ✓ asyncpg ✗ langsmith ✓ structlog ✓ google-cloud-tasks ✓ watchdog ✗ snowflake-snowpark-python ✓ pydantic-graph ✓ deprecation ✓ lz4 ✗ aioitertools ✓ pyzmq ✗ xlsxwriter ✗ pyperclip ✗ psycopg-binary ✓ importlib-resources ✓ google-cloud-logging ✓ python-docx ✗ opentelemetry-exporter-prometheus ✓ slack-sdk ✗ pytokens ✗ google-cloud-monitoring ✓ pycryptodome ✗ debugpy ✗ safetensors ✓ griffelib ✓ jsonschema-path ✓ torch ✓ nest-asyncio ✗ termcolor ✓ fastuuid ✗ pytest-mock ✗ pymysql ✓ cyclopts ✓ dulwich ✓ beartype ✓ llama-parse ✓ google-cloud-bigtable ✓ tomli-w ✓ llama-cloud-services ✓ jupyter-core ✓ dbt-common ✓ sphinx ✓ typedload ✓ rich-rst ✗ pathable ✓ jsonref ✓ google-cloud-vision ✓

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.