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

Top 120 - 240

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

Top 240 - 360

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

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.