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

Top 120 - 240

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

Top 240 - 360

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