Run Selective Migration Phases

plone-codemod runs 8 phases. By default, phases 1-4 and 6 are enabled. You can skip default phases or opt into additional ones.

Skip phases

# Skip Python import migration (only ZCML + XML + PT + audit)
plone-codemod ./src/ --skip-python

# Skip the semgrep audit
plone-codemod ./src/ --skip-audit

# Only run Python imports
plone-codemod ./src/ --skip-zcml --skip-xml --skip-pt --skip-audit

Enable opt-in phases

# Bootstrap 3 to 5 migration
plone-codemod ./src/ --bootstrap

# PEP 420 namespace packages
plone-codemod ./src/ --namespaces

# setup.py to pyproject.toml
plone-codemod ./src/ --packaging

# Full modernization (recommended order)
plone-codemod ./src/ --namespaces --packaging

Preview before applying

Always preview first with --dry-run:

plone-codemod ./src/ --dry-run
plone-codemod ./src/ --bootstrap --dry-run
plone-codemod ./src/ --namespaces --packaging --dry-run

Phase order

Phases always run in a fixed order regardless of flag position. Phase 7 (namespaces) always runs before Phase 8 (packaging) so that namespace_packages is cleaned from setup.py before pyproject.toml generation.

See Migration Phases for details on each phase.