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

Top 120 - 240

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

Top 240 - 360

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

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.