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

Top 120 - 240

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

Top 240 - 360

httplib2 ✓ nodeenv ✗ build ✓ sympy ✗ aiofiles ✗ ipython ✓ jsonpointer ✓ transformers ✓ google-analytics-admin ✗ marshmallow ✓ backoff ✗ traitlets ✓ google-cloud-bigquery ✗ fastjsonschema ✗ sqlparse ✗ mpmath ✗ msal-extensions ✗ google-cloud-kms ✗ azure-storage-blob ✗ google-cloud-compute ✗ identify ✓ pre-commit ✓ jedi ✓ durationpy ✓ parso ✗ ujson ✓ anthropic ✗ gunicorn ✓ gcsfs ✓ cfgv ✓ h2 ✗ babel ✗ hyperframe ✗ executing ✗ hpack ✗ dbt-core ✓ sentry-sdk ✗ matplotlib-inline ✗ setuptools-scm ✓ cloudpickle ✗ databricks-sdk ✓ pytest-xdist ✗ asgiref ✗ asttokens ✗ xmltodict ✗ grpc-google-iam-v1 ✗ authlib ✓ webencodings ✓ cython ✗ black ✓ execnet ✗ google-cloud-dlp ✗ nest-asyncio ✗ datasets ✓ dacite ✗ pandas-stubs ✓ tornado ✗ pure-eval ✗ stack-data ✗ google-cloud-speech ✗ langchain-core ✓ py4j ✗ llama-parse ✓ jsonpatch ✗ llama-cloud-services ✓ google-cloud-pubsub ✗ google-cloud-texttospeech ✗ python-json-logger ✓ librt ✗ cachecontrol ✓ iso8601 ✗ importlib-resources ✓ pyhumps ✗ pyzmq ✗ markdown ✓ joserfc ✗ termcolor ✓ pymongo ✗ vcs-versioning ✓ watchdog ✗ rich-toolkit ✓ typing-inspect ✗ debugpy ✗ dbt-adapters ✓ axiom-py ✗ aioitertools ✓ google-cloud-tasks ✗ structlog ✗ google-cloud-monitoring ✗ google-cloud-bigtable ✗ isort ✓ asyncpg ✗ tinycss2 ✓ langsmith ✓ narwhals ✗ dulwich ✓ pytest-mock ✗ pycryptodome ✗ msrest ✗ pymysql ✓ google-cloud-logging ✗ slack-sdk ✗ pkginfo ✗ pywin32 ✗ dbt-common ✓ grpcio-health-checking ✗ google-cloud-vision ✗ lz4 ✗ torch ✓ ruamel-yaml-clib ✗ jupyter-core ✓ sphinx ✓ awswrangler ✓ dataclasses-json ✗ flatbuffers ✓ loguru ✗ deepdiff ✓ invoke ✗ google-cloud-language ✗ snowflake-snowpark-python ✗

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.