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

Top 120 - 240

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

Top 240 - 360

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

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.