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

Top 120 - 240

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

Top 240 - 360

pytest-cov ✗ mpmath ✗ ipython ✓ build ✗ hf-xet ✗ tornado ✗ rapidfuzz ✓ editables ✗ mako ✗ requests-aws4auth ✗ traitlets ✓ dbt-core ✓ litellm ✗ snowflake-sqlalchemy ✗ parso ✗ nest-asyncio ✗ jedi ✗ google-cloud-vision ✗ google-cloud-tasks ✗ tiktoken ✓ google-cloud-compute ✗ babel ✗ google-cloud-dlp ✗ email-validator ✗ google-cloud-speech ✗ ply ✓ google-cloud-monitoring ✗ grpc-google-iam-v1 ✗ jsonpointer ✗ google-cloud-workflows ✗ pymongo ✗ uv ✗ google-cloud-language ✗ black ✓ toml ✗ matplotlib-inline ✗ google-cloud-dataform ✗ types-requests ✓ pymysql ✓ executing ✗ langchain-core ✓ sphinx ✓ google-cloud-bigtable ✗ google-cloud-videointelligence ✗ watchfiles ✗ google-cloud-os-login ✗ asttokens ✗ databricks-sdk ✗ google-cloud-redis ✗ google-cloud-kms ✗ msrest ✗ stack-data ✗ termcolor ✓ pure-eval ✗ docstring-parser ✗ dbt-common ✓ google-cloud-memcache ✗ dbt-adapters ✓ aioitertools ✓ webencodings ✓ jsonpath-ng ✗ pendulum ✗ sentry-sdk ✗ python-json-logger ✗ pycryptodome ✗ uvloop ✗ mypy ✗ scramp ✓ azure-common ✗ markdown ✓ gunicorn ✗ pytest-xdist ✗ asgiref ✗ datadog ✗ multiprocess ✗ apache-beam ✓ torch ✓ jsonpatch ✗ shapely ✓ opentelemetry-util-http ✗ execnet ✗ gym ✗ ray ✗ lz4 ✗ notebook ✗ mcp ✓ typing-inspect ✗ google-cloud-logging ✗ python-telegram-bot ✗ httptools ✓ h2 ✗ cattrs ✗ hyperframe ✗ hpack ✗ cachecontrol ✓ opentelemetry-instrumentation-requests ✗ ruamel-yaml-clib ✗ google-cloud-aiplatform ✗ sse-starlette ✗ slack-sdk ✗ isort ✓ debugpy ✗ pkginfo ✗ requests-file ✓ events ✓ future ✗ pygithub ✗ argcomplete ✗ invoke ✗ typer-slim ✗ watchdog ✗ databricks-sql-connector ✗ pymupdf ✓ mccabe ✗ redshift-connector ✗ smart-open ✗ mysql-connector-python ✓ pyspark ✓ pycodestyle ✓ backports-tarfile ✓

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.