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

Top 120 - 240

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

Top 240 - 360

kubernetes ✗ black ✗ sympy ✗ tornado ✗ langchain-core ✓ matplotlib-inline ✗ executing ✗ toml ✗ email-validator ✗ aiofiles ✗ hf-xet ✗ aliyun-python-sdk-core ✗ ply ✓ pymysql ✓ grpc-google-iam-v1 ✗ markdown ✓ webencodings ✓ torch ✓ asttokens ✗ cachecontrol ✗ pkginfo ✗ termcolor ✓ dbt-common ✓ editables ✗ argcomplete ✗ mypy ✗ gunicorn ✗ mpmath ✗ opentelemetry-instrumentation-requests ✗ sphinx ✓ dbt-core ✗ asgiref ✗ stack-data ✗ pure-eval ✗ uvloop ✗ uv ✗ watchfiles ✗ pytest-asyncio ✗ pendulum ✗ typing-inspect ✗ shapely ✓ typedload ✓ python-json-logger ✗ pymongo ✗ pytest-xdist ✗ nodeenv ✗ mccabe ✗ aioitertools ✓ multiprocess ✗ future ✗ docstring-parser ✗ dulwich ✗ pycryptodome ✗ pycodestyle ✓ isort ✓ jsonpatch ✗ poetry ✗ msrest ✗ datadog ✗ debugpy ✗ tiktoken ✓ notebook ✗ execnet ✗ watchdog ✗ jsonpath-ng ✗ databricks-sdk ✗ dbt-adapters ✓ httptools ✓ installer ✓ lz4 ✗ pre-commit ✓ identify ✓ crashtest ✗ cleo ✗ google-cloud-vision ✗ google-cloud-monitoring ✗ smart-open ✗ pymupdf ✓ google-cloud-kms ✗ azure-common ✗ cfgv ✓ google-cloud-compute ✗ arrow ✗ google-cloud-speech ✗ requests-file ✓ google-cloud-dlp ✗ slack-sdk ✗ databricks-sql-connector ✗ jupyter-core ✓ google-cloud-tasks ✗ bashlex ✓ scramp ✗ ipykernel ✓ cattrs ✗ dataclasses-json ✗ rfc3339-validator ✓ google-cloud-workflows ✗ google-cloud-language ✗ backports-tarfile ✓ tinycss2 ✗ swe-rex ✓ google-cloud-aiplatform ✗ redshift-connector ✗ google-cloud-dataform ✗ pygithub ✗ google-cloud-videointelligence ✗ requests-aws4auth ✗ jupyter-client ✓ opensearch-py ✗ semver ✗ pytest-mock ✗ nvidia-nccl-cu12 ✗ poetry-plugin-export ✗ google-cloud-os-login ✗ deepdiff ✗ py ✗ mistune ✗ comm ✓ invoke ✗ httpx-sse ✗

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.