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

Top 120 - 240

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

Top 240 - 360

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

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.