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

Top 120 - 240

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

Top 240 - 360

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

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.