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

Top 120 - 240

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

Top 240 - 360

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

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.