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

Top 120 - 240

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

Top 240 - 360

mpmath ✗ importlib-resources ✓ toml ✗ cython ✗ traitlets ✓ hf-xet ✗ black ✓ jedi ✗ parso ✗ aiofiles ✗ email-validator ✗ babel ✗ jsonpointer ✗ uv ✗ executing ✗ matplotlib-inline ✗ watchfiles ✗ asttokens ✗ mypy ✗ pandas-stubs ✓ nest-asyncio ✗ tiktoken ✓ opentelemetry-util-http ✗ grpc-google-iam-v1 ✗ opensearch-py ✓ pure-eval ✗ stack-data ✗ termcolor ✓ asgiref ✗ awswrangler ✗ sentry-sdk ✗ ply ✓ docstring-parser ✗ durationpy ✓ gunicorn ✗ pymongo ✗ markdown ✓ uvloop ✗ langchain-core ✓ opentelemetry-instrumentation-requests ✗ cachecontrol ✓ webencodings ✓ python-json-logger ✗ litellm ✗ pytest-xdist ✗ typing-inspect ✗ execnet ✗ pkginfo ✗ watchdog ✗ dbt-core ✓ aioitertools ✓ h2 ✗ dbt-adapters ✓ hpack ✗ pymysql ✓ msrest ✗ hyperframe ✗ snowflake-sqlalchemy ✗ databricks-sdk ✗ dbt-common ✓ ruamel-yaml-clib ✗ sphinx ✓ jsonpatch ✗ httptools ✓ multiprocess ✗ isort ✓ requests-aws4auth ✗ mcp ✓ google-cloud-monitoring ✗ google-cloud-compute ✗ google-cloud-tasks ✗ google-cloud-vision ✗ debugpy ✗ mccabe ✗ shapely ✓ google-cloud-speech ✗ torch ✓ jsonpath-ng ✗ google-cloud-dlp ✗ google-cloud-workflows ✗ google-cloud-bigtable ✗ pycryptodome ✗ httpx-sse ✗ slack-sdk ✗ google-cloud-language ✗ dulwich ✓ sse-starlette ✗ azure-common ✗ xxhash ✗ argcomplete ✗ botocore-stubs ✗ google-cloud-dataform ✗ google-cloud-kms ✗ requests-file ✓ crashtest ✗ datadog ✗ poetry ✗ pygithub ✗ types-awscrt ✗ google-cloud-videointelligence ✗ semver ✗ lz4 ✗ google-cloud-os-login ✗ pendulum ✗ types-s3transfer ✗ google-cloud-aiplatform ✗ dataclasses-json ✗ pycodestyle ✓ boto3-stubs ✗ cleo ✗ installer ✓ jupyter-core ✓ datasets ✗ google-cloud-redis ✗ pytest-mock ✗ cattrs ✗ future ✗ backports-tarfile ✓ notebook ✗ rfc3339-validator ✓

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.