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

Top 120 - 240

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

Top 240 - 360

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

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.