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

Top 120 - 240

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

Top 240 - 360

traitlets ✓ sympy ✗ types-requests ✓ aiofiles ✗ google-cloud-batch ✗ ydb ✗ fastjsonschema ✗ transformers ✓ pytest-json-ctrf ✓ marshmallow ✓ backoff ✗ weaviate-client ✓ msal-extensions ✗ azure-storage-blob ✗ sqlparse ✗ jedi ✓ dbt-core ✓ parso ✗ setuptools-scm ✓ mpmath ✗ identify ✓ gunicorn ✓ pre-commit ✓ babel ✗ executing ✗ sglang ✓ durationpy ✓ cfgv ✓ google-analytics-admin ✗ matplotlib-inline ✗ cloudpickle ✗ sentry-sdk ✗ grpc-google-iam-v1 ✗ anthropic ✗ h2 ✗ asgiref ✗ tornado ✗ asttokens ✗ xmltodict ✗ google-cloud-compute ✗ webencodings ✓ nest-asyncio ✗ hyperframe ✗ databricks-sdk ✓ hpack ✗ google-cloud-kms ✗ authlib ✓ pytest-xdist ✗ gcsfs ✓ cython ✗ datasets ✓ ujson ✓ stack-data ✗ black ✓ pure-eval ✗ librt ✗ execnet ✗ langchain-core ✓ py4j ✗ jsonpatch ✗ pandas-stubs ✓ python-json-logger ✓ markdown ✓ cachecontrol ✓ importlib-resources ✓ google-cloud-dlp ✗ vcs-versioning ✓ pyzmq ✗ dacite ✗ pymongo ✗ watchdog ✗ google-cloud-speech ✗ debugpy ✗ typing-inspect ✗ joserfc ✗ google-cloud-pubsub ✗ llama-parse ✓ termcolor ✓ llama-cloud-services ✓ dbt-adapters ✓ google-cloud-texttospeech ✗ aioitertools ✓ iso8601 ✗ rich-toolkit ✓ tinycss2 ✓ pymysql ✓ pycryptodome ✗ isort ✓ lz4 ✗ pyhumps ✗ narwhals ✗ slack-sdk ✗ pytest-mock ✗ structlog ✗ dulwich ✓ jupyter-core ✓ msrest ✗ asyncpg ✗ ruamel-yaml-clib ✗ google-cloud-tasks ✗ dbt-common ✓ pkginfo ✗ loguru ✗ grpcio-health-checking ✗ axiom-py ✗ flatbuffers ✓ dataclasses-json ✗ awswrangler ✓ google-cloud-monitoring ✗ torch ✓ jupyter-client ✓ langsmith ✓ google-cloud-bigtable ✗ google-cloud-logging ✗ ipykernel ✓ deepdiff ✓ invoke ✗ typedload ✓ tree-sitter ✓ arrow ✗

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.