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

Top 120 - 240

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

Top 240 - 360

aiofiles ✗ editables ✗ traitlets ✓ email-validator ✗ pre-commit ✓ toml ✗ cfgv ✓ identify ✓ mypy ✗ argcomplete ✗ jedi ✗ parso ✗ typedload ✓ mpmath ✗ nest-asyncio ✗ awswrangler ✗ grpc-google-iam-v1 ✗ matplotlib-inline ✗ executing ✗ asttokens ✗ langchain-core ✓ ply ✓ asgiref ✗ pyzmq ✗ pandas-stubs ✓ webencodings ✓ typing-inspect ✗ sphinx ✓ cachecontrol ✓ sentry-sdk ✗ docstring-parser ✗ pymongo ✗ watchfiles ✗ dbt-core ✗ aioitertools ✓ pymupdf ✓ pymysql ✓ gunicorn ✗ markdown ✓ termcolor ✓ stack-data ✗ pure-eval ✗ uvloop ✗ tiktoken ✓ pkginfo ✗ pytest-xdist ✗ torch ✓ opentelemetry-util-http ✗ msrest ✗ execnet ✗ python-json-logger ✗ google-cloud-vision ✗ jsonpatch ✗ google-cloud-kms ✗ snowflake-sqlalchemy ✗ mccabe ✗ isort ✓ google-cloud-monitoring ✗ textual ✗ durationpy ✓ google-cloud-tasks ✗ google-cloud-speech ✗ databricks-sdk ✗ google-cloud-dlp ✗ shapely ✓ httptools ✓ google-cloud-compute ✗ dbt-common ✓ multiprocess ✗ google-cloud-workflows ✗ pycryptodome ✗ watchdog ✗ google-cloud-language ✗ dbt-adapters ✓ debugpy ✗ opentelemetry-instrumentation-requests ✗ pycodestyle ✓ google-cloud-dataform ✗ dulwich ✗ databricks-sql-connector ✗ jsonpath-ng ✗ google-cloud-videointelligence ✗ notebook ✗ azure-common ✗ google-cloud-os-login ✗ slack-sdk ✗ mcp ✓ poetry ✗ datadog ✗ smart-open ✗ scramp ✗ pytest-mock ✗ datasets ✗ pendulum ✗ cattrs ✗ google-cloud-redis ✗ google-cloud-bigtable ✗ pypandoc-binary ✗ dataclasses-json ✗ httpx-sse ✗ opentelemetry-exporter-prometheus ✗ lz4 ✗ crashtest ✗ requests-file ✓ installer ✓ future ✗ cleo ✗ opensearch-py ✓ deepdiff ✗ backports-tarfile ✓ h2 ✗ google-cloud-memcache ✗ pygithub ✗ arrow ✗ hyperframe ✗ semver ✗ jupyter-core ✓ hpack ✗ rfc3339-validator ✓ typeguard ✗

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.