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

Top 120 - 240

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

Top 240 - 360

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

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.