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

Top 120 - 240

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

Top 240 - 360

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

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.