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

Top 120 - 240

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

Top 240 - 360

rapidfuzz ✓ google-auth-oauthlib ✓ weaviate-client ✓ httplib2 ✓ mypy ✓ pyproject-hooks ✓ jsonpointer ✓ jedi ✓ executing ✗ poetry-core ✓ google-cloud-aiplatform ✓ parso ✗ sympy ✗ paramiko ✗ tree-sitter ✓ google-cloud-kms ✗ google-cloud-compute ✓ google-analytics-admin ✓ matplotlib-inline ✗ build ✓ aiofiles ✗ anthropic ✗ backoff ✗ fastjsonschema ✗ types-requests ✓ gcsfs ✓ asttokens ✗ sentry-sdk ✗ azure-storage-blob ✗ msal-extensions ✗ sqlparse ✗ mpmath ✗ stack-data ✗ pure-eval ✗ cloudpickle ✗ black ✓ datasets ✓ marshmallow ✓ authlib ✓ babel ✗ durationpy ✓ gunicorn ✓ asgiref ✗ pytest-xdist ✗ termcolor ✓ rich-toolkit ✓ jsonpatch ✗ webencodings ✓ google-cloud-dlp ✓ databricks-sdk ✓ joserfc ✓ databricks-sql-connector ✗ grpc-google-iam-v1 ✗ execnet ✗ pandas-stubs ✓ cython ✗ google-cloud-texttospeech ✗ tornado ✗ xmltodict ✗ google-cloud-speech ✓ setuptools-scm ✓ python-json-logger ✓ dbt-adapters ✓ google-cloud-pubsub ✓ opentelemetry-instrumentation-threading ✓ nest-asyncio ✗ cachecontrol ✓ pymongo ✗ librt ✗ py4j ✗ watchdog ✗ mdit-py-plugins ✗ dbt-core ✓ narwhals ✓ markdown ✓ importlib-resources ✓ linkify-it-py ✓ debugpy ✗ structlog ✗ isort ✓ uc-micro-py ✓ asyncpg ✗ slack-sdk ✗ pyzmq ✗ llama-parse ✓ aioitertools ✓ llama-cloud-services ✓ google-cloud-tasks ✗ tinycss2 ✓ snowflake-snowpark-python ✗ pyperclip ✗ google-cloud-monitoring ✓ pytest-mock ✗ flatbuffers ✓ typing-inspect ✗ langsmith ✓ vcs-versioning ✓ typedload ✓ pycryptodome ✗ dulwich ✓ sphinx ✓ google-cloud-logging ✓ pymysql ✓ google-cloud-bigtable ✗ msrest ✗ pytokens ✗ jsonschema-path ✓ grpcio-health-checking ✓ xlsxwriter ✗ psycopg ✓ lz4 ✗ cbor2 ✓ pymupdf ✓ torch ✓ pypdf ✗ pkginfo ✗ google-cloud-vision ✗ ruamel-yaml-clib ✗ cfn-lint ✓ opentelemetry-exporter-prometheus ✓

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.