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

Top 120 - 240

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

Top 240 - 360

weaviate-client ✓ toml ✗ httplib2 ✓ google-cloud-bigquery ✗ aiofiles ✗ durationpy ✓ jsonpointer ✓ fastjsonschema ✗ sympy ✗ jedi ✓ identify ✓ parso ✗ pre-commit ✓ backoff ✗ executing ✗ authlib ✓ marshmallow ✓ transformers ✓ cfgv ✓ sqlparse ✗ h2 ✗ langchain-core ✓ hyperframe ✗ matplotlib-inline ✗ google-analytics-admin ✗ hpack ✗ msal-extensions ✗ mpmath ✗ azure-storage-blob ✗ google-cloud-kms ✗ setuptools-scm ✓ google-cloud-compute ✗ asttokens ✗ anthropic ✗ babel ✗ gunicorn ✓ gcsfs ✓ cloudpickle ✗ sentry-sdk ✗ black ✓ pure-eval ✗ stack-data ✗ asgiref ✗ pytest-xdist ✗ webencodings ✓ tornado ✗ xmltodict ✗ databricks-sdk ✓ python-json-logger ✓ execnet ✗ cython ✗ grpc-google-iam-v1 ✗ nest-asyncio ✗ datasets ✓ pandas-stubs ✓ cachecontrol ✓ google-cloud-dlp ✗ jsonpatch ✗ termcolor ✓ joserfc ✗ watchdog ✗ google-cloud-speech ✗ dbt-core ✓ markdown ✓ pyzmq ✗ py4j ✗ google-cloud-texttospeech ✗ google-cloud-pubsub ✗ vcs-versioning ✓ dbt-adapters ✓ importlib-resources ✓ rich-toolkit ✓ pymongo ✗ librt ✗ debugpy ✗ typing-inspect ✗ tree-sitter ✓ aioitertools ✓ cyclopts ✓ pyee ✗ structlog ✗ llama-parse ✓ llama-cloud-services ✓ dulwich ✓ playwright ✗ asyncpg ✗ tinycss2 ✓ isort ✓ pytest-mock ✗ jsonschema-path ✓ pkginfo ✗ google-cloud-tasks ✗ slack-sdk ✗ jupyter-core ✓ google-cloud-monitoring ✗ rich-rst ✗ narwhals ✗ langsmith ✓ ruamel-yaml-clib ✗ pycryptodome ✗ google-cloud-bigtable ✗ pymysql ✓ msrest ✗ mdit-py-plugins ✗ lz4 ✗ google-cloud-logging ✗ semver ✗ pathable ✓ torch ✓ sphinx ✓ psycopg ✓ flatbuffers ✓ jupyter-client ✓ grpcio-health-checking ✗ poetry ✓ deepdiff ✓ invoke ✗ pymupdf ✓ dataclasses-json ✗ python-slugify ✗

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.