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

Top 120 - 240

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

Top 240 - 360

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

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.