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

Top 120 - 240

watchfiles ✓ jiter ✗ rsa ✗ opentelemetry-instrumentation ✓ openpyxl ✗ keyring ✓ distlib ✗ et-xmlfile ✗ grpcio-tools ✓ opentelemetry-exporter-otlp-proto-common ✓ google-genai ✓ huggingface-hub ✓ editables ✗ jaraco-classes ✓ mcp ✓ jeepney ✓ requests-toolbelt ✗ secretstorage ✓ opentelemetry-exporter-otlp-proto-grpc ✓ dnspython ✓ websocket-client ✗ coverage ✓ jaraco-functools ✓ jaraco-context ✓ wcwidth ✗ google-cloud-storage ✓ mypy-extensions ✗ gitpython ✗ pyopenssl ✗ python-discovery ✗ psycopg2-binary ✗ networkx ✓ werkzeug ✓ smmap ✗ pytest-json-ctrf ✓ ruff ✗ sse-starlette ✓ msgpack ✓ sortedcontainers ✓ pynacl ✗ sglang ✓ redis ✓ docstring-parser ✗ gitdb ✗ decorator ✗ docutils ✗ ptyprocess ✓ azure-identity ✗ pexpect ✓ docker ✗ azure-core ✓ fonttools ✓ isodate ✗ tabulate ✓ pytest-asyncio ✓ scikit-learn ✓ matplotlib ✓ prompt-toolkit ✗ httptools ✓ multiprocess ✗ google-cloud-core ✓ itsdangerous ✓ hf-xet ✗ bcrypt ✗ flask ✓ email-validator ✗ msal ✗ uvloop ✗ httpx-sse ✗ joblib ✗ kiwisolver ✓ pytest-cov ✗ orjson ✓ ydb ✗ defusedxml ✗ alembic ✓ dill ✗ kubernetes ✓ ruamel-yaml ✗ snowflake-connector-python ✓ contourpy ✓ pydantic-graph ✓ threadpoolctl ✗ google-resumable-media ✓ google-crc32c ✓ tiktoken ✓ tzlocal ✗ uv ✗ google-api-python-client ✗ deprecated ✗ opentelemetry-instrumentation-requests ✓ blinker ✓ tokenizers ✓ databricks-sql-connector ✗ chardet ✓ mako ✗ zstandard ✗ opentelemetry-exporter-otlp ✓ langchain-core ✓ google-cloud-secret-manager ✗ google-cloud-bigquery ✗ async-timeout ✓ opentelemetry-util-http ✓ google-cloud-batch ✗ cycler ✗ uritemplate ✓ google-auth-httplib2 ✓ weaviate-client ✓ asn1crypto ✗ rich-toolkit ✓ google-cloud-aiplatform ✓ rapidfuzz ✓ prometheus-client ✗ nodeenv ✗ jsonpointer ✓ google-auth-oauthlib ✓ httplib2 ✓ pyproject-hooks ✓ toml ✗ mypy ✓

Top 240 - 360

poetry-core ✓ paramiko ✗ ipython ✓ transformers ✓ google-cloud-kms ✗ xxhash ✗ google-analytics-admin ✗ google-cloud-compute ✗ identify ✓ pre-commit ✓ traitlets ✓ sympy ✗ cfgv ✓ build ✓ msal-extensions ✗ backoff ✗ h2 ✗ aiofiles ✗ gcsfs ✓ fastjsonschema ✗ hyperframe ✗ hpack ✗ types-requests ✓ azure-storage-blob ✗ sqlparse ✗ authlib ✓ jedi ✓ anthropic ✗ mpmath ✗ joserfc ✗ parso ✗ cloudpickle ✗ executing ✗ marshmallow ✓ black ✓ durationpy ✓ sentry-sdk ✗ babel ✗ gunicorn ✓ matplotlib-inline ✗ google-cloud-dlp ✗ jsonpatch ✗ setuptools-scm ✓ cython ✗ asttokens ✗ pandas-stubs ✓ grpc-google-iam-v1 ✗ databricks-sdk ✓ webencodings ✓ pytest-xdist ✗ datasets ✓ asgiref ✗ tree-sitter ✓ google-cloud-texttospeech ✗ xmltodict ✗ tornado ✗ google-cloud-speech ✗ stack-data ✗ pure-eval ✗ execnet ✗ google-cloud-pubsub ✗ dbt-adapters ✓ python-json-logger ✓ py4j ✗ nest-asyncio ✗ pymongo ✗ termcolor ✓ watchdog ✗ cachecontrol ✓ dbt-core ✓ importlib-resources ✓ opentelemetry-instrumentation-threading ✓ librt ✗ markdown ✓ vcs-versioning ✓ typedload ✓ aioitertools ✓ pyperclip ✗ pyzmq ✗ google-cloud-tasks ✗ llama-parse ✓ cyclopts ✓ llama-cloud-services ✓ isort ✓ debugpy ✗ structlog ✗ google-cloud-monitoring ✗ asyncpg ✗ snowflake-snowpark-python ✗ tinycss2 ✓ grpcio-health-checking ✓ slack-sdk ✗ typing-inspect ✗ jsonschema-path ✓ mdit-py-plugins ✗ google-cloud-bigtable ✗ pytest-mock ✗ lz4 ✗ sphinx ✓ msrest ✗ dulwich ✓ google-cloud-logging ✗ pycryptodome ✗ pymysql ✓ langsmith ✓ google-cloud-vision ✗ cfn-lint ✓ awswrangler ✓ pypdf ✗ xlsxwriter ✗ linkify-it-py ✓ pytokens ✗ flatbuffers ✓ torch ✓ pkginfo ✗ pathable ✓ keyrings-google-artifactregistry-auth ✓ sqlalchemy-bigquery ✓ tomli-w ✓ narwhals ✓

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.