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

Top 120 - 240

pyzmq ✗ isodate ✗ sniffio ✓ requests-toolbelt ✗ pynacl ✗ sortedcontainers ✓ regex ✗ azure-identity ✗ azure-core ✗ opentelemetry-semantic-conventions ✗ textual ✗ scikit-learn ✓ msal ✗ werkzeug ✓ shellingham ✗ snowflake-connector-python ✗ opentelemetry-api ✗ pexpect ✓ ptyprocess ✓ networkx ✓ decorator ✗ hatchling ✓ more-itertools ✗ asn1crypto ✗ msgpack ✓ async-timeout ✓ joblib ✗ bcrypt ✗ python-multipart ✓ websockets ✗ threadpoolctl ✗ mypy-extensions ✗ gitpython ✗ google-cloud-batch ✗ google-cloud-core ✗ dnspython ✓ aliyun-python-sdk-core ✗ openai ✗ paramiko ✗ wcwidth ✗ langsmith ✓ smmap ✗ gitdb ✗ google-analytics-admin ✗ tabulate ✗ distro ✗ annotated-doc ✗ coverage ✓ google-api-python-client ✗ google-resumable-media ✗ google-auth-oauthlib ✗ redis ✓ google-crc32c ✓ google-cloud-secret-manager ✗ deprecated ✗ matplotlib ✓ ruamel-yaml ✗ opentelemetry-exporter-prometheus ✗ chardet ✗ alembic ✓ gym-notices ✓ langchain ✓ grpcio-health-checking ✗ fonttools ✓ poetry-core ✗ google-auth-httplib2 ✗ msal-extensions ✗ transformers ✗ tzlocal ✗ itsdangerous ✓ dill ✗ google-cloud-bigquery ✗ blinker ✓ setuptools-scm ✗ pydantic-settings ✓ backoff ✗ kiwisolver ✓ azure-storage-blob ✗ keyring ✓ prompt-toolkit ✗ uritemplate ✓ py4j ✗ kubernetes ✗ jiter ✗ typedload ✓ httplib2 ✓ typer ✗ pandas-stubs ✓ cycler ✗ jaraco-classes ✓ secretstorage ✓ marshmallow ✓ pyproject-hooks ✓ sympy ✗ defusedxml ✗ tokenizers ✗ awswrangler ✗ ruamel-yaml-clib ✗ prometheus-client ✗ jeepney ✓ orjson ✗ pytest-asyncio ✓ zstandard ✗ fastjsonschema ✗ contourpy ✓ mpmath ✗ jaraco-functools ✓ sqlparse ✗ importlib-resources ✓ hf-xet ✗ opentelemetry-instrumentation ✗ cython ✗ ipython ✓ rapidfuzz ✓ xmltodict ✗ editables ✗ tornado ✗ ruff ✗ jaraco-context ✓ mako ✗

Top 240 - 360

build ✗ pytest-cov ✗ uv ✗ nodeenv ✗ docker ✗ aiofiles ✗ traitlets ✓ nest-asyncio ✗ jsonpointer ✗ dbt-core ✓ google-cloud-vision ✗ email-validator ✗ google-cloud-tasks ✗ jedi ✗ google-cloud-speech ✗ google-cloud-dlp ✗ parso ✗ google-cloud-monitoring ✗ sphinx ✓ google-cloud-workflows ✗ snowflake-sqlalchemy ✗ toml ✗ google-cloud-compute ✗ google-cloud-language ✗ argcomplete ✗ matplotlib-inline ✗ babel ✗ pre-commit ✓ google-cloud-dataform ✗ grpc-google-iam-v1 ✗ ply ✓ executing ✗ pymongo ✗ cfgv ✓ identify ✓ google-cloud-videointelligence ✗ types-requests ✓ google-cloud-os-login ✗ tiktoken ✓ durationpy ✓ asttokens ✗ langchain-core ✓ pymysql ✓ black ✓ google-cloud-bigtable ✗ dbt-common ✓ google-cloud-redis ✗ webencodings ✓ dbt-adapters ✓ sentry-sdk ✗ stack-data ✗ docstring-parser ✗ pure-eval ✗ google-cloud-memcache ✗ databricks-sdk ✗ termcolor ✓ litellm ✗ msrest ✗ azure-common ✗ markdown ✓ torch ✓ pendulum ✗ google-cloud-kms ✗ watchfiles ✗ jsonpatch ✗ asgiref ✗ shapely ✓ pycryptodome ✗ jsonpath-ng ✗ gunicorn ✗ aioitertools ✓ python-json-logger ✗ scramp ✗ ray ✗ notebook ✗ opentelemetry-util-http ✗ tree-sitter ✓ pytest-xdist ✗ uvloop ✗ mypy ✗ typing-inspect ✗ python-telegram-bot ✗ datadog ✗ google-cloud-logging ✗ mccabe ✗ opentelemetry-instrumentation-requests ✗ execnet ✗ apache-beam ✓ debugpy ✗ lz4 ✗ multiprocess ✗ mcp ✓ pycodestyle ✓ h2 ✗ hyperframe ✗ opensearch-py ✓ cattrs ✗ future ✗ hpack ✗ cachecontrol ✓ jupyter-core ✓ pkginfo ✗ requests-file ✓ httptools ✓ slack-sdk ✗ watchdog ✗ wsproto ✓ gym ✗ ipykernel ✓ invoke ✗ isort ✓ tree-sitter-languages ✓ google-cloud-aiplatform ✗ jupyter-client ✓ pyspark ✓ redshift-connector ✗ google-ads ✗ comm ✓ pysocks ✓ 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.