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

Top 120 - 240

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

Top 240 - 360

aiofiles ✗ nodeenv ✗ grpcio-health-checking ✗ mcp ✓ durationpy ✓ mypy ✗ gcsfs ✓ sse-starlette ✓ google-analytics-admin ✗ mpmath ✗ litellm ✗ parso ✗ py4j ✗ tiktoken ✓ cloudpickle ✗ traitlets ✓ tornado ✗ opentelemetry-util-http ✗ toml ✗ httpx-sse ✗ jedi ✗ pre-commit ✓ cython ✗ black ✓ gunicorn ✓ importlib-resources ✓ executing ✗ opentelemetry-instrumentation-requests ✗ httptools ✓ databricks-sdk ✗ authlib ✗ asttokens ✗ langchain-core ✓ cattrs ✓ identify ✓ markdown ✓ matplotlib-inline ✗ asgiref ✗ cfgv ✓ grpc-google-iam-v1 ✗ sentry-sdk ✗ dbt-core ✓ python-json-logger ✗ nest-asyncio ✗ webencodings ✓ python-discovery ✗ stack-data ✗ pure-eval ✗ cachecontrol ✓ pandas-stubs ✓ pytest-xdist ✗ aliyun-python-sdk-core ✗ jsonpatch ✗ pymongo ✗ xxhash ✗ execnet ✗ aioitertools ✓ typing-inspect ✗ opentelemetry-exporter-prometheus ✗ debugpy ✗ pymysql ✓ awswrangler ✓ jsonschema-path ✓ watchdog ✗ h2 ✗ hyperframe ✗ hpack ✗ termcolor ✓ dulwich ✓ typedload ✓ pkginfo ✗ pyzmq ✗ dbt-adapters ✓ msrest ✗ ruamel-yaml-clib ✗ pytest-mock ✗ dataclasses-json ✗ lz4 ✗ portalocker ✗ deepdiff ✗ invoke ✗ pyperclip ✗ poetry ✓ mccabe ✗ pycryptodome ✗ smart-open ✓ rich-toolkit ✓ pathable ✓ langsmith ✓ torch ✓ google-cloud-monitoring ✗ databricks-sql-connector ✗ rfc3339-validator ✓ slack-sdk ✗ dbt-common ✓ typer-slim ✓ google-cloud-vision ✗ snowflake-sqlalchemy ✗ pygithub ✗ google-cloud-speech ✗ pendulum ✗ tree-sitter ✓ pylint ✓ multiprocess ✗ google-cloud-kms ✗ google-cloud-compute ✗ sphinx ✓ semver ✗ tinycss2 ✓ arrow ✗ notebook ✗ jupyter-core ✓ argcomplete ✗ google-cloud-dlp ✗ google-cloud-tasks ✗ future ✗ anthropic ✗ shapely ✓ requests-file ✓ pycodestyle ✓

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.