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

Top 120 - 240

huggingface-hub ✗ docutils ✗ proto-plus ✗ shellingham ✗ exceptiongroup ✓ sortedcontainers ✓ mypy-extensions ✗ pynacl ✗ psycopg2-binary ✗ more-itertools ✗ isodate ✗ networkx ✓ decorator ✗ websockets ✓ flask ✓ msgpack ✓ hatchling ✓ scikit-learn ✓ azure-core ✗ coverage ✓ wcwidth ✗ pexpect ✓ ptyprocess ✓ msal ✗ joblib ✗ bcrypt ✗ openai ✗ distro ✗ poetry-core ✓ gitpython ✗ google-cloud-core ✗ dnspython ✓ ruamel-yaml ✗ threadpoolctl ✗ async-timeout ✓ python-multipart ✓ asn1crypto ✗ snowflake-connector-python ✗ tabulate ✗ azure-identity ✗ deprecated ✗ redis ✓ matplotlib ✓ prompt-toolkit ✗ itsdangerous ✓ keyring ✓ fonttools ✓ opentelemetry-instrumentation ✗ pydantic-settings ✓ smmap ✗ gitdb ✗ paramiko ✗ alembic ✓ google-resumable-media ✗ google-crc32c ✓ ruff ✗ annotated-doc ✗ kiwisolver ✓ zstandard ✗ tzlocal ✗ blinker ✓ jaraco-classes ✓ jiter ✗ secretstorage ✓ pytest-asyncio ✓ rapidfuzz ✓ chardet ✗ typer ✗ jeepney ✓ google-api-python-client ✗ kubernetes ✗ langsmith ✓ backoff ✗ pyproject-hooks ✓ build ✗ cycler ✗ dill ✗ types-requests ✓ fastjsonschema ✗ defusedxml ✗ nodeenv ✗ prometheus-client ✗ msal-extensions ✗ orjson ✗ pytest-cov ✗ google-auth-oauthlib ✗ google-cloud-bigquery ✗ jaraco-context ✓ setuptools-scm ✗ azure-storage-blob ✗ jaraco-functools ✓ contourpy ✓ sympy ✗ httplib2 ✓ uritemplate ✓ identify ✓ google-auth-httplib2 ✗ pre-commit ✓ transformers ✗ ipython ✓ cfgv ✓ editables ✗ cloudpickle ✗ marshmallow ✓ typedload ✓ mpmath ✗ sqlparse ✗ mako ✗ jedi ✗ docker ✗ traitlets ✓ tokenizers ✗ tornado ✗ importlib-resources ✓ xmltodict ✗ parso ✗ babel ✗ py4j ✗ cython ✗ opentelemetry-instrumentation-requests ✗

Top 240 - 360

jsonpointer ✗ opentelemetry-util-http ✗ gcsfs ✓ matplotlib-inline ✗ hf-xet ✗ executing ✗ nest-asyncio ✗ aiofiles ✗ uv ✗ asttokens ✗ toml ✗ textual ✗ mypy ✗ black ✓ sentry-sdk ✗ watchfiles ✗ ply ✓ stack-data ✗ email-validator ✗ pure-eval ✗ google-cloud-secret-manager ✗ asgiref ✗ markdown ✓ webencodings ✓ cachecontrol ✓ gunicorn ✓ langchain-core ✓ awswrangler ✓ dbt-core ✓ docstring-parser ✗ grpc-google-iam-v1 ✗ uvloop ✗ python-json-logger ✗ tiktoken ✓ durationpy ✓ termcolor ✓ opentelemetry-exporter-prometheus ✗ pkginfo ✗ aioitertools ✓ dbt-adapters ✓ pyzmq ✗ watchdog ✗ pymongo ✗ debugpy ✗ typing-inspect ✗ httptools ✓ pymysql ✓ dulwich ✓ ruamel-yaml-clib ✗ torch ✓ execnet ✗ jsonpatch ✗ dbt-common ✓ pytest-xdist ✗ jsonpath-ng ✗ msrest ✗ botocore-stubs ✗ isort ✓ databricks-sdk ✗ shapely ✓ google-cloud-aiplatform ✗ types-awscrt ✗ aliyun-python-sdk-core ✗ poetry ✓ types-s3transfer ✗ sse-starlette ✗ boto3-stubs ✗ mccabe ✗ h2 ✗ pycryptodome ✗ hyperframe ✗ hpack ✗ mcp ✓ httpx-sse ✗ grpcio-health-checking ✗ jupyter-core ✓ requests-file ✓ datasets ✗ azure-common ✗ crashtest ✗ cleo ✗ installer ✓ multiprocess ✗ lz4 ✗ notebook ✗ ipykernel ✓ google-cloud-batch ✗ snowflake-sqlalchemy ✗ pysocks ✓ jupyter-client ✓ datadog ✗ comm ✓ future ✗ slack-sdk ✗ wsproto ✓ arrow ✗ poetry-plugin-export ✓ tinycss2 ✓ rfc3339-validator ✓ pytest-mock ✗ pendulum ✗ invoke ✗ deepdiff ✗ pygithub ✗ pycodestyle ✓ dataclasses-json ✗ smart-open ✗ tree-sitter ✓ google-analytics-admin ✗ scramp ✓ mypy-boto3-s3 ✗ semver ✗ safetensors ✗ loguru ✗ argcomplete ✗ mistune ✗ humanfriendly ✗ backports-tarfile ✓ simplejson ✗ xlsxwriter ✗

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.