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

Top 120 - 240

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

Top 240 - 360

hpack ✗ poetry-core ✓ google-auth-httplib2 ✗ paramiko ✗ build ✓ opentelemetry-instrumentation-requests ✗ grpc-google-iam-v1 ✗ pure-eval ✗ stack-data ✗ httplib2 ✓ opentelemetry-util-http ✗ types-requests ✓ mpmath ✗ setuptools-scm ✓ google-cloud-aiplatform ✓ datasets ✓ fastjsonschema ✗ sqlparse ✗ backoff ✗ aiofiles ✗ durationpy ✓ marshmallow ✓ pytest-json-ctrf ✓ opentelemetry-exporter-otlp ✗ jsonpointer ✓ cloudpickle ✗ termcolor ✓ msal-extensions ✗ google-cloud-secret-manager ✗ babel ✗ gunicorn ✓ tree-sitter ✓ pytest-xdist ✗ tornado ✗ anthropic ✗ azure-storage-blob ✗ asgiref ✗ execnet ✗ markdown ✓ sentry-sdk ✗ cython ✗ xmltodict ✗ py4j ✗ webencodings ✓ vcs-versioning ✓ nest-asyncio ✗ google-cloud-batch ✗ black ✓ databricks-sdk ✓ authlib ✓ weaviate-client ✓ librt ✗ cachecontrol ✓ python-json-logger ✓ importlib-resources ✓ pyzmq ✗ debugpy ✗ ydb ✗ dbt-core ✓ langchain-core ✓ jsonpatch ✗ google-analytics-admin ✗ watchdog ✗ gcsfs ✓ typing-inspect ✗ google-cloud-compute ✗ pymongo ✗ google-cloud-kms ✗ dulwich ✓ pytest-mock ✗ aioitertools ✓ joserfc ✗ lz4 ✗ typedload ✓ google-cloud-pubsub ✗ slack-sdk ✗ flatbuffers ✓ tinycss2 ✓ pydantic-graph ✓ jsonschema-path ✓ dbt-adapters ✓ pkginfo ✗ pymupdf ✓ google-cloud-dlp ✗ google-cloud-speech ✗ pycryptodome ✗ safetensors ✗ jupyter-core ✓ torch ✓ cbor2 ✓ pymysql ✓ isort ✓ awswrangler ✓ deepdiff ✓ narwhals ✗ msrest ✗ tree-sitter-languages ✓ jupyter-client ✓ dataclasses-json ✗ xlsxwriter ✗ poetry ✓ ipykernel ✓ pandas-stubs ✓ asyncpg ✗ rfc3339-validator ✓ semver ✗ invoke ✗ langsmith ✓ cyclopts ✓ mdit-py-plugins ✗ structlog ✗ google-cloud-texttospeech ✗ dbt-common ✓ mccabe ✗ types-pyyaml ✓ ruamel-yaml-clib ✗ google-cloud-logging ✗ arrow ✗ pygithub ✗ types-toml ✓

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.