Skip to main content

Generate DVC pipeline files from Python declarations.

Project description

dvcgen

Write your DVC pipeline once, in Python.

dvcgen is an early-stage command-line tool for generating DVC pipeline files from lightweight declarations embedded in Python pipeline scripts.

Current Status

Implemented:

  • A Python package named dvcgen
  • A dvcgen console command
  • CLI argument parsing for pipeline script paths
  • CLI input validation and overwrite protection
  • Public declaration helpers: stage(), dep(), out(), and param()
  • Python script inspection for top-level literal declarations
  • dvc.yaml generation
  • params.yaml generation

Installation

uv tool install dvcgen

Or run without installing:

uvx dvcgen --help

Usage

Show CLI help:

dvcgen --help

Generate DVC files from one or more Python pipeline scripts:

dvcgen pipeline/*.py

The command writes dvc.yaml and params.yaml in the current directory. Stage names are derived from input Python filenames. For example, pipeline/train.py becomes the train stage.

By default, dvcgen refuses to overwrite existing dvc.yaml or params.yaml files. Use --force when you intentionally want to replace them:

dvcgen --force pipeline/*.py

Write files to another directory with --output-dir:

dvcgen --output-dir generated pipeline/*.py

Bad inputs fail with an error message and a non-zero exit code. Successful runs print the files that were written.

Inspect declarations from Python without executing the pipeline script:

from dvcgen.inspect import inspect_file

declarations = inspect_file("pipeline/train.py")
print(declarations.deps)
print(declarations.outs)
print(declarations.params)

Release

Publishing is intentionally manual while the project is early stage. Build and validate artifacts before uploading anything:

uv run python -m build
uv run twine check dist/*

Use TestPyPI first when rehearsing a release. Create a TestPyPI API token, then upload with the token as the password:

uv run twine upload --repository testpypi dist/*

Use the production PyPI repository only when the version, changelog, and package name decision are ready:

uv run twine upload dist/*

For both repositories, use __token__ as the username and the repository API token as the password. Avoid committing tokens or storing them in project files.

Before the first production upload, decide whether to publish the current minimal release to reserve the dvcgen package name on PyPI. Once a version is uploaded to PyPI or TestPyPI, that exact version cannot be uploaded again; bump the version before retrying with changed artifacts.

Planned MVP

The intended MVP is:

  1. Pipeline scripts declare dependencies, outputs, and parameters in Python.
  2. dvcgen inspects those declarations without executing the scripts.
  3. dvcgen writes dvc.yaml and params.yaml.

Example API:

from dvcgen import dep, out, param, stage

stage(
    cmd="python -m pipeline.train",
    wdir=".",
    desc="Train model",
    frozen=False,
    always_changed=False,
)

TRAIN_DATA = dep("data/processed.csv")
MODEL = out("models/model.pkl")

LR = param("train.lr", 0.001)

stage() declares metadata for the generated DVC stage. It is optional; when it is omitted, dvcgen keeps the default command:

"cmd": "python pipeline/train.py"

Supported stage fields are:

  • cmd: override the command DVC runs for this stage
  • wdir: stage working directory
  • desc: human-readable stage description
  • frozen: protect the stage from reproduction
  • always_changed: always consider the stage changed

wdir, desc, frozen, and always_changed are emitted only when explicitly provided. Each pipeline script may declare at most one stage().

out() also accepts DVC output options as keyword arguments:

MODEL = out("models/model.pkl", cache=False, persist=True)

Supported output options are cache, remote, persist, desc, and push. Plain out("path") declarations continue to generate simple string entries. Metrics and plots are separate DVC stage metadata and are not modeled as out() options.

Running:

dvcgen pipeline/train.py

Generates dvc.yaml:

"stages":
  "train":
    "cmd": "python pipeline/train.py"
    "deps":
      - "pipeline/train.py"
      - "data/processed.csv"
    "outs":
      - "models/model.pkl"
    "params":
      - "train.lr"

And params.yaml:

"train":
  "lr": 0.001

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dvcgen-0.7.0.tar.gz (71.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dvcgen-0.7.0-py3-none-any.whl (10.0 kB view details)

Uploaded Python 3

File details

Details for the file dvcgen-0.7.0.tar.gz.

File metadata

  • Download URL: dvcgen-0.7.0.tar.gz
  • Upload date:
  • Size: 71.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.4

File hashes

Hashes for dvcgen-0.7.0.tar.gz
Algorithm Hash digest
SHA256 59a9728fd66ffe0e0311a17263d6d732229c60bfb019941085f2a5c1c13f6ece
MD5 7f415425bffff9c402d9b1fb66671961
BLAKE2b-256 581bf5d6993348d3df68f034ecb73919e8d8175e3dd6a1b6bd5213f8ed6d3e25

See more details on using hashes here.

File details

Details for the file dvcgen-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: dvcgen-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 10.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.4

File hashes

Hashes for dvcgen-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 46fb64996c36608ce68691d1b4b2bc291978d58b7f49e62c451ad20f7468af12
MD5 f5577db2b089e4b06f0d2492e2019cc4
BLAKE2b-256 7a10a98d6613175a7e4b168fc4056d2ba1d9969ea8af8808645ff3f2abadf7cb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page