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. 137 green packages (38.1%) have dropped support for Python 3.9;
  2. 223 uncolored packages (61.9%) 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 ✗ setuptools ✓ certifi ✗ requests ✗ typing-extensions ✗ idna ✗ charset-normalizer ✗ botocore ✗ aiobotocore ✗ python-dateutil ✗ six ✓ cryptography ✗ grpcio-status ✗ cffi ✗ pyyaml ✗ numpy ✓ s3transfer ✗ pycparser ✓ pydantic ✗ s3fs ✓ protobuf ✓ pip ✗ click ✓ fsspec ✓ pluggy ✗ pygments ✗ pandas ✓ pydantic-core ✗ attrs ✗ anyio ✗ h11 ✗ platformdirs ✓ markupsafe ✓ wheel ✗ annotated-types ✗ jmespath ✗ jinja2 ✓ filelock ✓ pytest ✓ pathspec ✗ importlib-metadata ✓ httpx ✗ typing-inspection ✗ iniconfig ✓ httpcore ✗ pyjwt ✗ zipp ✓ rsa ✗ rich ✗ grpcio ✗ pytz ✗ pyasn1 ✗ python-dotenv ✓ aiohttp ✗ jsonschema ✓ multidict ✗ google-auth ✗ tomli ✓ tzdata ✓ yarl ✓ google-api-core ✗ tqdm ✗ markdown-it-py ✓ virtualenv ✗ uvicorn ✓ trove-classifiers ✓ mdurl ✗ colorama ✗ frozenlist ✗ scipy ✓ googleapis-common-protos ✗ propcache ✗ rpds-py ✓ pillow ✓ requests-oauthlib ✗ referencing ✓ aiosignal ✓ fastapi ✓ greenlet ✓ pyasn1-modules ✗ sqlalchemy ✗ jsonschema-specifications ✗ wrapt ✗ hatchling ✓ google-genai ✓ starlette ✓ pyarrow ✓ grpcio-tools ✓ aiohappyeyeballs ✗ oauthlib ✗ psutil ✓ awscli ✗ pyparsing ✗ cachetools ✓ opentelemetry-semantic-conventions ✗ tenacity ✓ regex ✓ opentelemetry-proto ✗ opentelemetry-api ✗ annotated-doc ✗ opentelemetry-sdk ✗ tomlkit ✗ more-itertools ✗ openpyxl ✗ shellingham ✗ lxml ✗ et-xmlfile ✗ sniffio ✓ beautifulsoup4 ✓ requests-toolbelt ✗ docutils ✗ exceptiongroup ✓ soupsieve ✗ typer ✓ yandexcloud ✗ websocket-client ✗ distlib ✗ langchain ✓

Top 120 - 240

pydantic-settings ✓ msgpack ✓ websockets ✓ proto-plus ✗ opentelemetry-exporter-otlp-proto-grpc ✗ pyopenssl ✗ flask ✓ openai ✗ werkzeug ✓ google-cloud-storage ✗ dnspython ✓ mypy-extensions ✗ coverage ✓ pynacl ✗ opentelemetry-exporter-otlp-proto-http ✗ psycopg2-binary ✗ python-multipart ✓ isodate ✗ distro ✗ wcwidth ✗ keyring ✓ decorator ✗ networkx ✓ opentelemetry-exporter-otlp-proto-common ✗ sortedcontainers ✓ huggingface-hub ✗ poetry-core ✓ matplotlib ✓ fonttools ✓ azure-core ✗ pexpect ✓ scikit-learn ✓ jaraco-classes ✓ secretstorage ✓ ptyprocess ✓ jeepney ✓ azure-identity ✗ textual ✗ ruff ✗ joblib ✗ gitpython ✗ redis ✓ bcrypt ✗ msal ✗ kiwisolver ✓ jaraco-context ✓ editables ✗ snowflake-connector-python ✗ jiter ✗ jaraco-functools ✓ ruamel-yaml ✗ types-requests ✓ defusedxml ✗ watchfiles ✗ google-cloud-core ✗ zstandard ✗ opentelemetry-exporter-otlp ✗ itsdangerous ✓ opensearch-py ✓ rapidfuzz ✓ contourpy ✓ tabulate ✗ async-timeout ✓ alembic ✓ smmap ✗ threadpoolctl ✗ prompt-toolkit ✗ email-validator ✗ gitdb ✗ requests-aws4auth ✗ google-cloud-aiplatform ✗ deprecated ✗ orjson ✓ opentelemetry-instrumentation ✗ pytest-cov ✗ docker ✗ kubernetes ✗ asn1crypto ✗ google-crc32c ✓ google-resumable-media ✗ tzlocal ✗ chardet ✓ setuptools-scm ✗ google-cloud-bigquery ✗ blinker ✓ paramiko ✗ google-api-python-client ✗ pytest-asyncio ✓ events ✓ pyproject-hooks ✓ prometheus-client ✗ backoff ✗ dill ✗ build ✗ fastjsonschema ✗ cycler ✗ docstring-parser ✗ google-auth-oauthlib ✗ mako ✗ marshmallow ✓ uritemplate ✓ google-auth-httplib2 ✗ uv ✗ msal-extensions ✗ httplib2 ✓ azure-storage-blob ✗ hf-xet ✗ jsonpointer ✗ sqlparse ✗ opensearch-protobufs ✓ babel ✗ tokenizers ✗ sympy ✗ isort ✓ nodeenv ✗ xmltodict ✗ uvloop ✗ ipython ✓ transformers ✓ aiofiles ✗

