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

Top 120 - 240

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

Top 240 - 360

hpack ✗ cfgv ✓ google-cloud-batch ✓ google-auth-oauthlib ✓ httplib2 ✓ poetry-core ✓ anthropic ✗ build ✓ jsonpointer ✓ sympy ✗ jedi ✓ executing ✗ parso ✗ fastjsonschema ✗ paramiko ✗ mpmath ✗ pydantic-graph ✓ msal-extensions ✗ google-cloud-kms ✗ google-cloud-compute ✓ aiofiles ✗ google-analytics-admin ✓ google-cloud-aiplatform ✓ azure-storage-blob ✗ backoff ✗ matplotlib-inline ✗ sentry-sdk ✗ asttokens ✗ sqlparse ✗ authlib ✓ black ✓ gcsfs ✓ cloudpickle ✗ stack-data ✗ pure-eval ✗ asgiref ✗ narwhals ✓ webencodings ✓ joserfc ✓ pytest-xdist ✗ gunicorn ✓ babel ✗ types-requests ✓ kubernetes ✓ google-cloud-dlp ✓ datasets ✓ grpc-google-iam-v1 ✗ termcolor ✓ opentelemetry-instrumentation-threading ✓ marshmallow ✓ databricks-sdk ✓ execnet ✗ cython ✗ cachecontrol ✓ tornado ✗ google-cloud-texttospeech ✗ google-cloud-speech ✓ jsonpatch ✗ pandas-stubs ✓ xmltodict ✗ python-json-logger ✓ librt ✗ setuptools-scm ✓ google-cloud-pubsub ✓ pymongo ✗ watchdog ✗ tree-sitter ✓ mdit-py-plugins ✗ markdown ✓ dbt-adapters ✓ asyncpg ✗ py4j ✗ databricks-sql-connector ✗ linkify-it-py ✓ aioitertools ✓ isort ✓ tinycss2 ✓ dulwich ✓ lz4 ✗ uc-micro-py ✓ importlib-resources ✓ pytest-mock ✗ pyperclip ✗ debugpy ✗ llama-cloud-services ✓ llama-parse ✓ dbt-core ✓ structlog ✓ pypdf ✗ fastmcp ✓ fastuuid ✗ pyzmq ✗ pkginfo ✗ xlsxwriter ✗ langsmith ✓ jsonschema-path ✓ snowflake-snowpark-python ✓ google-cloud-tasks ✗ flatbuffers ✓ vcs-versioning ✓ google-cloud-logging ✓ google-cloud-monitoring ✓ pytokens ✗ nest-asyncio ✗ cyclopts ✓ python-docx ✗ psycopg ✓ slack-sdk ✗ sphinx ✓ msrest ✗ opentelemetry-exporter-prometheus ✓ rich-toolkit ✓ typing-inspect ✗ poetry ✓ pycryptodome ✗ pymysql ✓ pathable ✓ beartype ✓ safetensors ✓ backports-zstd ✓

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.