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

Top 120 - 240

dnspython ✓ requests-oauthlib ✗ docstring-parser ✗ uvloop ✗ editables ✗ pytest-asyncio ✓ wcwidth ✗ opentelemetry-proto ✓ tomli ✓ cachetools ✓ oauthlib ✗ werkzeug ✓ more-itertools ✓ sortedcontainers ✓ virtualenv ✗ opentelemetry-exporter-otlp-proto-common ✓ defusedxml ✗ exceptiongroup ✓ redis ✓ hf-xet ✗ fonttools ✓ pytest-cov ✗ networkx ✓ psycopg2-binary ✓ distlib ✗ msgpack ✓ itsdangerous ✓ opentelemetry-exporter-otlp-proto-http ✓ mako ✓ alembic ✓ orjson ✓ requests-toolbelt ✗ tiktoken ✓ prompt-toolkit ✓ scikit-learn ✓ tokenizers ✓ cloudpickle ✗ rsa ✗ threadpoolctl ✗ anthropic ✓ pyopenssl ✗ email-validator ✗ isodate ✗ matplotlib ✓ flask ✓ mypy ✓ websocket-client ✓ joblib ✓ h2 ✓ hpack ✓ psycopg ✓ hyperframe ✗ httpx-sse ✗ zstandard ✗ blinker ✓ python-discovery ✗ nodeenv ✗ tzlocal ✓ kiwisolver ✓ azure-core ✓ pynacl ✗ google-cloud-core ✓ psycopg-binary ✓ execnet ✗ pytest-xdist ✗ pypdf ✗ contourpy ✓ google-cloud-storage ✓ google-cloud-bigquery ✓ ruamel-yaml ✗ cycler ✗ bcrypt ✗ opentelemetry-instrumentation ✓ langchain ✓ msal ✗ grpcio-tools ✓ pytest-json-ctrf ✓ langchain-core ✓ tabulate ✓ keyring ✓ google-crc32c ✓ google-genai ✓ xlsxwriter ✗ chardet ✓ jaraco-classes ✓ prometheus-client ✗ google-resumable-media ✓ librt ✗ jaraco-functools ✓ jeepney ✓ dill ✗ sentry-sdk ✗ secretstorage ✓ jaraco-context ✓ identify ✓ uv ✗ jsonpointer ✓ pre-commit ✓ sympy ✗ cfgv ✓ mpmath ✗ deprecated ✓ decorator ✗ xxhash ✗ asn1crypto ✗ webencodings ✓ docutils ✗ toml ✗ asgiref ✓ backoff ✗ gitpython ✗ docker ✗ narwhals ✓ uritemplate ✓ smmap ✗ aiofiles ✗ asyncpg ✗ traitlets ✓ azure-identity ✗ authlib ✓

Top 240 - 360

google-api-python-client ✓ opentelemetry-util-http ✓ ptyprocess ✓ gitdb ✗ google-auth-httplib2 ✓ rapidfuzz ✓ fastjsonschema ✓ httplib2 ✓ msal-extensions ✗ pexpect ✓ jsonpatch ✓ playwright ✓ python-docx ✗ executing ✗ google-auth-oauthlib ✓ pyee ✓ python-pptx ✗ opentelemetry-exporter-otlp-proto-grpc ✓ joserfc ✓ black ✓ tinycss2 ✓ markdown ✓ sqlparse ✓ babel ✗ async-timeout ✓ snowflake-connector-python ✓ paramiko ✗ transformers ✓ tornado ✗ gunicorn ✓ structlog ✓ grpc-google-iam-v1 ✓ mcp-types ✓ pymupdf ✓ jedi ✓ parso ✗ pytest-timeout ✗ ipython ✓ xmltodict ✗ asttokens ✗ watchdog ✗ litellm ✓ azure-storage-blob ✓ brotli ✓ aioitertools ✓ pyzmq ✓ matplotlib-inline ✗ ast-serialize ✗ typedload ✓ cachecontrol ✓ google-cloud-aiplatform ✓ pure-eval ✗ pyproject-hooks ✓ python-json-logger ✓ flatbuffers ✓ nbformat ✓ stack-data ✗ griffelib ✓ beartype ✓ build ✓ onnxruntime ✓ jupyter-core ✓ awscli ✓ isort ✓ croniter ✗ marshmallow ✓ pypdfium2 ✓ databricks-sdk ✓ langsmith ✓ cython ✗ multiprocess ✗ slack-sdk ✗ safetensors ✓ awswrangler ✓ debugpy ✓ types-pyyaml ✓ pytest-mock ✓ kubernetes ✓ setuptools-scm ✗ opentelemetry-instrumentation-asgi ✓ nest-asyncio ✗ lark ✓ pycryptodome ✗ sqlglot ✓ lz4 ✗ opentelemetry-instrumentation-fastapi ✓ cyclopts ✓ jupyter-client ✓ jsonref ✓ uuid-utils ✓ reportlab ✓ pytokens ✗ pyperclip ✗ psycopg2 ✓ rich-rst ✗ vcs-versioning ✗ pathable ✓ tomli-w ✓ jsonschema-path ✓ fastuuid ✗ poetry-core ✓ pymysql ✓ argon2-cffi-bindings ✓ cbor2 ✓ argon2-cffi ✗ xlrd ✗ shapely ✓ py-key-value-aio ✓ text-unidecode ✓ deprecation ✓ types-requests ✓ python-slugify ✓ rfc3339-validator ✓ requests-file ✓ termcolor ✓ wsproto ✓ toolz ✗ uncalled-for ✓ graphql-core ✓ py4j ✗

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.