A Dagger module for managing Dagger modules that use the Python SDK.
The Dagger CLI ships without built-in module-management commands like
init or develop. Those operations live in SDK-specific modules like this
one, called through dagger call.
Backed by github.com/dagger/sdk-sdk/polyfill.
From your workspace root:
dagger install github.com/dagger/python-sdkAfter install, the module is available in dagger call as python-sdk.
Calls that return a Changeset will print the diff and prompt you to confirm
before writing anything to your workspace.
Create a Python SDK module under the nearest .dagger/modules/<name>/:
dagger call python-sdk init --name my-modulePick a different location:
dagger call python-sdk init --name my-module --path some/dir/my-modulePick a starter template (minimal is the default; legacy gives you a
container-echo example):
dagger call python-sdk init --name my-module --template legacyinit only seeds template files. Run mod ... generate to produce the
generated SDK.
init accepts configuration flags written into the module's pyproject.toml:
dagger call python-sdk init --name my-module \
--python-version 3.13 \
--use-uv=false \
--base-image python:3.13-slimAll three are optional. By default the template's Python version is used, uv is enabled, and no base image override is written.
Read the current configuration. Settings that are not explicitly written to
pyproject.toml are reported as null rather than guessed:
dagger call python-sdk mod --path my-module config getSelect a single value:
dagger call python-sdk mod --path my-module config get python-version
dagger call python-sdk mod --path my-module config get use-uv
dagger call python-sdk mod --path my-module config get base-imageChange one or more values at once (prints a diff to confirm before writing). Each flag is optional; omitting one leaves that setting untouched:
dagger call python-sdk mod --path my-module config set \
--python-version 3.13 \
--use-uv=false \
--base-image python:3.13-slimFor a single module:
dagger call python-sdk mod --path my-module generateFor every Python SDK module in the workspace (skipping any with a
.dagger-python-sdk-skip-generate marker at or above the module root):
dagger call python-sdk generate-allList:
dagger call python-sdk mod --path my-module deps listAdd (run mod ... generate after to refresh generated SDK files):
dagger call python-sdk mod --path my-module \
deps add --source github.com/some/moduleAdd with a custom local name:
dagger call python-sdk mod --path my-module \
deps add --source github.com/some/module --name aliasRemove by name or source:
dagger call python-sdk mod --path my-module deps remove --name aliasUpdate one remote dependency, or all of them:
dagger call python-sdk mod --path my-module deps update
dagger call python-sdk mod --path my-module deps update --name some-dep# Read the version pinned in dagger.json
dagger call python-sdk mod --path my-module engine required
# Pin to a specific version
dagger call python-sdk mod --path my-module engine require --version 0.20.8
# Pin to the engine version you're currently running
dagger call python-sdk mod --path my-module engine require-current
# Pin to "latest"
dagger call python-sdk mod --path my-module engine require-latest# Every Python SDK module under the workspace
dagger call python-sdk modules pathSee python-sdk.dang for the full type surface.
To exclude a directory tree from generate-all, drop an empty
.dagger-python-sdk-skip-generate file at or above the module root. Useful
for fixtures, vendored modules, or anything you don't want regenerated in bulk.
touch some/fixture/.dagger-python-sdk-skip-generate