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

Top 120 - 240

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

Top 240 - 360

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

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.