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

Top 120 - 240

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

Top 240 - 360

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

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.