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

Top 120 - 240

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

Top 240 - 360

google-auth-httplib2 ✓ sentry-sdk ✗ langchain-core ✓ google-cloud-aiplatform ✓ google-auth-oauthlib ✓ black ✓ sympy ✗ mpmath ✗ asn1crypto ✗ backoff ✗ async-timeout ✓ google-cloud-batch ✓ jsonpointer ✓ aiofiles ✗ msal-extensions ✗ traitlets ✓ pyproject-hooks ✓ paramiko ✗ fastjsonschema ✓ datasets ✓ authlib ✓ narwhals ✓ google-cloud-kms ✓ google-analytics-admin ✓ asgiref ✓ joserfc ✓ gcsfs ✓ pydantic-ai-slim ✓ google-cloud-compute ✓ executing ✗ sqlparse ✗ cloudpickle ✗ build ✓ poetry-core ✓ librt ✗ webencodings ✓ asttokens ✗ jedi ✓ parso ✗ azure-storage-blob ✗ gunicorn ✓ pypdf ✗ babel ✗ matplotlib-inline ✗ google-cloud-dlp ✓ databricks-sdk ✓ grpc-google-iam-v1 ✗ jsonpatch ✗ isort ✓ google-cloud-texttospeech ✓ stack-data ✗ pure-eval ✗ pytest-timeout ✗ tornado ✗ cachecontrol ✓ google-cloud-speech ✓ xmltodict ✗ setuptools-scm ✗ cython ✗ marshmallow ✓ types-requests ✓ python-docx ✗ markdown ✓ pydantic-graph ✓ google-cloud-pubsub ✓ dbt-adapters ✓ langsmith ✓ psycopg ✓ asyncpg ✗ python-json-logger ✓ kubernetes ✓ vcs-versioning ✗ tinycss2 ✓ xlsxwriter ✗ pymongo ✗ structlog ✓ psycopg-binary ✓ termcolor ✓ databricks-sql-connector ✓ py4j ✗ watchdog ✗ truststore ✓ pymupdf ✓ fastuuid ✗ pyzmq ✗ pyperclip ✗ safetensors ✓ opentelemetry-exporter-prometheus ✓ cfn-lint ✓ pytokens ✗ google-cloud-logging ✓ pytest-mock ✗ google-cloud-tasks ✓ debugpy ✗ mdit-py-plugins ✗ aioitertools ✓ lz4 ✗ flatbuffers ✓ nest-asyncio ✗ jsonschema-path ✓ snowflake-snowpark-python ✓ tomli-w ✓ google-cloud-monitoring ✓ linkify-it-py ✓ slack-sdk ✗ importlib-resources ✓ deprecation ✓ beartype ✓ typedload ✓ pymysql ✓ griffelib ✓ croniter ✗ uc-micro-py ✓ torch ✓ jupyter-core ✓ dulwich ✓ pycryptodome ✗ cyclopts ✓ playwright ✓ pathable ✓

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.