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

Top 120 - 240

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

Top 240 - 360

aiofiles ✗ build ✓ ipython ✓ nodeenv ✗ traitlets ✓ sympy ✗ jsonpointer ✓ google-cloud-kms ✗ google-cloud-compute ✗ pyee ✗ backoff ✗ fastjsonschema ✗ marshmallow ✓ sglang ✓ transformers ✓ sqlparse ✗ msal-extensions ✗ azure-storage-blob ✗ jedi ✓ playwright ✗ mpmath ✗ google-cloud-bigquery ✗ parso ✗ gcsfs ✓ identify ✓ anthropic ✗ executing ✗ pre-commit ✓ h2 ✗ matplotlib-inline ✗ hyperframe ✗ hpack ✗ babel ✗ gunicorn ✓ cfgv ✓ setuptools-scm ✓ databricks-sdk ✓ cloudpickle ✗ sentry-sdk ✗ authlib ✓ asttokens ✗ pytest-xdist ✗ google-cloud-dlp ✗ dbt-core ✓ pandas-stubs ✓ asgiref ✗ tornado ✗ nest-asyncio ✗ webencodings ✓ xmltodict ✗ black ✓ cython ✗ pure-eval ✗ stack-data ✗ execnet ✗ google-cloud-speech ✗ datasets ✓ grpc-google-iam-v1 ✗ google-cloud-texttospeech ✗ google-cloud-pubsub ✗ pyzmq ✗ python-json-logger ✓ jsonpatch ✗ py4j ✗ langchain-core ✓ llama-parse ✓ llama-cloud-services ✓ cachecontrol ✓ joserfc ✗ importlib-resources ✓ markdown ✓ rich-toolkit ✓ watchdog ✗ termcolor ✓ debugpy ✗ pymongo ✗ vcs-versioning ✓ librt ✗ ujson ✓ typing-inspect ✗ dbt-adapters ✓ aioitertools ✓ google-cloud-tasks ✗ google-cloud-bigtable ✗ structlog ✗ google-cloud-monitoring ✗ tinycss2 ✓ asyncpg ✗ langsmith ✓ google-cloud-logging ✗ google-cloud-vision ✗ narwhals ✗ jupyter-core ✓ msrest ✗ dulwich ✓ pytest-mock ✗ isort ✓ pycryptodome ✗ slack-sdk ✗ dacite ✗ grpcio-health-checking ✗ pymysql ✓ pkginfo ✗ torch ✓ sphinx ✓ snowflake-snowpark-python ✗ lz4 ✗ jupyter-client ✓ tree-sitter ✓ google-cloud-language ✗ google-cloud-videointelligence ✗ ruamel-yaml-clib ✗ sqlalchemy-bigquery ✓ google-cloud-workflows ✗ dbt-common ✓ google-cloud-redis ✗ google-cloud-dataform ✗ google-cloud-os-login ✗ ipykernel ✓ jsonschema-path ✓

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.