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. 102 green packages (28.3%) have dropped support for Python 3.9;
  2. 258 uncolored packages (71.7%) 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 ✗ anyio ✗ markupsafe ✓ awscli ✗ platformdirs ✓ h11 ✗ rsa ✗ annotated-types ✗ jmespath ✗ jinja2 ✓ pytz ✗ pyasn1 ✗ cachetools ✗ pytest ✓ filelock ✓ google-auth ✗ wheel ✗ importlib-metadata ✓ tzdata ✓ typing-inspection ✗ iniconfig ✓ zipp ✓ pyjwt ✗ httpx ✗ httpcore ✗ pyasn1-modules ✗ google-api-core ✗ colorama ✗ aiohttp ✗ rich ✗ multidict ✗ yarl ✗ python-dotenv ✗ yandexcloud ✗ virtualenv ✗ jsonschema ✗ tqdm ✗ googleapis-common-protos ✗ grpcio-tools ✓ pyarrow ✓ opentelemetry-proto ✗ markdown-it-py ✓ requests-oauthlib ✗ scipy ✓ frozenlist ✗ wrapt ✗ aiosignal ✓ mdurl ✗ greenlet ✓ opentelemetry-sdk ✗ propcache ✗ tomli ✓ pathspec ✗ rpds-py ✓ grpcio ✗ sqlalchemy ✗ referencing ✓ pillow ✓ jsonschema-specifications ✗ google-genai ✓ lxml ✗ starlette ✓ opentelemetry-exporter-otlp-proto-http ✗ psutil ✓ beautifulsoup4 ✓ uvicorn ✗ oauthlib ✗ trove-classifiers ✓ opentelemetry-exporter-otlp-proto-grpc ✗ aiohappyeyeballs ✗ pyparsing ✗ fastapi ✗ soupsieve ✗ tomlkit ✗ distlib ✗ openpyxl ✗ opentelemetry-exporter-otlp-proto-common ✗ et-xmlfile ✗ docutils ✗ opentelemetry-exporter-otlp ✗ pyopenssl ✗ exceptiongroup ✓ requests-toolbelt ✗ flask ✓ tenacity ✗ sniffio ✓ isodate ✗ werkzeug ✓ regex ✗ websocket-client ✗

Top 120 - 240

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

Top 240 - 360

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

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.