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

Top 120 - 240

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

Top 240 - 360

sympy ✗ pytest-json-ctrf ✓ opentelemetry-exporter-otlp ✗ pyproject-hooks ✓ poetry-core ✓ asttokens ✗ matplotlib-inline ✗ httplib2 ✓ opentelemetry-instrumentation-requests ✗ google-cloud-aiplatform ✓ mpmath ✗ opentelemetry-util-http ✗ backoff ✗ build ✓ datasets ✓ google-cloud-secret-manager ✗ pure-eval ✗ stack-data ✗ aiofiles ✗ types-requests ✓ sqlparse ✗ durationpy ✓ setuptools-scm ✓ marshmallow ✓ fastjsonschema ✗ cloudpickle ✗ termcolor ✓ jsonpointer ✓ tree-sitter ✓ msal-extensions ✗ google-cloud-batch ✗ pytest-xdist ✗ azure-storage-blob ✗ anthropic ✗ gunicorn ✓ babel ✗ weaviate-client ✓ execnet ✗ py4j ✗ ydb ✗ cython ✗ sentry-sdk ✗ asgiref ✗ markdown ✓ tornado ✗ xmltodict ✗ google-analytics-admin ✗ nest-asyncio ✗ pydantic-graph ✓ librt ✗ databricks-sdk ✓ webencodings ✓ authlib ✓ google-cloud-compute ✗ black ✓ google-cloud-kms ✗ dbt-core ✓ gcsfs ✓ vcs-versioning ✓ importlib-resources ✓ cachecontrol ✓ python-json-logger ✓ pyzmq ✗ langchain-core ✓ jsonpatch ✗ pymongo ✗ debugpy ✗ typing-inspect ✗ google-cloud-dlp ✗ watchdog ✗ google-cloud-pubsub ✗ google-cloud-speech ✗ aioitertools ✓ joserfc ✗ pandas-stubs ✓ slack-sdk ✗ google-cloud-texttospeech ✗ dulwich ✓ pycryptodome ✗ dbt-adapters ✓ flatbuffers ✓ lz4 ✗ awswrangler ✓ pytest-mock ✗ pymysql ✓ torch ✓ tinycss2 ✓ mdit-py-plugins ✗ typedload ✓ cbor2 ✓ jsonschema-path ✓ safetensors ✗ msrest ✗ pkginfo ✗ xlsxwriter ✗ types-toml ✓ google-cloud-monitoring ✗ jupyter-core ✓ pymupdf ✓ linkify-it-py ✓ grpcio-health-checking ✗ google-cloud-logging ✗ isort ✓ rich-toolkit ✓ asyncpg ✗ narwhals ✗ deepdiff ✓ cattrs ✓ dataclasses-json ✗ google-cloud-tasks ✗ dbt-common ✓ invoke ✗ uc-micro-py ✓ cyclopts ✓ semver ✗ structlog ✗ tree-sitter-languages ✓ jupyter-client ✓ langsmith ✓ setproctitle ✗

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.