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. 185 green packages (51.4%) have dropped support for Python 3.9;
  2. 175 uncolored packages (48.6%) 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 ✓ packaging ✗ urllib3 ✓ certifi ✗ idna ✗ requests ✓ typing-extensions ✗ charset-normalizer ✗ botocore ✓ setuptools ✓ cryptography ✗ python-dateutil ✗ pygments ✗ six ✓ aiobotocore ✓ pyyaml ✗ pluggy ✗ pydantic ✗ cffi ✗ click ✓ numpy ✓ pycparser ✓ pydantic-core ✓ anyio ✓ grpcio-status ✗ pytest ✓ protobuf ✓ attrs ✗ s3transfer ✓ iniconfig ✓ h11 ✗ fsspec ✓ annotated-types ✗ httpx ✗ pandas ✓ httpcore ✗ typing-inspection ✗ markupsafe ✓ pathspec ✗ s3fs ✓ platformdirs ✓ pip ✓ jinja2 ✓ rich ✗ python-dotenv ✓ pyjwt ✗ markdown-it-py ✓ filelock ✓ jmespath ✗ aiohttp ✗ yarl ✓ starlette ✓ propcache ✓ multidict ✗ uvicorn ✓ trove-classifiers ✓ mdurl ✗ jsonschema ✓ wheel ✗ google-auth ✓ pytz ✗ pyasn1 ✗ litellm ✓ tqdm ✗ frozenlist ✗ importlib-metadata ✓ googleapis-common-protos ✗ zipp ✓ fastapi ✓ aiosignal ✓ aiohappyeyeballs ✓ rpds-py ✓ tzdata ✓ virtualenv ✗ referencing ✓ jsonschema-specifications ✗ google-api-core ✗ annotated-doc ✗ pillow ✓ opentelemetry-sdk ✓ pyasn1-modules ✗ grpcio ✗ greenlet ✓ tenacity ✓ wrapt ✗ opentelemetry-semantic-conventions ✓ requests-oauthlib ✗ colorama ✗ opentelemetry-api ✓ pyarrow ✓ sniffio ✓ awscli ✓ python-multipart ✓ scipy ✓ websockets ✓ sqlalchemy ✗ pyparsing ✗ tomli ✓ oauthlib ✗ typer ✓ shellingham ✗ psutil ✓ regex ✓ pydantic-settings ✓ lxml ✗ sglang ✓ hatchling ✓ textual ✗ beautifulsoup4 ✓ cachetools ✓ opentelemetry-proto ✓ openai ✗ more-itertools ✓ soupsieve ✗ exceptiongroup ✓ jiter ✗ tomlkit ✗ langchain ✓ distro ✗ watchfiles ✓

Top 120 - 240

distlib ✗ proto-plus ✓ opentelemetry-exporter-otlp-proto-http ✓ editables ✗ requests-toolbelt ✗ rsa ✗ websocket-client ✗ pydantic-ai-slim ✓ openpyxl ✗ et-xmlfile ✗ mypy-extensions ✗ dnspython ✓ mcp ✓ wcwidth ✗ google-genai ✓ coverage ✓ huggingface-hub ✓ grpcio-tools ✓ opentelemetry-instrumentation ✓ sse-starlette ✓ msgpack ✓ opentelemetry-exporter-otlp-proto-grpc ✓ werkzeug ✓ networkx ✓ ruff ✗ python-discovery ✗ psycopg2-binary ✗ decorator ✗ gitpython ✗ google-cloud-storage ✓ keyring ✓ pyopenssl ✗ opentelemetry-exporter-otlp-proto-common ✓ ptyprocess ✓ pexpect ✓ docker ✗ jaraco-classes ✓ smmap ✗ docutils ✗ sortedcontainers ✓ pynacl ✗ jeepney ✓ secretstorage ✓ redis ✓ fonttools ✓ docstring-parser ✗ jaraco-functools ✓ jaraco-context ✓ prompt-toolkit ✗ tabulate ✓ isodate ✗ azure-core ✓ matplotlib ✓ gitdb ✗ azure-identity ✗ uvloop ✗ multiprocess ✗ httptools ✓ hf-xet ✗ pytest-json-ctrf ✓ email-validator ✗ scikit-learn ✓ itsdangerous ✓ flask ✓ bcrypt ✗ kiwisolver ✓ pytest-cov ✗ httpx-sse ✗ google-cloud-core ✓ contourpy ✓ pytest-asyncio ✓ joblib ✗ defusedxml ✗ dill ✗ ruamel-yaml ✗ alembic ✓ msal ✗ orjson ✓ kubernetes ✓ async-timeout ✓ deprecated ✗ tiktoken ✓ threadpoolctl ✗ snowflake-connector-python ✗ mako ✗ pydantic-graph ✓ blinker ✓ databricks-sql-connector ✗ google-resumable-media ✓ google-crc32c ✓ tokenizers ✓ tzlocal ✗ google-cloud-aiplatform ✓ cycler ✗ chardet ✓ uv ✗ rapidfuzz ✓ google-api-python-client ✗ ydb ✗ mypy ✓ opentelemetry-instrumentation-requests ✓ ipython ✓ pyproject-hooks ✓ opentelemetry-util-http ✓ prometheus-client ✗ nodeenv ✗ uritemplate ✓ google-auth-httplib2 ✓ opentelemetry-exporter-otlp ✓ xxhash ✗ traitlets ✓ google-cloud-secret-manager ✗ google-auth-oauthlib ✓ zstandard ✗ toml ✗ asn1crypto ✗ google-cloud-bigquery ✗ poetry-core ✓ paramiko ✗ google-cloud-batch ✗

