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

Top 120 - 240

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

Top 240 - 360

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

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.