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

Top 120 - 240

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

Top 240 - 360

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