Top 240 - 360

types-requests ✓ weaviate-client ✓ build ✓ httplib2 ✓ langchain-core ✓ jedi ✓ aiofiles ✗ parso ✗ identify ✓ executing ✗ pre-commit ✓ sympy ✗ fastjsonschema ✗ jsonpointer ✓ authlib ✓ cfgv ✓ transformers ✓ backoff ✗ matplotlib-inline ✗ h2 ✗ sqlparse ✗ marshmallow ✓ hyperframe ✗ durationpy ✓ hpack ✗ msal-extensions ✗ google-analytics-admin ✗ asttokens ✗ mpmath ✗ azure-storage-blob ✗ google-cloud-kms ✗ google-cloud-compute ✗ anthropic ✗ setuptools-scm ✓ gunicorn ✓ babel ✗ gcsfs ✓ pure-eval ✗ stack-data ✗ cloudpickle ✗ sentry-sdk ✗ black ✓ asgiref ✗ pytest-xdist ✗ webencodings ✓ python-json-logger ✓ tornado ✗ databricks-sdk ✓ xmltodict ✗ grpc-google-iam-v1 ✗ execnet ✗ datasets ✓ cython ✗ nest-asyncio ✗ pandas-stubs ✓ termcolor ✓ google-cloud-dlp ✗ joserfc ✗ cachecontrol ✓ watchdog ✗ jsonpatch ✗ google-cloud-speech ✗ markdown ✓ pyzmq ✗ dbt-adapters ✓ py4j ✗ dbt-core ✓ google-cloud-texttospeech ✗ google-cloud-pubsub ✗ vcs-versioning ✓ rich-toolkit ✓ tree-sitter ✓ importlib-resources ✓ pymongo ✗ librt ✗ debugpy ✗ typing-inspect ✗ cyclopts ✓ aioitertools ✓ structlog ✗ llama-parse ✓ jsonschema-path ✓ asyncpg ✗ llama-cloud-services ✓ dulwich ✓ rich-rst ✗ isort ✓ tinycss2 ✓ pytest-mock ✗ pkginfo ✗ google-cloud-tasks ✗ slack-sdk ✗ jupyter-core ✓ google-cloud-monitoring ✗ mdit-py-plugins ✗ ruamel-yaml-clib ✗ narwhals ✗ msrest ✗ pathable ✓ pycryptodome ✗ google-cloud-bigtable ✗ pymysql ✓ langsmith ✓ flatbuffers ✓ sphinx ✓ lz4 ✗ torch ✓ google-cloud-logging ✗ semver ✗ jupyter-client ✓ psycopg ✓ pymupdf ✓ invoke ✗ grpcio-health-checking ✗ pyperclip ✗ deepdiff ✓ opentelemetry-instrumentation-threading ✓ python-slugify ✗ poetry ✓ dataclasses-json ✗

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.