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

Top 120 - 240

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

Top 240 - 360

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

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.