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

Top 120 - 240

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

Top 240 - 360

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

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.