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

Top 120 - 240

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

Top 240 - 360

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