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

Top 120 - 240

pyopenssl ✗ proto-plus ✗ flask ✓ typer ✓ opentelemetry-exporter-otlp-proto-http ✗ google-cloud-storage ✗ websockets ✓ werkzeug ✓ mypy-extensions ✗ pynacl ✗ coverage ✓ pydantic-settings ✓ psycopg2-binary ✗ msgpack ✓ textual ✗ isodate ✗ openai ✗ opentelemetry-exporter-otlp ✗ dnspython ✓ opentelemetry-exporter-otlp-proto-common ✗ sortedcontainers ✓ huggingface-hub ✗ networkx ✓ wcwidth ✗ decorator ✗ scikit-learn ✓ azure-identity ✗ azure-core ✗ distro ✗ snowflake-connector-python ✗ python-multipart ✓ joblib ✗ poetry-core ✓ msal ✗ gitpython ✗ bcrypt ✗ keyring ✓ google-cloud-aiplatform ✗ matplotlib ✓ redis ✓ async-timeout ✓ ruff ✗ fonttools ✓ google-cloud-core ✗ tabulate ✗ threadpoolctl ✗ itsdangerous ✓ jaraco-classes ✓ jiter ✗ ruamel-yaml ✗ secretstorage ✓ pexpect ✓ ptyprocess ✓ types-requests ✓ asn1crypto ✗ jeepney ✓ alembic ✓ smmap ✗ zstandard ✗ editables ✗ gitdb ✗ kiwisolver ✓ deprecated ✗ prompt-toolkit ✗ chardet ✓ google-crc32c ✓ google-resumable-media ✗ jaraco-context ✓ opentelemetry-instrumentation ✗ jaraco-functools ✓ defusedxml ✗ pytest-cov ✗ orjson ✓ contourpy ✓ paramiko ✗ tzlocal ✗ blinker ✓ rapidfuzz ✓ watchfiles ✗ kubernetes ✗ google-api-python-client ✗ gcsfs ✓ dill ✗ prometheus-client ✗ backoff ✗ pyproject-hooks ✓ setuptools-scm ✗ opensearch-py ✓ email-validator ✗ pytest-asyncio ✓ google-cloud-bigquery ✗ docker ✗ cycler ✗ fastjsonschema ✗ build ✗ google-auth-oauthlib ✗ msal-extensions ✗ azure-storage-blob ✗ httplib2 ✓ uritemplate ✓ mako ✗ google-auth-httplib2 ✗ marshmallow ✓ requests-aws4auth ✗ aliyun-python-sdk-core ✗ tokenizers ✗ uv ✗ opentelemetry-exporter-prometheus ✗ sqlparse ✗ babel ✗ transformers ✓ google-cloud-batch ✗ google-cloud-secret-manager ✗ hf-xet ✗ grpcio-health-checking ✗ aiofiles ✗ docstring-parser ✗ sympy ✗ google-analytics-admin ✗ xmltodict ✗

Top 240 - 360

cloudpickle ✗ jsonpointer ✗ py4j ✗ ipython ✓ uvloop ✗ nodeenv ✗ mypy ✗ cython ✗ mpmath ✗ black ✓ tornado ✗ events ✓ opentelemetry-util-http ✗ parso ✗ traitlets ✓ pre-commit ✓ importlib-resources ✓ tiktoken ✓ jedi ✗ gunicorn ✓ mcp ✓ executing ✗ opentelemetry-instrumentation-requests ✗ dbt-core ✓ litellm ✗ identify ✓ toml ✗ asgiref ✗ asttokens ✗ httptools ✓ langchain-core ✓ cfgv ✓ matplotlib-inline ✗ requests-file ✓ pandas-stubs ✓ typer-slim ✓ nest-asyncio ✗ ply ✓ httpx-sse ✗ python-json-logger ✗ markdown ✓ grpc-google-iam-v1 ✗ durationpy ✓ sse-starlette ✗ pytest-xdist ✗ sentry-sdk ✗ pymongo ✗ stack-data ✗ pure-eval ✗ execnet ✗ webencodings ✓ databricks-sdk ✗ cachecontrol ✓ isort ✓ awswrangler ✓ xxhash ✗ typing-inspect ✗ jsonpatch ✗ aioitertools ✓ pymysql ✓ authlib ✗ cattrs ✓ opensearch-protobufs ✓ termcolor ✓ watchdog ✗ debugpy ✗ h2 ✗ dbt-adapters ✓ pkginfo ✗ msrest ✗ jsonpath-ng ✓ portalocker ✗ hyperframe ✗ hpack ✗ dulwich ✓ typedload ✓ pyzmq ✗ ray ✓ snowflake-sqlalchemy ✗ databricks-sql-connector ✗ pytest-mock ✗ multiprocess ✗ pycryptodome ✗ dataclasses-json ✗ lz4 ✗ sphinx ✓ google-cloud-monitoring ✗ ruamel-yaml-clib ✗ google-cloud-speech ✗ rich-toolkit ✓ google-cloud-vision ✗ google-cloud-kms ✗ dbt-common ✓ pendulum ✗ torch ✓ poetry ✓ slack-sdk ✗ google-cloud-compute ✗ argcomplete ✗ google-cloud-tasks ✗ tree-sitter ✓ mccabe ✗ google-cloud-dlp ✗ semver ✗ smart-open ✓ rfc3339-validator ✓ pygithub ✗ google-cloud-videointelligence ✗ azure-common ✗ google-cloud-workflows ✗ google-cloud-language ✗ langsmith ✓ datadog ✗ notebook ✗ arrow ✗ google-cloud-os-login ✗ jupyter-core ✓ google-cloud-dataform ✗ invoke ✗ deepdiff ✗

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.