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

Top 120 - 240

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

Top 240 - 360

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

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.