Top 240 - 360

google-cloud-secret-manager ✗ mypy ✗ gcsfs ✓ mcp ✓ grpcio-health-checking ✗ parso ✗ mpmath ✗ opentelemetry-util-http ✗ traitlets ✓ tornado ✗ google-cloud-batch ✗ tiktoken ✓ pre-commit ✓ gunicorn ✓ cloudpickle ✗ black ✓ jedi ✗ sse-starlette ✓ durationpy ✓ httpx-sse ✗ toml ✗ executing ✗ cython ✗ py4j ✗ opentelemetry-instrumentation-requests ✗ litellm ✗ importlib-resources ✓ google-analytics-admin ✗ httptools ✓ authlib ✗ identify ✓ asgiref ✗ asttokens ✗ cfgv ✓ langchain-core ✓ cattrs ✓ matplotlib-inline ✗ markdown ✓ sentry-sdk ✗ databricks-sdk ✗ cachecontrol ✓ python-json-logger ✗ grpc-google-iam-v1 ✗ webencodings ✓ nest-asyncio ✗ typedload ✓ stack-data ✗ pure-eval ✗ pytest-xdist ✗ dbt-core ✓ jsonpatch ✗ aliyun-python-sdk-core ✗ execnet ✗ pymongo ✗ opentelemetry-exporter-prometheus ✗ xxhash ✗ typing-inspect ✗ pandas-stubs ✓ aioitertools ✓ debugpy ✗ watchdog ✗ dulwich ✓ jsonschema-path ✓ pkginfo ✗ pymysql ✓ h2 ✗ hyperframe ✗ hpack ✗ termcolor ✓ awswrangler ✓ pyzmq ✗ dbt-adapters ✓ pytest-mock ✗ ruamel-yaml-clib ✗ portalocker ✗ dataclasses-json ✗ poetry ✓ msrest ✗ typer-slim ✓ lz4 ✗ mccabe ✗ pyperclip ✗ pathable ✓ invoke ✗ python-discovery ✗ langsmith ✓ requests-file ✓ semver ✗ deepdiff ✗ rfc3339-validator ✓ pycryptodome ✗ smart-open ✓ slack-sdk ✗ pylint ✓ databricks-sql-connector ✗ dbt-common ✓ pygithub ✗ torch ✓ rich-toolkit ✓ argcomplete ✗ installer ✓ tinycss2 ✓ cleo ✗ snowflake-sqlalchemy ✗ arrow ✗ google-cloud-monitoring ✗ crashtest ✗ sphinx ✓ pendulum ✗ jupyter-core ✓ multiprocess ✗ notebook ✗ google-cloud-vision ✗ google-cloud-speech ✗ pycodestyle ✓ google-cloud-kms ✗ google-cloud-compute ✗ shapely ✓ ipykernel ✓ future ✗

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.