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

Top 120 - 240

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

Top 240 - 360

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

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.