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

Top 120 - 240

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

Top 240 - 360

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

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.