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

Top 120 - 240

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

Top 240 - 360

tiktoken ✓ babel ✗ aiofiles ✗ jsonpointer ✗ pydantic-graph ✓ nodeenv ✗ httpx-sse ✗ xmltodict ✗ black ✓ opentelemetry-util-http ✗ httptools ✓ opentelemetry-instrumentation-requests ✗ cloudpickle ✗ aliyun-python-sdk-core ✗ databricks-sdk ✗ tornado ✗ toml ✗ authlib ✗ asgiref ✗ parso ✗ traitlets ✓ pre-commit ✓ gunicorn ✓ executing ✗ sentry-sdk ✗ py4j ✗ jedi ✗ grpcio-health-checking ✗ cython ✗ identify ✓ pandas-stubs ✓ asttokens ✗ importlib-resources ✓ pytest-xdist ✗ cfgv ✓ grpc-google-iam-v1 ✗ matplotlib-inline ✗ langchain-core ✓ dbt-core ✓ markdown ✓ execnet ✗ durationpy ✓ webencodings ✓ stack-data ✗ pure-eval ✗ litellm ✗ python-json-logger ✗ nest-asyncio ✗ xxhash ✗ cachecontrol ✓ jsonpatch ✗ typing-inspect ✗ pymongo ✗ h2 ✗ termcolor ✓ hyperframe ✗ hpack ✗ jsonschema-path ✓ isort ✓ awswrangler ✓ watchdog ✗ dbt-adapters ✓ aioitertools ✓ debugpy ✗ pymysql ✓ pytest-mock ✗ rich-toolkit ✓ pkginfo ✗ dulwich ✓ dataclasses-json ✗ dbt-common ✓ pyzmq ✗ google-cloud-speech ✗ databricks-sql-connector ✗ multiprocess ✗ google-cloud-vision ✗ jsonpath-ng ✓ typedload ✓ slack-sdk ✗ google-cloud-monitoring ✗ sphinx ✓ google-cloud-compute ✗ pycryptodome ✗ google-cloud-kms ✗ pathable ✓ msrest ✗ anthropic ✗ torch ✓ pygithub ✗ cattrs ✓ google-cloud-tasks ✗ pyperclip ✗ lz4 ✗ google-cloud-dlp ✗ google-cloud-workflows ✗ langsmith ✓ ruamel-yaml-clib ✗ google-cloud-videointelligence ✗ google-cloud-bigtable ✗ poetry ✓ smart-open ✓ google-cloud-language ✗ semver ✗ sqlalchemy-bigquery ✗ mccabe ✗ opentelemetry-exporter-prometheus ✗ rfc3339-validator ✓ google-cloud-os-login ✗ google-cloud-dataform ✗ invoke ✗ pendulum ✗ tinycss2 ✓ snowflake-sqlalchemy ✗ deepdiff ✗ google-cloud-redis ✗ future ✗ librt ✗ backports-tarfile ✓ google-ads ✗ installer ✓

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.