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

Top 120 - 240

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

Top 240 - 360

httplib2 ✓ tiktoken ✓ pytest-xdist ✗ jedi ✗ executing ✗ cloudpickle ✗ marshmallow ✓ authlib ✓ tornado ✗ sqlparse ✗ opensearch-py ✓ opentelemetry-util-http ✗ execnet ✗ opentelemetry-instrumentation-requests ✗ identify ✓ matplotlib-inline ✗ asttokens ✗ msal-extensions ✗ transformers ✓ cython ✗ pre-commit ✓ cfgv ✓ jsonpointer ✓ babel ✗ gunicorn ✓ google-cloud-secret-manager ✗ xxhash ✗ grpc-google-iam-v1 ✗ pure-eval ✗ stack-data ✗ aiofiles ✗ azure-storage-blob ✗ h2 ✗ requests-aws4auth ✗ hyperframe ✗ hpack ✗ durationpy ✓ google-cloud-batch ✗ xmltodict ✗ asgiref ✗ nest-asyncio ✗ py4j ✗ markdown ✓ weaviate-client ✓ black ✓ pyee ✗ importlib-resources ✓ sentry-sdk ✗ databricks-sdk ✓ termcolor ✓ langchain-core ✓ webencodings ✓ google-analytics-admin ✗ pytest-json-ctrf ✓ events ✓ vcs-versioning ✓ python-json-logger ✓ playwright ✗ anthropic ✗ dbt-core ✓ debugpy ✗ datasets ✓ cachecontrol ✓ watchdog ✗ gcsfs ✓ pyzmq ✗ dbt-adapters ✓ jsonschema-path ✓ google-cloud-compute ✗ typing-inspect ✗ jsonpatch ✗ google-cloud-kms ✗ pymongo ✗ librt ✗ ydb ✗ pandas-stubs ✓ ujson ✓ pathable ✓ aioitertools ✓ pytest-mock ✗ pyperclip ✗ databricks-sql-connector ✗ google-cloud-dlp ✗ opensearch-protobufs ✓ pycryptodome ✗ isort ✓ pymysql ✓ grpcio-health-checking ✗ jsonref ✓ flatbuffers ✓ slack-sdk ✗ deepdiff ✓ tinycss2 ✓ lz4 ✗ google-cloud-speech ✗ jupyter-core ✓ dulwich ✓ pkginfo ✗ awswrangler ✓ jsonpath-ng ✓ narwhals ✗ msrest ✗ mccabe ✗ dbt-common ✓ beartype ✓ dataclasses-json ✗ ipykernel ✓ rich-toolkit ✓ jupyter-client ✓ fastmcp ✓ sphinx ✓ google-cloud-pubsub ✗ torch ✓ google-cloud-monitoring ✗ cyclopts ✓ langsmith ✓ smart-open ✓ typedload ✓ pygithub ✗ dacite ✗

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.