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

Top 120 - 240

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

Top 240 - 360

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