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

Top 120 - 240

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

Top 240 - 360

asn1crypto ✗ httplib2 ✓ google-auth-oauthlib ✓ jsonpointer ✓ executing ✗ poetry-core ✓ google-cloud-secret-manager ✓ jedi ✓ weaviate-client ✓ sympy ✗ parso ✗ build ✓ google-cloud-batch ✓ paramiko ✗ anthropic ✗ fastjsonschema ✗ google-cloud-aiplatform ✓ matplotlib-inline ✗ tree-sitter ✓ sentry-sdk ✗ asttokens ✗ types-requests ✓ datasets ✓ backoff ✗ aiofiles ✗ mpmath ✗ sqlparse ✗ azure-storage-blob ✗ msal-extensions ✗ black ✓ stack-data ✗ google-cloud-kms ✗ pure-eval ✗ google-cloud-compute ✓ marshmallow ✓ cloudpickle ✗ termcolor ✓ pytest-xdist ✗ gcsfs ✓ google-analytics-admin ✓ authlib ✓ babel ✗ asgiref ✗ gunicorn ✓ execnet ✗ webencodings ✓ jsonpatch ✗ grpc-google-iam-v1 ✗ joserfc ✓ cython ✗ databricks-sdk ✓ xmltodict ✗ narwhals ✓ setuptools-scm ✓ tornado ✗ python-json-logger ✓ durationpy ✓ google-cloud-dlp ✓ cachecontrol ✓ librt ✗ pandas-stubs ✓ databricks-sql-connector ✗ dbt-adapters ✓ google-cloud-texttospeech ✗ rich-toolkit ✓ markdown ✓ watchdog ✗ google-cloud-speech ✓ nest-asyncio ✗ pymongo ✗ mdit-py-plugins ✗ opentelemetry-instrumentation-threading ✓ google-cloud-pubsub ✓ py4j ✗ dbt-core ✓ linkify-it-py ✓ importlib-resources ✓ isort ✓ cbor2 ✓ typedload ✓ slack-sdk ✗ asyncpg ✗ uc-micro-py ✓ structlog ✓ aioitertools ✓ debugpy ✗ tinycss2 ✓ pytest-mock ✗ types-toml ✓ flatbuffers ✓ pyzmq ✗ dulwich ✓ typing-inspect ✗ pyperclip ✗ llama-parse ✓ vcs-versioning ✓ llama-cloud-services ✓ ruamel-yaml-clib ✗ xlsxwriter ✗ langsmith ✓ psycopg ✓ pytokens ✗ jsonschema-path ✓ pkginfo ✗ ghapi ✓ snowflake-snowpark-python ✗ lz4 ✗ pypdf ✗ pycryptodome ✗ google-cloud-tasks ✗ pymupdf ✓ torch ✓ msrest ✗ google-cloud-monitoring ✓ types-certifi ✓ python-docx ✗ grpclib ✓ pymysql ✓ fastuuid ✗ sphinx ✓

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.