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

Top 120 - 240

et-xmlfile ✗ tomlkit ✗ oauthlib ✗ cachetools ✓ dnspython ✓ more-itertools ✓ coverage ✓ langchain ✓ exceptiongroup ✓ ruff ✗ sse-starlette ✓ mypy-extensions ✗ opentelemetry-exporter-otlp-proto-grpc ✓ distlib ✗ mcp ✓ google-genai ✓ rsa ✗ requests-toolbelt ✗ wcwidth ✗ google-cloud-bigquery ✓ pyopenssl ✗ grpcio-tools ✓ networkx ✓ python-discovery ✗ pytest-json-ctrf ✓ msgpack ✓ pytest-asyncio ✓ sortedcontainers ✓ docstring-parser ✗ psycopg2-binary ✗ google-cloud-storage ✓ werkzeug ✓ redis ✓ httptools ✓ hf-xet ✗ uvloop ✗ gitpython ✗ pynacl ✗ httpx-sse ✗ opentelemetry-instrumentation-requests ✓ azure-core ✓ isodate ✗ defusedxml ✗ azure-identity ✗ smmap ✗ tabulate ✓ email-validator ✗ keyring ✓ websocket-client ✗ tiktoken ✓ scikit-learn ✓ tzlocal ✓ fonttools ✓ opentelemetry-util-http ✓ jaraco-functools ✓ decorator ✗ docutils ✗ weaviate-client ✓ orjson ✓ pytest-cov ✗ prompt-toolkit ✗ jaraco-classes ✓ itsdangerous ✓ gitdb ✗ matplotlib ✓ jeepney ✓ tokenizers ✓ secretstorage ✓ msal ✗ alembic ✓ bcrypt ✗ google-cloud-core ✓ flask ✓ ydb ✓ joblib ✗ ghapi ✓ jaraco-context ✓ mako ✗ ptyprocess ✓ threadpoolctl ✗ ruamel-yaml ✗ mypy ✓ dill ✗ pexpect ✓ snowflake-connector-python ✓ kiwisolver ✓ transformers ✓ chardet ✓ anthropic ✗ google-crc32c ✓ zstandard ✗ google-cloud-aiplatform ✓ google-resumable-media ✓ google-api-python-client ✗ blinker ✓ opentelemetry-exporter-otlp ✓ uv ✗ deprecated ✗ nodeenv ✗ uritemplate ✓ google-cloud-secret-manager ✓ contourpy ✓ black ✓ docker ✗ httplib2 ✓ prometheus-client ✗ google-auth-httplib2 ✓ langchain-core ✓ multiprocess ✗ asn1crypto ✗ google-auth-oauthlib ✓ hpack ✓ pytest-xdist ✗ sentry-sdk ✗ rapidfuzz ✓ opentelemetry-instrumentation-threading ✓ cycler ✗ sympy ✗ xxhash ✗ jsonpointer ✓

Top 240 - 360

execnet ✗ mpmath ✗ pre-commit ✓ identify ✓ h2 ✗ cfgv ✓ hyperframe ✗ toml ✗ ipython ✓ backoff ✗ pyproject-hooks ✓ paramiko ✗ async-timeout ✓ aiofiles ✗ msal-extensions ✗ google-cloud-batch ✓ setuptools-scm ✗ narwhals ✓ poetry-core ✓ asgiref ✓ fastjsonschema ✗ sqlparse ✗ build ✓ gcsfs ✓ traitlets ✓ google-cloud-kms ✓ joserfc ✓ pydantic-ai-slim ✓ google-analytics-admin ✓ authlib ✓ cloudpickle ✗ librt ✗ vcs-versioning ✗ webencodings ✓ google-cloud-compute ✓ azure-storage-blob ✗ babel ✗ datasets ✓ databricks-sdk ✓ gunicorn ✓ executing ✗ pypdf ✗ jsonpatch ✗ isort ✓ asttokens ✗ grpc-google-iam-v1 ✗ jedi ✓ parso ✗ google-cloud-dlp ✓ dbt-adapters ✓ cachecontrol ✓ tornado ✗ types-requests ✓ matplotlib-inline ✗ google-cloud-texttospeech ✓ cython ✗ xmltodict ✗ marshmallow ✓ langsmith ✓ google-cloud-speech ✓ pymongo ✗ markdown ✓ dbt-core ✓ databricks-sql-connector ✓ python-json-logger ✓ stack-data ✗ pure-eval ✗ google-cloud-pubsub ✓ kubernetes ✓ asyncpg ✗ psycopg ✓ py4j ✗ safetensors ✓ tinycss2 ✓ python-docx ✗ structlog ✓ watchdog ✗ pydantic-graph ✓ pytokens ✗ psycopg-binary ✓ xlsxwriter ✗ tomli-w ✓ aioitertools ✓ termcolor ✓ lz4 ✗ pyzmq ✗ debugpy ✗ typedload ✓ importlib-resources ✓ llama-parse ✓ llama-cloud-services ✓ pyperclip ✗ google-cloud-logging ✓ slack-sdk ✗ nest-asyncio ✗ pymupdf ✓ torch ✓ pytest-timeout ✗ pycryptodome ✗ google-cloud-tasks ✓ snowflake-snowpark-python ✓ pytest-mock ✗ opentelemetry-exporter-prometheus ✓ deprecation ✓ dbt-common ✓ dulwich ✓ google-cloud-monitoring ✓ pymysql ✓ jupyter-core ✓ rich-toolkit ✓ playwright ✓ jsonschema-path ✓ cyclopts ✓ croniter ✗ flatbuffers ✓ sphinx ✓ opentelemetry-instrumentation-fastapi ✓ pkginfo ✗ pandas-stubs ✓ brotli ✓

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.