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

Top 120 - 240

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

Top 240 - 360

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

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.