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

Top 120 - 240

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

Top 240 - 360

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

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.