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

Top 120 - 240

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

Top 240 - 360

pyproject-hooks ✓ zstandard ✗ ipython ✓ poetry-core ✓ identify ✓ pre-commit ✓ google-cloud-kms ✗ google-cloud-compute ✗ authlib ✓ cfgv ✓ h2 ✗ sympy ✗ aiofiles ✗ hyperframe ✗ hpack ✗ traitlets ✓ rich-toolkit ✓ gcsfs ✓ backoff ✗ msal-extensions ✗ jsonpointer ✓ azure-storage-blob ✗ build ✓ fastjsonschema ✗ sqlparse ✗ executing ✗ anthropic ✗ mpmath ✗ jedi ✓ marshmallow ✓ joserfc ✗ parso ✗ cloudpickle ✗ datasets ✓ types-requests ✓ black ✓ google-cloud-dlp ✗ sentry-sdk ✗ matplotlib-inline ✗ gunicorn ✓ babel ✗ pandas-stubs ✓ databricks-sdk ✓ grpc-google-iam-v1 ✗ asttokens ✗ durationpy ✓ google-cloud-speech ✗ cython ✗ setuptools-scm ✓ google-cloud-texttospeech ✗ pytest-xdist ✗ webencodings ✓ asgiref ✗ xmltodict ✗ pure-eval ✗ stack-data ✗ dbt-adapters ✓ python-json-logger ✓ py4j ✗ google-cloud-pubsub ✗ execnet ✗ pymongo ✗ cyclopts ✓ termcolor ✓ tornado ✗ jsonpatch ✗ dbt-core ✓ tree-sitter ✓ nest-asyncio ✗ librt ✗ cachecontrol ✓ llama-parse ✓ importlib-resources ✓ llama-cloud-services ✓ watchdog ✗ markdown ✓ vcs-versioning ✓ google-cloud-tasks ✗ jsonschema-path ✓ opentelemetry-instrumentation-threading ✓ typedload ✓ google-cloud-monitoring ✗ aioitertools ✓ structlog ✗ asyncpg ✗ rich-rst ✗ isort ✓ google-cloud-bigtable ✗ flatbuffers ✓ pyzmq ✗ typing-inspect ✗ snowflake-snowpark-python ✗ pathable ✓ pyperclip ✗ msrest ✗ pymysql ✓ tinycss2 ✓ pycryptodome ✗ google-cloud-logging ✗ sphinx ✓ google-cloud-vision ✗ torch ✓ awswrangler ✓ jsonref ✓ debugpy ✗ beartype ✓ slack-sdk ✗ grpcio-health-checking ✗ pytest-mock ✗ mdit-py-plugins ✗ lz4 ✗ sqlalchemy-bigquery ✓ google-cloud-language ✗ google-cloud-videointelligence ✗ pymupdf ✓ dulwich ✓ langsmith ✓ pypdf ✗ pytokens ✗ google-cloud-workflows ✗

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.