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

Top 120 - 240

pynacl ✗ psycopg2-binary ✗ websocket-client ✗ tenacity ✗ mypy-extensions ✗ opentelemetry-exporter-otlp-proto-http ✗ opentelemetry-api ✗ decorator ✗ sortedcontainers ✓ scikit-learn ✓ pexpect ✓ ptyprocess ✓ opentelemetry-exporter-otlp-proto-grpc ✗ opentelemetry-semantic-conventions ✗ coverage ✓ azure-core ✗ azure-identity ✗ msal ✗ bcrypt ✗ huggingface-hub ✗ async-timeout ✓ wcwidth ✗ networkx ✓ openai ✗ gitpython ✗ opentelemetry-exporter-otlp-proto-common ✗ asn1crypto ✗ websockets ✗ dnspython ✓ threadpoolctl ✗ google-cloud-core ✗ opentelemetry-exporter-otlp ✗ smmap ✗ joblib ✗ gitdb ✗ deprecated ✗ matplotlib ✓ hatchling ✗ langsmith ✓ zstandard ✗ paramiko ✗ tabulate ✗ python-multipart ✗ fonttools ✗ distro ✗ itsdangerous ✓ transformers ✗ google-api-python-client ✗ keyring ✓ prompt-toolkit ✗ chardet ✗ ruamel-yaml ✗ google-auth-oauthlib ✗ google-resumable-media ✗ poetry-core ✗ google-crc32c ✗ redis ✗ kiwisolver ✓ jaraco-classes ✓ secretstorage ✓ annotated-doc ✗ fastjsonschema ✗ cloudpickle ✗ backoff ✗ dill ✗ setuptools-scm ✗ blinker ✓ jeepney ✓ google-cloud-bigquery ✗ typer ✗ alembic ✓ rapidfuzz ✓ build ✗ google-cloud-secret-manager ✗ msal-extensions ✗ google-auth-httplib2 ✗ cycler ✗ defusedxml ✗ uritemplate ✓ pyproject-hooks ✓ jiter ✗ google-cloud-batch ✗ httplib2 ✓ tzlocal ✗ sqlparse ✗ py4j ✗ contourpy ✓ orjson ✗ langchain ✓ pydantic-settings ✓ jaraco-functools ✓ pytest-cov ✗ grpcio-health-checking ✗ marshmallow ✓ pyzmq ✗ xmltodict ✗ ruff ✗ google-analytics-admin ✗ importlib-resources ✓ ipython ✓ prometheus-client ✗ jaraco-context ✓ ruamel-yaml-clib ✗ azure-storage-blob ✗ aliyun-python-sdk-core ✗ tokenizers ✗ types-requests ✓ pymupdf ✓ docker ✗ traitlets ✓ babel ✗ black ✗ awswrangler ✗ mako ✗ cython ✗ parso ✗ jedi ✗ tornado ✗ snowflake-sqlalchemy ✗ nest-asyncio ✗

Top 240 - 360

jsonpointer ✗ matplotlib-inline ✗ email-validator ✗ kubernetes ✗ typedload ✓ executing ✗ aiofiles ✗ sympy ✗ toml ✗ uv ✗ langchain-core ✓ editables ✗ sphinx ✓ pytest-asyncio ✓ grpc-google-iam-v1 ✗ sentry-sdk ✗ markdown ✓ hf-xet ✗ asttokens ✗ dbt-common ✓ webencodings ✓ mypy ✗ argcomplete ✗ ply ✓ cachecontrol ✗ pymysql ✓ opentelemetry-instrumentation ✗ stack-data ✗ pure-eval ✗ mpmath ✗ asgiref ✗ gunicorn ✗ termcolor ✓ pkginfo ✗ dbt-core ✗ typing-inspect ✗ torch ✓ pytest-xdist ✗ pymongo ✗ watchfiles ✗ nodeenv ✗ dbt-adapters ✓ python-json-logger ✗ execnet ✗ uvloop ✗ google-cloud-vision ✗ docstring-parser ✗ mccabe ✗ shapely ✓ google-cloud-kms ✗ tiktoken ✓ isort ✓ debugpy ✗ pycodestyle ✓ jsonpatch ✗ aioitertools ✓ google-cloud-speech ✗ google-cloud-monitoring ✗ datadog ✗ google-cloud-dlp ✗ msrest ✗ google-cloud-compute ✗ google-cloud-tasks ✗ databricks-sdk ✗ dulwich ✗ pendulum ✗ future ✗ google-cloud-language ✗ google-cloud-workflows ✗ poetry ✗ pycryptodome ✗ pre-commit ✓ databricks-sql-connector ✗ notebook ✗ lz4 ✗ google-cloud-dataform ✗ watchdog ✗ identify ✓ google-cloud-videointelligence ✗ multiprocess ✗ httptools ✓ jsonpath-ng ✗ slack-sdk ✗ azure-common ✗ google-cloud-os-login ✗ cattrs ✗ opentelemetry-util-http ✗ dataclasses-json ✗ crashtest ✗ cfgv ✓ installer ✓ jupyter-core ✓ ipykernel ✓ cleo ✗ google-cloud-redis ✗ requests-file ✓ smart-open ✗ rfc3339-validator ✓ backports-tarfile ✓ pygithub ✗ tinycss2 ✗ arrow ✗ google-cloud-memcache ✗ semver ✗ scramp ✗ deepdiff ✗ jupyter-client ✓ google-cloud-aiplatform ✗ opensearch-py ✗ google-cloud-logging ✗ mcp ✓ redshift-connector ✗ comm ✓ httpx-sse ✗ mistune ✗ pytest-mock ✗ zope-interface ✓ pyspark ✗ pyflakes ✓ invoke ✗

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.