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

Top 120 - 240

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

Top 240 - 360

google-auth-oauthlib ✓ jedi ✓ pyproject-hooks ✓ httplib2 ✓ mypy ✓ executing ✗ google-cloud-secret-manager ✓ poetry-core ✓ parso ✗ google-cloud-batch ✓ sympy ✗ jsonpointer ✓ matplotlib-inline ✗ anthropic ✗ asttokens ✗ build ✓ paramiko ✗ fastjsonschema ✗ datasets ✓ tree-sitter ✓ google-cloud-aiplatform ✓ stack-data ✗ mpmath ✗ pure-eval ✗ sentry-sdk ✗ sqlparse ✗ aiofiles ✗ azure-storage-blob ✗ google-cloud-kms ✗ msal-extensions ✗ termcolor ✓ black ✓ google-cloud-compute ✓ pytest-xdist ✗ backoff ✗ google-analytics-admin ✓ cloudpickle ✗ authlib ✓ gcsfs ✓ narwhals ✓ asgiref ✗ marshmallow ✓ types-requests ✓ babel ✗ joserfc ✓ webencodings ✓ execnet ✗ gunicorn ✓ grpc-google-iam-v1 ✗ cython ✗ databricks-sdk ✓ setuptools-scm ✓ jsonpatch ✗ google-cloud-dlp ✓ xmltodict ✗ python-json-logger ✓ tornado ✗ cachecontrol ✓ pandas-stubs ✓ google-cloud-texttospeech ✗ durationpy ✓ google-cloud-speech ✓ mdit-py-plugins ✗ dbt-adapters ✓ databricks-sql-connector ✗ librt ✗ markdown ✓ rich-toolkit ✓ pymongo ✗ google-cloud-pubsub ✓ nest-asyncio ✗ cbor2 ✓ linkify-it-py ✓ watchdog ✗ types-toml ✓ py4j ✗ uc-micro-py ✓ dbt-core ✓ opentelemetry-instrumentation-threading ✓ aioitertools ✓ importlib-resources ✓ pytest-mock ✗ tinycss2 ✓ asyncpg ✗ ghapi ✓ isort ✓ llama-parse ✓ llama-cloud-services ✓ flatbuffers ✓ debugpy ✗ dulwich ✓ slack-sdk ✗ structlog ✓ types-certifi ✓ fastuuid ✗ pyzmq ✗ pyperclip ✗ grpclib ✓ xlsxwriter ✗ vcs-versioning ✓ jsonschema-path ✓ snowflake-snowpark-python ✗ python-docx ✗ lz4 ✗ torch ✓ ruamel-yaml-clib ✗ typing-inspect ✗ pkginfo ✗ google-cloud-tasks ✗ modal ✓ synchronicity ✓ pytokens ✗ google-cloud-monitoring ✓ pypdf ✗ pymupdf ✓ langsmith ✓ msrest ✗ psycopg ✓ pycryptodome ✗ pymysql ✓

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.