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

Top 120 - 240

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

Top 240 - 360

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

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.