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

Top 120 - 240

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

Top 240 - 360

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

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.