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. 128 green packages (35.6%) have dropped support for Python 3.9;
  2. 232 uncolored packages (64.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 ✗ urllib3 ✗ packaging ✗ setuptools ✓ certifi ✗ requests ✗ botocore ✗ idna ✗ typing-extensions ✗ charset-normalizer ✗ aiobotocore ✗ python-dateutil ✗ six ✓ grpcio-status ✗ cryptography ✗ cffi ✗ s3transfer ✗ s3fs ✓ pyyaml ✗ numpy ✓ pycparser ✓ pip ✗ fsspec ✓ pydantic ✗ click ✓ protobuf ✗ pandas ✓ pluggy ✗ attrs ✗ pydantic-core ✗ pygments ✗ anyio ✗ markupsafe ✓ jmespath ✗ platformdirs ✓ h11 ✗ filelock ✓ wheel ✗ annotated-types ✗ jinja2 ✓ pathspec ✗ importlib-metadata ✓ rsa ✗ pyjwt ✗ pytest ✓ httpx ✗ awscli ✗ pytz ✗ httpcore ✗ typing-inspection ✗ zipp ✓ pyasn1 ✗ iniconfig ✓ aiohttp ✗ grpcio ✗ python-dotenv ✗ google-auth ✗ jsonschema ✓ multidict ✗ rich ✗ tzdata ✓ google-api-core ✗ yarl ✗ tqdm ✗ colorama ✗ googleapis-common-protos ✗ virtualenv ✗ frozenlist ✗ tomli ✓ propcache ✗ rpds-py ✓ referencing ✓ pyasn1-modules ✗ aiosignal ✓ yandexcloud ✗ markdown-it-py ✓ requests-oauthlib ✗ greenlet ✓ wrapt ✗ trove-classifiers ✓ scipy ✓ sqlalchemy ✗ pyarrow ✓ jsonschema-specifications ✗ pillow ✓ mdurl ✗ psutil ✓ google-genai ✓ grpcio-tools ✓ uvicorn ✓ aiohappyeyeballs ✗ opentelemetry-proto ✗ pyparsing ✗ openpyxl ✗ et-xmlfile ✗ oauthlib ✗ starlette ✓ fastapi ✓ opentelemetry-semantic-conventions ✗ lxml ✗ opentelemetry-exporter-otlp-proto-grpc ✗ cachetools ✓ opentelemetry-sdk ✗ tomlkit ✗ tenacity ✓ regex ✓ websocket-client ✗ beautifulsoup4 ✓ langchain ✓ opentelemetry-api ✗ soupsieve ✗ shellingham ✗ sniffio ✓ hatchling ✓ requests-toolbelt ✗ annotated-doc ✗ docutils ✗ more-itertools ✗ distlib ✗ pyopenssl ✗

Top 120 - 240

exceptiongroup ✓ proto-plus ✗ flask ✓ typer ✓ opentelemetry-exporter-otlp-proto-http ✗ google-cloud-storage ✗ websockets ✓ werkzeug ✓ mypy-extensions ✗ pynacl ✗ coverage ✓ psycopg2-binary ✗ msgpack ✓ isodate ✗ textual ✗ pydantic-settings ✓ sortedcontainers ✓ opentelemetry-exporter-otlp ✗ openai ✗ opentelemetry-exporter-otlp-proto-common ✗ networkx ✓ decorator ✗ wcwidth ✗ huggingface-hub ✗ dnspython ✓ azure-identity ✗ scikit-learn ✓ azure-core ✗ snowflake-connector-python ✗ distro ✗ joblib ✗ msal ✗ python-multipart ✓ poetry-core ✓ gitpython ✗ bcrypt ✗ redis ✓ keyring ✓ matplotlib ✓ google-cloud-aiplatform ✗ async-timeout ✓ ruff ✗ tabulate ✗ fonttools ✓ google-cloud-core ✗ threadpoolctl ✗ itsdangerous ✓ ruamel-yaml ✗ pexpect ✓ jiter ✗ ptyprocess ✓ asn1crypto ✗ types-requests ✓ alembic ✓ jaraco-classes ✓ secretstorage ✓ smmap ✗ jeepney ✓ zstandard ✗ editables ✗ kiwisolver ✓ gitdb ✗ deprecated ✗ prompt-toolkit ✗ google-crc32c ✓ google-resumable-media ✗ chardet ✓ opentelemetry-instrumentation ✗ jaraco-context ✓ pytest-cov ✗ jaraco-functools ✓ blinker ✓ orjson ✓ defusedxml ✗ paramiko ✗ tzlocal ✗ contourpy ✓ kubernetes ✗ google-api-python-client ✗ rapidfuzz ✓ prometheus-client ✗ dill ✗ gcsfs ✓ backoff ✗ pyproject-hooks ✓ opensearch-py ✓ pytest-asyncio ✓ cycler ✗ watchfiles ✗ google-cloud-bigquery ✗ setuptools-scm ✗ build ✗ fastjsonschema ✗ msal-extensions ✗ email-validator ✗ google-auth-oauthlib ✗ mako ✗ azure-storage-blob ✗ httplib2 ✓ uritemplate ✓ docker ✗ google-auth-httplib2 ✗ requests-aws4auth ✗ marshmallow ✓ tokenizers ✗ uv ✗ aliyun-python-sdk-core ✗ sqlparse ✗ transformers ✓ opentelemetry-exporter-prometheus ✗ babel ✗ hf-xet ✗ google-cloud-batch ✗ google-cloud-secret-manager ✗ grpcio-health-checking ✗ cloudpickle ✗ aiofiles ✗ sympy ✗ docstring-parser ✗ google-analytics-admin ✗

Top 240 - 360

xmltodict ✗ ipython ✓ py4j ✗ jsonpointer ✗ nodeenv ✗ uvloop ✗ mypy ✗ mpmath ✗ cython ✗ tornado ✗ parso ✗ black ✓ events ✓ traitlets ✓ opentelemetry-util-http ✗ litellm ✗ pre-commit ✓ importlib-resources ✓ jedi ✗ executing ✗ gunicorn ✓ opentelemetry-instrumentation-requests ✗ dbt-core ✓ tiktoken ✓ identify ✓ mcp ✓ toml ✗ asttokens ✗ matplotlib-inline ✗ asgiref ✗ python-json-logger ✗ cfgv ✓ nest-asyncio ✗ httptools ✓ ply ✓ pandas-stubs ✓ langchain-core ✓ typer-slim ✓ grpc-google-iam-v1 ✗ durationpy ✓ markdown ✓ pytest-xdist ✗ httpx-sse ✗ sentry-sdk ✗ stack-data ✗ sse-starlette ✗ pure-eval ✗ pymongo ✗ webencodings ✓ execnet ✗ requests-file ✓ cachecontrol ✓ databricks-sdk ✗ awswrangler ✓ xxhash ✗ aioitertools ✓ typing-inspect ✗ isort ✓ opensearch-protobufs ✓ watchdog ✗ pymysql ✓ termcolor ✓ jsonpatch ✗ authlib ✗ debugpy ✗ typedload ✓ cattrs ✓ msrest ✗ h2 ✗ jsonpath-ng ✗ pkginfo ✗ hyperframe ✗ hpack ✗ dbt-adapters ✓ dulwich ✓ pyzmq ✗ snowflake-sqlalchemy ✗ tree-sitter ✓ pytest-mock ✗ multiprocess ✗ ray ✓ ruamel-yaml-clib ✗ databricks-sql-connector ✗ pycryptodome ✗ dataclasses-json ✗ lz4 ✗ sphinx ✓ pendulum ✗ google-cloud-monitoring ✗ torch ✓ rich-toolkit ✓ google-cloud-speech ✗ google-cloud-vision ✗ poetry ✓ google-cloud-kms ✗ dbt-common ✓ slack-sdk ✗ argcomplete ✗ mccabe ✗ google-cloud-compute ✗ portalocker ✗ google-cloud-tasks ✗ google-cloud-dlp ✗ smart-open ✓ rfc3339-validator ✓ pygithub ✗ datadog ✗ azure-common ✗ semver ✗ google-cloud-videointelligence ✗ arrow ✗ notebook ✗ google-cloud-workflows ✗ google-cloud-language ✗ jupyter-core ✓ deepdiff ✗ croniter ✗ google-cloud-os-login ✗ google-cloud-dataform ✗ langsmith ✓

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.