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

Top 120 - 240

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

Top 240 - 360

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

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.