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

Top 120 - 240

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

Top 240 - 360

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

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.