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

Top 120 - 240

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

Top 240 - 360

opentelemetry-exporter-otlp ✗ rapidfuzz ✓ asttokens ✗ datasets ✓ matplotlib-inline ✗ types-requests ✓ httplib2 ✓ mpmath ✗ backoff ✗ google-cloud-aiplatform ✓ opentelemetry-instrumentation-requests ✗ pyproject-hooks ✓ poetry-core ✓ opentelemetry-util-http ✗ pure-eval ✗ stack-data ✗ aiofiles ✗ google-cloud-secret-manager ✗ pytest-json-ctrf ✓ build ✓ jsonpointer ✓ pydantic-graph ✓ durationpy ✓ marshmallow ✓ setuptools-scm ✓ sqlparse ✗ cloudpickle ✗ fastjsonschema ✗ termcolor ✓ msal-extensions ✗ google-cloud-batch ✗ anthropic ✗ babel ✗ gunicorn ✓ weaviate-client ✓ azure-storage-blob ✗ tree-sitter ✓ ydb ✗ pytest-xdist ✗ authlib ✓ nest-asyncio ✗ tornado ✗ google-analytics-admin ✗ markdown ✓ execnet ✗ sentry-sdk ✗ xmltodict ✗ asgiref ✗ py4j ✗ librt ✗ webencodings ✓ cython ✗ google-cloud-compute ✗ databricks-sdk ✓ black ✓ dbt-core ✓ google-cloud-kms ✗ gcsfs ✓ jsonpatch ✗ vcs-versioning ✓ importlib-resources ✓ langchain-core ✓ pyzmq ✗ python-json-logger ✓ cachecontrol ✓ debugpy ✗ joserfc ✗ pymongo ✗ google-cloud-dlp ✗ pandas-stubs ✓ typing-inspect ✗ watchdog ✗ google-cloud-speech ✗ google-cloud-pubsub ✗ mdit-py-plugins ✗ llama-parse ✓ aioitertools ✓ llama-cloud-services ✓ slack-sdk ✗ linkify-it-py ✓ google-cloud-texttospeech ✗ flatbuffers ✓ dbt-adapters ✓ torch ✓ pycryptodome ✗ uc-micro-py ✓ lz4 ✗ tinycss2 ✓ cbor2 ✓ pymysql ✓ jsonschema-path ✓ awswrangler ✓ types-toml ✓ xlsxwriter ✗ pyperclip ✗ grpcio-health-checking ✗ msrest ✗ cyclopts ✓ jupyter-core ✓ pytest-mock ✗ typedload ✓ rich-toolkit ✓ dulwich ✓ google-cloud-monitoring ✗ safetensors ✗ isort ✓ dbt-common ✓ google-cloud-tasks ✗ narwhals ✗ asyncpg ✗ pymupdf ✓ setproctitle ✗ dataclasses-json ✗ structlog ✗ jupyter-client ✓ pkginfo ✗ google-cloud-logging ✗ langsmith ✓ deepdiff ✓ semver ✗

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.