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

Top 120 - 240

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

Top 240 - 360

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