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

Top 120 - 240

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

Top 240 - 360

joserfc ✓ identify ✓ pre-commit ✓ hpack ✓ prometheus-client ✗ cfgv ✓ google-cloud-compute ✓ authlib ✓ gcsfs ✓ sympy ✗ toml ✗ mpmath ✗ h2 ✗ paramiko ✗ pyproject-hooks ✓ jsonpointer ✓ hyperframe ✗ traitlets ✓ google-cloud-aiplatform ✓ aiofiles ✗ sentry-sdk ✗ backoff ✗ google-cloud-dlp ✓ opentelemetry-instrumentation-threading ✓ poetry-core ✓ cloudpickle ✗ fastjsonschema ✗ jedi ✓ narwhals ✓ azure-storage-blob ✗ databricks-sdk ✓ google-cloud-texttospeech ✓ sqlparse ✗ sglang ✓ executing ✗ asgiref ✗ build ✓ webencodings ✓ parso ✗ google-cloud-speech ✓ datasets ✓ babel ✗ matplotlib-inline ✗ pymupdf ✓ tornado ✗ databricks-sql-connector ✗ asttokens ✗ librt ✗ pandas-stubs ✓ grpc-google-iam-v1 ✗ jsonpatch ✗ google-cloud-pubsub ✓ gunicorn ✓ stack-data ✗ pure-eval ✗ xlsxwriter ✗ dbt-core ✓ marshmallow ✓ setuptools-scm ✗ cachecontrol ✓ dbt-adapters ✓ cython ✗ xmltodict ✗ isort ✓ pydantic-graph ✓ py4j ✗ pymongo ✗ pypdf ✗ python-docx ✗ pyperclip ✗ python-json-logger ✓ flatbuffers ✓ types-requests ✓ vcs-versioning ✗ jsonschema-path ✓ google-cloud-tasks ✓ markdown ✓ kubernetes ✓ psycopg ✓ snowflake-snowpark-python ✓ tinycss2 ✓ pyzmq ✗ aioitertools ✓ pytokens ✗ beartype ✓ asyncpg ✗ griffelib ✓ langsmith ✓ google-cloud-monitoring ✓ structlog ✓ pathable ✓ cyclopts ✓ debugpy ✗ slack-sdk ✗ google-cloud-logging ✓ nest-asyncio ✗ lz4 ✗ psycopg-binary ✓ jsonref ✓ llama-parse ✓ llama-cloud-services ✓ rich-rst ✗ watchdog ✗ markdownify ✓ termcolor ✓ pycryptodomex ✗ opentelemetry-exporter-prometheus ✓ onnxruntime ✓ importlib-resources ✓ pycryptodome ✗ py-key-value-aio ✓ mdit-py-plugins ✗ google-cloud-bigtable ✓ pytest-rerunfailures ✓ safetensors ✓ typedload ✓ fastuuid ✗ google-cloud-vision ✓ jupyter-core ✓ pytest-mock ✗

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.