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

Top 120 - 240

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

Top 240 - 360

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

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.