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

Top 120 - 240

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

Top 240 - 360

asn1crypto ✗ hyperframe ✗ execnet ✗ xxhash ✗ pyproject-hooks ✓ jsonpointer ✓ mpmath ✗ opentelemetry-instrumentation-threading ✓ backoff ✗ black ✓ aiofiles ✗ ipython ✓ poetry-core ✓ msal-extensions ✗ paramiko ✗ async-timeout ✓ fastjsonschema ✗ asgiref ✓ build ✓ joserfc ✓ narwhals ✓ authlib ✓ sqlparse ✗ google-cloud-batch ✓ setuptools-scm ✗ traitlets ✓ cloudpickle ✗ webencodings ✓ gcsfs ✓ azure-storage-blob ✗ google-cloud-kms ✓ pydantic-ai-slim ✓ babel ✗ gunicorn ✓ executing ✗ vcs-versioning ✗ google-analytics-admin ✓ datasets ✓ librt ✗ google-cloud-compute ✓ grpc-google-iam-v1 ✗ databricks-sdk ✓ jsonpatch ✗ cachecontrol ✓ asttokens ✗ jedi ✓ parso ✗ types-requests ✓ pypdf ✗ tornado ✗ xmltodict ✗ matplotlib-inline ✗ cython ✗ marshmallow ✓ dbt-adapters ✓ google-cloud-dlp ✓ langsmith ✓ markdown ✓ isort ✓ pymongo ✗ stack-data ✗ pure-eval ✗ google-cloud-texttospeech ✓ python-json-logger ✓ psycopg ✓ asyncpg ✗ python-docx ✗ kubernetes ✓ google-cloud-speech ✓ tinycss2 ✓ google-cloud-pubsub ✓ structlog ✓ watchdog ✗ databricks-sql-connector ✓ xlsxwriter ✗ psycopg-binary ✓ py4j ✗ dbt-core ✓ typedload ✓ pyperclip ✗ pytest-mock ✗ aioitertools ✓ slack-sdk ✗ dulwich ✓ debugpy ✗ pyzmq ✗ pydantic-graph ✓ termcolor ✓ lz4 ✗ pymupdf ✓ tomli-w ✓ pytest-timeout ✗ importlib-resources ✓ nest-asyncio ✗ pytokens ✗ google-cloud-logging ✓ jsonschema-path ✓ safetensors ✓ pycryptodome ✗ pkginfo ✗ cyclopts ✓ flatbuffers ✓ opentelemetry-exporter-prometheus ✓ beartype ✓ opentelemetry-instrumentation-fastapi ✓ deprecation ✓ torch ✓ croniter ✗ llama-parse ✓ opentelemetry-instrumentation-asgi ✓ google-cloud-tasks ✓ llama-cloud-services ✓ griffelib ✓ jupyter-core ✓ snowflake-snowpark-python ✓ playwright ✓ pymysql ✓ pathable ✓ dbt-common ✓ brotli ✓

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.