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

Top 120 - 240

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

Top 240 - 360

pre-commit ✓ execnet ✗ cfgv ✓ async-timeout ✓ sympy ✗ google-cloud-kms ✓ joserfc ✓ google-analytics-admin ✓ google-cloud-aiplatform ✓ h2 ✗ paramiko ✗ toml ✗ pyproject-hooks ✓ hyperframe ✗ mpmath ✗ google-cloud-compute ✓ gcsfs ✓ authlib ✓ jsonpointer ✓ sentry-sdk ✗ aiofiles ✗ backoff ✗ narwhals ✓ traitlets ✓ poetry-core ✓ fastjsonschema ✗ azure-storage-blob ✗ build ✓ jedi ✓ google-cloud-dlp ✓ asgiref ✗ sqlparse ✗ cloudpickle ✗ databricks-sdk ✓ webencodings ✓ google-cloud-texttospeech ✓ executing ✗ babel ✗ parso ✗ dbt-core ✓ librt ✗ google-cloud-speech ✓ cython ✗ matplotlib-inline ✗ grpc-google-iam-v1 ✗ tornado ✗ databricks-sql-connector ✗ asttokens ✗ dbt-adapters ✓ jsonpatch ✗ datasets ✓ marshmallow ✓ cachecontrol ✓ pymupdf ✓ gunicorn ✓ google-cloud-pubsub ✓ setuptools-scm ✗ types-requests ✓ xmltodict ✗ pandas-stubs ✓ python-json-logger ✓ stack-data ✗ pure-eval ✗ xlsxwriter ✗ pycryptodomex ✗ isort ✓ markdown ✓ pymongo ✗ psycopg ✓ pypdf ✗ vcs-versioning ✗ py4j ✗ kubernetes ✓ asyncpg ✗ python-docx ✗ tinycss2 ✓ aioitertools ✓ psycopg-binary ✓ pydantic-graph ✓ google-cloud-tasks ✓ slack-sdk ✗ pytokens ✗ structlog ✓ langsmith ✓ watchdog ✗ lz4 ✗ flatbuffers ✓ pyzmq ✗ snowflake-snowpark-python ✓ pyperclip ✗ jsonschema-path ✓ griffelib ✓ google-cloud-logging ✓ ghapi ✓ google-cloud-monitoring ✓ importlib-resources ✓ safetensors ✓ debugpy ✗ opentelemetry-exporter-prometheus ✓ beartype ✓ pycryptodome ✗ rich-rst ✗ nest-asyncio ✗ pytest-mock ✗ llama-parse ✓ llama-cloud-services ✓ termcolor ✓ dulwich ✓ pathable ✓ cyclopts ✓ deprecation ✓ torch ✓ onnxruntime ✓ fastuuid ✗ dbt-common ✓ jsonref ✓ pymysql ✓ google-cloud-bigtable ✓ typedload ✓ jupyter-core ✓

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.