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

Top 120 - 240

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

Top 240 - 360

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

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.