Skip to content

MLflow tracking image blocked on Python 3.14: mlflow imports importlib.abc.Traversable, removed in 3.14 #222

Description

@IIchukissII

#211 moved the services to Python 3.14. The MLflow tracking image is held at 3.11, because mlflow does not run on 3.14.

Not a packaging problem

mlflow is pure-python. It resolves cleanly on cp314 — the full 95-package closure installs with --only-binary=:all: and no complaint. No wheel check, lock regeneration, or dependency gate can see this. It is mlflow's own source:

# mlflow/assistant/skill_installer.py:11
from importlib.abc import Traversable
ImportError: cannot import name 'Traversable' from 'importlib.abc'

Python 3.14 removed importlib.abc.Traversable (deprecated since 3.12, where it moved to importlib.resources.abc). The import chain is reached on server start:

uvicorn -> mlflow.server.fastapi_app
        -> mlflow.server.assistant.api
        -> mlflow.assistant.skill_installer   <- dies here

So the tracking server cannot boot. The live tracking-gateway proof caught it immediately — it gates on a real MLflow write (#204), so the broken image failed loudly rather than shipping.

Only the server is affected

The mlflow client imports fine on 3.14 (verified on CPython 3.14.6):

on Python 3.14
import mlflow (client) OK
import mlflow.server.fastapi_app (server) ImportError

That is why services/ml_service and services/notebook_tracking_gateway — both mlflow clients — already run on 3.14 with their suites green. Only infrastructure/mlflow stays behind.

The trigger

3.14.0 is the newest mlflow, and no release yet declares Python 3.14 support (no Programming Language :: Python :: 3.14 classifier on any 3.x release).

Lift when mlflow ships a release that runs on 3.14. Then it is:

  • infrastructure/mlflow/Dockerfile: python:3.11-slimpython:3.14-slim
  • regenerate infrastructure/mlflow/requirements.txt for cp314 — the command is in the file's header. Note it needs two platform tags (manylinux_2_28_x86_64 and manylinux2014_x86_64): the scientific wheels ship 2_28 for cp314 while psycopg2-binary still ships only manylinux2014, and either tag alone fails to resolve.
  • psycopg2-binary 2.9.9 → 2.9.12 goes with it (2.9.9 publishes no cp314 wheel)
  • remove the hold comment at the top of the Dockerfile
  • the tracking-gateway integration proof must be green — it is the check that catches exactly this

Blocks the last image of Dependabot #182 (with the 2 notebook kernels in #220).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    dependenciesPull requests that update a dependency filedockerPull requests that update docker codepythonPull requests that update python codetech-debt

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions