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

Top 120 - 240

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

Top 240 - 360

xxhash ✗ docker ✗ identify ✓ google-cloud-compute ✓ pre-commit ✓ async-timeout ✓ joserfc ✓ cfgv ✓ sympy ✗ gcsfs ✓ paramiko ✗ authlib ✓ mpmath ✗ google-cloud-aiplatform ✓ h2 ✗ toml ✗ hyperframe ✗ pyproject-hooks ✓ jsonpointer ✓ sentry-sdk ✗ aiofiles ✗ narwhals ✓ google-cloud-dlp ✓ backoff ✗ traitlets ✓ azure-storage-blob ✗ fastjsonschema ✗ jedi ✓ google-cloud-texttospeech ✓ poetry-core ✓ databricks-sdk ✓ cloudpickle ✗ asgiref ✗ sqlparse ✗ build ✓ webencodings ✓ google-cloud-speech ✓ babel ✗ executing ✗ parso ✗ librt ✗ dbt-core ✓ databricks-sql-connector ✗ google-cloud-pubsub ✓ pymupdf ✓ pandas-stubs ✓ tornado ✗ grpc-google-iam-v1 ✗ matplotlib-inline ✗ cython ✗ jsonpatch ✗ pycryptodomex ✗ asttokens ✗ dbt-adapters ✓ datasets ✓ marshmallow ✓ gunicorn ✓ cachecontrol ✓ setuptools-scm ✗ xlsxwriter ✗ xmltodict ✗ stack-data ✗ pure-eval ✗ isort ✓ python-json-logger ✓ pymongo ✗ types-requests ✓ py4j ✗ psycopg ✓ markdown ✓ pypdf ✗ pydantic-graph ✓ vcs-versioning ✗ google-cloud-tasks ✓ python-docx ✗ kubernetes ✓ snowflake-snowpark-python ✓ flatbuffers ✓ pytokens ✗ asyncpg ✗ psycopg-binary ✓ pyperclip ✗ tinycss2 ✓ aioitertools ✓ slack-sdk ✗ jsonschema-path ✓ google-cloud-monitoring ✓ lz4 ✗ pyzmq ✗ langsmith ✓ structlog ✓ google-cloud-logging ✓ griffelib ✓ watchdog ✗ pytest-rerunfailures ✓ opentelemetry-exporter-prometheus ✓ beartype ✓ llama-parse ✓ rich-rst ✗ llama-cloud-services ✓ importlib-resources ✓ pycryptodome ✗ safetensors ✓ debugpy ✗ nest-asyncio ✗ pathable ✓ google-cloud-bigtable ✓ onnxruntime ✓ cyclopts ✓ termcolor ✓ google-cloud-vision ✓ jsonref ✓ markdownify ✓ ghapi ✓ pytest-mock ✗ pymysql ✓ sphinx ✓ typedload ✓ py-key-value-aio ✓ deprecation ✓

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.