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

Top 120 - 240

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

Top 240 - 360

traitlets ✓ tornado ✗ cython ✗ xmltodict ✗ toml ✗ jedi ✗ black ✓ parso ✗ email-validator ✗ aiofiles ✗ babel ✗ executing ✗ gcsfs ✓ jsonpointer ✗ matplotlib-inline ✗ pandas-stubs ✓ asttokens ✗ uv ✗ opentelemetry-util-http ✗ watchfiles ✗ nest-asyncio ✗ typedload ✓ mypy ✗ grpc-google-iam-v1 ✗ tiktoken ✓ awswrangler ✓ opentelemetry-instrumentation-requests ✗ ply ✓ stack-data ✗ pure-eval ✗ pymongo ✗ docstring-parser ✗ langchain-core ✓ termcolor ✓ sentry-sdk ✗ asgiref ✗ markdown ✓ gunicorn ✗ webencodings ✓ uvloop ✗ pyzmq ✗ cachecontrol ✓ dbt-core ✓ google-cloud-aiplatform ✗ python-json-logger ✗ pytest-xdist ✗ typing-inspect ✗ snowflake-sqlalchemy ✗ execnet ✗ msrest ✗ aioitertools ✓ sphinx ✓ dbt-adapters ✓ pymysql ✓ pkginfo ✗ dbt-common ✓ databricks-sdk ✗ google-cloud-monitoring ✗ multiprocess ✗ h2 ✗ google-cloud-vision ✗ watchdog ✗ jsonpatch ✗ google-cloud-tasks ✗ google-cloud-compute ✗ hpack ✗ hyperframe ✗ httptools ✓ ruamel-yaml-clib ✗ google-cloud-speech ✗ mcp ✓ google-cloud-dlp ✗ torch ✓ google-cloud-bigtable ✗ isort ✓ jsonpath-ng ✗ google-cloud-workflows ✗ debugpy ✗ google-cloud-language ✗ google-cloud-kms ✗ litellm ✗ google-cloud-dataform ✗ httpx-sse ✗ azure-common ✗ shapely ✓ pycryptodome ✗ requests-file ✓ google-cloud-videointelligence ✗ google-cloud-os-login ✗ datadog ✗ xxhash ✗ slack-sdk ✗ mccabe ✗ datasets ✗ lz4 ✗ pendulum ✗ pygithub ✗ dulwich ✓ google-cloud-redis ✗ argcomplete ✗ sse-starlette ✗ crashtest ✗ jupyter-core ✓ pysocks ✓ botocore-stubs ✗ poetry ✗ semver ✗ notebook ✗ dataclasses-json ✗ types-awscrt ✗ scramp ✓ future ✗ ray ✗ google-cloud-memcache ✗ smart-open ✗ backports-tarfile ✓ wsproto ✓ jupyter-client ✓ types-s3transfer ✗ ipykernel ✓

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.