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

Top 120 - 240

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

Top 240 - 360

zstandard ✗ pydantic-graph ✓ poetry-core ✓ mypy ✓ jedi ✓ google-cloud-secret-manager ✓ executing ✗ parso ✗ kubernetes ✓ google-cloud-batch ✓ jsonpointer ✓ anthropic ✗ sympy ✗ build ✓ fastjsonschema ✗ paramiko ✗ matplotlib-inline ✗ asttokens ✗ mpmath ✗ google-cloud-aiplatform ✓ aiofiles ✗ sqlparse ✗ datasets ✓ sentry-sdk ✗ black ✓ tree-sitter ✓ pytest-xdist ✗ msal-extensions ✗ azure-storage-blob ✗ stack-data ✗ google-cloud-kms ✗ pure-eval ✗ google-cloud-compute ✓ backoff ✗ cloudpickle ✗ google-analytics-admin ✓ authlib ✓ termcolor ✓ gcsfs ✓ narwhals ✓ asgiref ✗ joserfc ✓ marshmallow ✓ grpc-google-iam-v1 ✗ webencodings ✓ execnet ✗ babel ✗ types-requests ✓ gunicorn ✓ cython ✗ databricks-sdk ✓ setuptools-scm ✓ jsonpatch ✗ python-json-logger ✓ google-cloud-dlp ✓ xmltodict ✗ cachecontrol ✓ tornado ✗ pandas-stubs ✓ google-cloud-texttospeech ✗ google-cloud-speech ✓ markdown ✓ dbt-adapters ✓ mdit-py-plugins ✗ nest-asyncio ✗ librt ✗ databricks-sql-connector ✗ pymongo ✗ google-cloud-pubsub ✓ rich-toolkit ✓ watchdog ✗ cbor2 ✓ aioitertools ✓ linkify-it-py ✓ py4j ✗ types-toml ✓ dbt-core ✓ durationpy ✓ uc-micro-py ✓ importlib-resources ✓ opentelemetry-instrumentation-threading ✓ pytest-mock ✗ asyncpg ✗ tinycss2 ✓ llama-cloud-services ✓ isort ✓ llama-parse ✓ ghapi ✓ dulwich ✓ flatbuffers ✓ xlsxwriter ✗ pyperclip ✗ structlog ✓ debugpy ✗ pyzmq ✗ vcs-versioning ✓ slack-sdk ✗ fastuuid ✗ python-docx ✗ jsonschema-path ✓ lz4 ✗ pkginfo ✗ types-certifi ✓ grpclib ✓ snowflake-snowpark-python ✓ ruamel-yaml-clib ✗ typing-inspect ✗ torch ✓ google-cloud-tasks ✗ pypdf ✗ pymupdf ✓ pytokens ✗ google-cloud-monitoring ✓ langsmith ✓ cyclopts ✓ psycopg ✓ modal ✓ pymysql ✓ synchronicity ✓ msrest ✗

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.