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

Top 120 - 240

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

Top 240 - 360

mypy ✓ google-cloud-kms ✗ ipython ✓ paramiko ✗ poetry-core ✓ google-analytics-admin ✗ google-cloud-compute ✗ xxhash ✗ identify ✓ pre-commit ✓ traitlets ✓ sympy ✗ cfgv ✓ gcsfs ✓ h2 ✗ build ✓ hyperframe ✗ hpack ✗ backoff ✗ aiofiles ✗ fastjsonschema ✗ msal-extensions ✗ azure-storage-blob ✗ types-requests ✓ sqlparse ✗ jedi ✓ anthropic ✗ executing ✗ mpmath ✗ parso ✗ cloudpickle ✗ authlib ✓ sentry-sdk ✗ joserfc ✓ marshmallow ✓ black ✓ babel ✗ google-cloud-dlp ✗ jsonpatch ✗ matplotlib-inline ✗ gunicorn ✓ tree-sitter ✓ durationpy ✓ pandas-stubs ✓ asttokens ✗ databricks-sdk ✓ cython ✗ pytest-xdist ✗ google-cloud-texttospeech ✗ webencodings ✓ asgiref ✗ grpc-google-iam-v1 ✗ setuptools-scm ✓ google-cloud-speech ✗ tornado ✗ datasets ✓ stack-data ✗ pure-eval ✗ xmltodict ✗ execnet ✗ google-cloud-pubsub ✗ dbt-adapters ✓ python-json-logger ✓ nest-asyncio ✗ py4j ✗ pymongo ✗ opentelemetry-instrumentation-threading ✓ termcolor ✓ cachecontrol ✓ watchdog ✗ librt ✗ dbt-core ✓ importlib-resources ✓ markdown ✓ typedload ✓ google-cloud-tasks ✗ pyperclip ✗ aioitertools ✓ pyzmq ✗ vcs-versioning ✓ debugpy ✗ llama-parse ✓ google-cloud-monitoring ✗ structlog ✗ isort ✓ snowflake-snowpark-python ✗ llama-cloud-services ✓ asyncpg ✗ cyclopts ✓ grpcio-health-checking ✓ mdit-py-plugins ✗ tinycss2 ✓ google-cloud-bigtable ✗ slack-sdk ✗ sphinx ✓ typing-inspect ✗ google-cloud-logging ✗ pytest-mock ✗ dulwich ✓ langsmith ✓ pycryptodome ✗ lz4 ✗ jsonschema-path ✓ msrest ✗ google-cloud-vision ✗ pymysql ✓ linkify-it-py ✓ cfn-lint ✓ tomli-w ✓ flatbuffers ✓ pytokens ✗ awswrangler ✓ xlsxwriter ✗ sqlalchemy-bigquery ✓ uc-micro-py ✓ torch ✓ pypdf ✗ google-cloud-language ✗ google-cloud-videointelligence ✗ pkginfo ✗

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.