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

Top 120 - 240

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

Top 240 - 360

toml ✗ cfgv ✓ jsonpointer ✓ xxhash ✗ hyperframe ✗ opentelemetry-instrumentation-threading ✓ execnet ✗ black ✓ backoff ✗ pyproject-hooks ✓ aiofiles ✗ ipython ✓ async-timeout ✓ setuptools-scm ✗ paramiko ✗ poetry-core ✓ msal-extensions ✗ google-cloud-batch ✓ joserfc ✓ narwhals ✓ asgiref ✓ authlib ✓ fastjsonschema ✗ build ✓ vcs-versioning ✗ sqlparse ✗ gcsfs ✓ traitlets ✓ google-cloud-kms ✓ pydantic-ai-slim ✓ google-analytics-admin ✓ cloudpickle ✗ webencodings ✓ google-cloud-compute ✓ azure-storage-blob ✗ babel ✗ gunicorn ✓ datasets ✓ databricks-sdk ✓ executing ✗ librt ✗ grpc-google-iam-v1 ✗ jsonpatch ✗ asttokens ✗ jedi ✓ parso ✗ cachecontrol ✓ google-cloud-dlp ✓ pypdf ✗ dbt-adapters ✓ tornado ✗ cython ✗ google-cloud-texttospeech ✓ matplotlib-inline ✗ types-requests ✓ xmltodict ✗ marshmallow ✓ isort ✓ langsmith ✓ pymongo ✗ markdown ✓ google-cloud-speech ✓ stack-data ✗ pure-eval ✗ python-json-logger ✓ google-cloud-pubsub ✓ psycopg ✓ databricks-sql-connector ✓ asyncpg ✗ kubernetes ✓ python-docx ✗ tinycss2 ✓ dbt-core ✓ py4j ✗ structlog ✓ watchdog ✗ xlsxwriter ✗ psycopg-binary ✓ pyperclip ✗ pydantic-graph ✓ aioitertools ✓ pymupdf ✓ pyzmq ✗ tomli-w ✓ lz4 ✗ termcolor ✓ debugpy ✗ slack-sdk ✗ google-cloud-logging ✓ pytest-mock ✗ importlib-resources ✓ safetensors ✓ llama-parse ✓ llama-cloud-services ✓ pytokens ✗ nest-asyncio ✗ pytest-timeout ✗ opentelemetry-exporter-prometheus ✓ pycryptodome ✗ jsonschema-path ✓ google-cloud-tasks ✓ dulwich ✓ torch ✓ flatbuffers ✓ cyclopts ✓ snowflake-snowpark-python ✓ deprecation ✓ beartype ✓ griffelib ✓ google-cloud-monitoring ✓ dbt-common ✓ opentelemetry-instrumentation-fastapi ✓ croniter ✗ jupyter-core ✓ pymysql ✓ opentelemetry-instrumentation-asgi ✓ pkginfo ✗ playwright ✓ pathable ✓ jsonref ✓

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.