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

Top 120 - 240

pynacl ✗ more-itertools ✗ proto-plus ✗ shellingham ✗ google-cloud-storage ✗ mypy-extensions ✗ psycopg2-binary ✗ pexpect ✓ opentelemetry-api ✗ ptyprocess ✓ huggingface-hub ✗ opentelemetry-semantic-conventions ✗ hatchling ✓ msgpack ✓ scikit-learn ✓ decorator ✗ sortedcontainers ✓ coverage ✓ snowflake-connector-python ✗ azure-core ✗ azure-identity ✗ networkx ✓ async-timeout ✓ msal ✗ python-multipart ✗ wcwidth ✗ websockets ✗ asn1crypto ✗ bcrypt ✗ gitpython ✗ dnspython ✓ joblib ✗ openai ✗ threadpoolctl ✗ annotated-doc ✗ google-cloud-core ✗ transformers ✗ tabulate ✗ deprecated ✗ distro ✗ smmap ✗ itsdangerous ✓ gitdb ✗ keyring ✓ ruamel-yaml ✗ matplotlib ✓ google-cloud-bigquery ✗ fonttools ✓ chardet ✗ paramiko ✗ google-resumable-media ✗ prompt-toolkit ✗ google-auth-oauthlib ✗ dill ✗ redis ✓ alembic ✓ pyproject-hooks ✓ google-crc32c ✗ google-api-python-client ✗ secretstorage ✓ poetry-core ✗ jaraco-classes ✓ backoff ✗ typer ✗ setuptools-scm ✗ jiter ✗ blinker ✓ kiwisolver ✓ google-cloud-batch ✗ jeepney ✓ fastjsonschema ✗ ruff ✗ langsmith ✓ rapidfuzz ✓ pydantic-settings ✓ tzlocal ✗ aliyun-python-sdk-core ✗ google-cloud-secret-manager ✗ orjson ✗ build ✗ zstandard ✗ msal-extensions ✗ grpcio-health-checking ✗ uritemplate ✓ docker ✗ kubernetes ✗ ruamel-yaml-clib ✗ types-requests ✓ google-analytics-admin ✗ cycler ✗ google-auth-httplib2 ✗ defusedxml ✗ pytest-cov ✗ langchain ✓ httplib2 ✓ pytest-asyncio ✓ tokenizers ✗ py4j ✗ contourpy ✓ azure-storage-blob ✗ marshmallow ✓ jaraco-functools ✓ sqlparse ✗ jaraco-context ✓ xmltodict ✗ prometheus-client ✗ nodeenv ✗ argcomplete ✗ ipython ✓ hf-xet ✗ mako ✗ uv ✗ importlib-resources ✓ cloudpickle ✗ pre-commit ✓ opentelemetry-instrumentation ✗ cfgv ✓ aiofiles ✗ jsonpointer ✗ identify ✓

Top 240 - 360

babel ✗ black ✓ sympy ✗ cython ✗ tornado ✗ email-validator ✗ editables ✗ mypy ✗ traitlets ✓ parso ✗ jedi ✗ nest-asyncio ✗ toml ✗ awswrangler ✗ matplotlib-inline ✗ mpmath ✗ grpc-google-iam-v1 ✗ executing ✗ langchain-core ✓ ply ✓ asttokens ✗ pandas-stubs ✓ sentry-sdk ✗ typedload ✓ dbt-core ✗ sphinx ✓ asgiref ✗ webencodings ✓ aioitertools ✓ typing-inspect ✗ docstring-parser ✗ pymysql ✓ pymongo ✗ cachecontrol ✓ markdown ✓ termcolor ✓ watchfiles ✗ pymupdf ✓ tiktoken ✓ gunicorn ✗ stack-data ✗ pyzmq ✗ pure-eval ✗ torch ✓ pytest-xdist ✗ uvloop ✗ pkginfo ✗ multiprocess ✗ google-cloud-kms ✗ google-cloud-vision ✗ execnet ✗ snowflake-sqlalchemy ✗ msrest ✗ opentelemetry-util-http ✗ mccabe ✗ python-json-logger ✗ textual ✗ google-cloud-tasks ✗ google-cloud-monitoring ✗ google-cloud-speech ✗ jsonpatch ✗ google-cloud-dlp ✗ durationpy ✓ google-cloud-compute ✗ isort ✓ google-cloud-workflows ✗ google-cloud-language ✗ databricks-sdk ✗ pycodestyle ✓ shapely ✓ pycryptodome ✗ google-cloud-dataform ✗ httptools ✓ dbt-common ✓ google-cloud-videointelligence ✗ debugpy ✗ jsonpath-ng ✗ databricks-sql-connector ✗ google-cloud-os-login ✗ watchdog ✗ dbt-adapters ✓ pendulum ✗ mcp ✓ opentelemetry-instrumentation-requests ✗ dulwich ✗ datasets ✗ azure-common ✗ smart-open ✗ pypandoc-binary ✗ slack-sdk ✗ datadog ✗ google-cloud-redis ✗ scramp ✗ poetry ✗ notebook ✗ requests-file ✓ google-cloud-bigtable ✗ httpx-sse ✗ cattrs ✗ pytest-mock ✗ lz4 ✗ google-cloud-memcache ✗ opensearch-py ✓ dataclasses-json ✗ future ✗ deepdiff ✗ opentelemetry-exporter-prometheus ✗ crashtest ✗ installer ✓ safetensors ✗ backports-tarfile ✓ h2 ✗ cleo ✗ hyperframe ✗ pygithub ✗ hpack ✗ rfc3339-validator ✓ jupyter-core ✓ google-cloud-logging ✗ arrow ✗

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.