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

Top 120 - 240

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

Top 240 - 360

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

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.