Florent VanDeMoortele
05/29/2026, 10:01 AMMarvin
05/29/2026, 10:01 AMMarvin
05/29/2026, 10:05 AMprefect.blocks.core.
What changed in 3.6.17
- Prefect still imports griffe from prefect.blocks.core
- griffe is still a required dependency, not an optional extra
- The main change appears to be that Prefect widened the allowed griffe range in 3.6.17
So the error:
text
ModuleNotFoundError: No module named 'griffe'
usually means your environment ended up with prefect==3.6.17 installed without griffe actually being present.
Why you’re seeing it
You're on:
- Python 3.14.2
- Poetry-managed env
Given that, the most likely cause is that your lockfile / virtualenv got into a weird state during the upgrade, and Poetry didn’t fully materialize the transitive dependency.
Quick checks
Run these in the same Poetry env as your tests:
bash
poetry run python -c "import griffe; print(griffe.__file__)"
poetry show griffe
poetry show prefect
If griffe is missing, that confirms it.
Recommended fixes
1. Refresh the lock/install cleanly
bash
poetry lock
poetry install --sync
2. If that still fails, recreate the env:
bash
poetry env remove --all
poetry install
3. As a workaround, explicitly add `griffe`:
bash
poetry add griffe
If you want to be conservative, you can pin below 2.0:
bash
poetry add "griffe>=0.49,<2.0"
Why that workaround helps
Prefect 3.6.17 should bring griffe transitively, but explicitly adding it avoids resolver/env drift and gets your tests unblocked quickly.
One more note
You're testing on Python 3.14.2. If this only happens on 3.14 and not on 3.12/3.13, that would be useful signal too. Prefect 3.6.17 itself still expects griffe to be importable.
If you want, I can help you inspect your pyproject.toml / poetry.lock and suggest the smallest safe dependency change.