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

Top 120 - 240

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

Top 240 - 360

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

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.