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

Top 120 - 240

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

Top 240 - 360

psycopg ✓ black ✓ webencodings ✓ httplib2 ✓ aiofiles ✗ librt ✗ sqlparse ✓ traitlets ✓ asgiref ✓ msal-extensions ✗ psycopg-binary ✓ jsonpatch ✗ pypdf ✗ fastjsonschema ✓ paramiko ✗ snowflake-connector-python ✓ transformers ✓ babel ✗ typedload ✓ opentelemetry-exporter-otlp-proto-grpc ✓ authlib ✓ gunicorn ✓ azure-storage-blob ✗ opentelemetry-instrumentation-requests ✓ executing ✗ asyncpg ✗ markdown ✓ awscli ✓ ipython ✓ grpc-google-iam-v1 ✓ xmltodict ✗ awswrangler ✓ structlog ✓ databricks-sdk ✓ parso ✗ jedi ✓ setuptools-scm ✗ tornado ✗ marshmallow ✓ litellm ✓ asttokens ✗ datasets ✓ joserfc ✓ build ✓ tinycss2 ✓ pyproject-hooks ✓ matplotlib-inline ✗ aioitertools ✓ poetry-core ✓ google-cloud-aiplatform ✓ playwright ✓ python-json-logger ✓ cbor2 ✓ vcs-versioning ✗ isort ✓ python-docx ✗ stack-data ✗ pure-eval ✗ pyzmq ✓ xlsxwriter ✗ langsmith ✓ cachecontrol ✓ watchdog ✗ pyee ✓ cython ✗ pytest-mock ✗ pymysql ✓ nest-asyncio ✗ pytest-timeout ✗ pymupdf ✓ types-toml ✓ lz4 ✗ nbformat ✓ types-requests ✓ kubernetes ✓ fastuuid ✗ debugpy ✗ reportlab ✓ brotli ✓ grpclib ✓ safetensors ✓ slack-sdk ✗ croniter ✗ py4j ✗ jupyter-core ✓ uuid-utils ✓ sqlglot ✓ types-certifi ✓ termcolor ✓ flatbuffers ✓ modal ✓ importlib-resources ✓ typing-inspect ✗ pytokens ✗ synchronicity ✓ psycopg2 ✗ jupyter-client ✓ types-pyyaml ✓ ast-serialize ✗ loguru ✗ pycryptodome ✗ xlrd ✗ graphql-core ✗ text-unidecode ✓ scramp ✓ mccabe ✗ opentelemetry-instrumentation-fastapi ✓ tomli-w ✓ torch ✓ wsproto ✓ requests-file ✓ deprecation ✓ pymongo ✗ griffelib ✓ mdit-py-plugins ✗ ruamel-yaml-clib ✗ semver ✗ linkify-it-py ✓ python-slugify ✗ faker ✓

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.